aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--azure-pipelines.yml107
1 files changed, 63 insertions, 44 deletions
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 89205c1e..d44683ce 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -1,48 +1,67 @@
# https://aka.ms/yaml
jobs:
-- job: test
- displayName: 'Lint & Test'
-
- pool:
- vmImage: 'Ubuntu 16.04'
-
- variables:
- PIP_CACHE_DIR: ".cache/pip"
- PIP_SRC: ".cache/src"
- PIPENV_CACHE_DIR: ".cache/pipenv"
- PIPENV_DONT_USE_PYENV: 1
- PIPENV_HIDE_EMOJIS: 1
- PIPENV_IGNORE_VIRTUALENVS: 1
- PIPENV_NOSPIN: 1
-
- steps:
- - task: UsePythonVersion@0
- displayName: 'Set Python version'
- inputs:
- versionSpec: '3.7.x'
- addToPath: true
-
- - script: pip3 install pipenv
- displayName: 'Install pipenv'
-
- - script: pipenv install --dev --deploy --system
- displayName: 'Install project using pipenv'
-
- - script: python3 -m flake8
- displayName: 'Run linter'
-
-- job: build
- displayName: 'Build & Push Container'
- condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))
- dependsOn: 'test'
-
- steps:
- - task: Docker@2
+ - job: test
+ displayName: 'Lint & Test'
+
+ pool:
+ vmImage: 'Ubuntu 16.04'
+
+ variables:
+ PIP_CACHE_DIR: ".cache/pip"
+ PIP_SRC: ".cache/src"
+ PIPENV_CACHE_DIR: ".cache/pipenv"
+ PIPENV_DONT_USE_PYENV: 1
+ PIPENV_HIDE_EMOJIS: 1
+ PIPENV_IGNORE_VIRTUALENVS: 1
+ PIPENV_NOSPIN: 1
+ PRE_COMMIT_HOME: $(Pipeline.Workspace)/pre-commit-cache
+
+ steps:
+ - task: UsePythonVersion@0
+ displayName: 'Set Python version'
+ inputs:
+ versionSpec: '3.7.x'
+ addToPath: true
+
+ - script: pip3 install pipenv
+ displayName: 'Install pipenv'
+
+ - script: pipenv install --dev --deploy --system
+ displayName: 'Install project using pipenv'
+
+ # Create an executable shell script which replaces the original pipenv binary.
+ # The shell script ignores the first argument and executes the rest of the args as a command.
+ # It makes the `pipenv run flake8` command in the pre-commit hook work by circumventing
+ # pipenv entirely, which is too dumb to know it should use the system interpreter rather than
+ # creating a new venv.
+ - script: |
+ printf '%s\n%s' '#!/bin/bash' '"${@:2}"' > $(PythonVersion.pythonLocation)/bin/pipenv \
+ && chmod +x $(PythonVersion.pythonLocation)/bin/pipenv
+ displayName: 'Mock pipenv binary'
+
+ - task: Cache@2
+ displayName: 'Restore pre-commit environment'
+ inputs:
+ key: pre-commit | "$(PythonVersion.pythonLocation)" | .pre-commit-config.yaml
+ restoreKeys: |
+ pre-commit | "$(PythonVersion.pythonLocation)"
+ path: $(PRE_COMMIT_HOME)
+
+ - script: pre-commit run --all-files
+ displayName: 'Run pre-commit hooks'
+
+ - job: build
displayName: 'Build & Push Container'
- inputs:
- containerRegistry: 'DockerHub'
- repository: 'pythondiscord/seasonalbot'
- command: 'buildAndPush'
- Dockerfile: '**/Dockerfile'
- tags: 'latest'
+ condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))
+ dependsOn: 'test'
+
+ steps:
+ - task: Docker@2
+ displayName: 'Build & Push Container'
+ inputs:
+ containerRegistry: 'DockerHub'
+ repository: 'pythondiscord/seasonalbot'
+ command: 'buildAndPush'
+ Dockerfile: '**/Dockerfile'
+ tags: 'latest'