1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/python
#
# NOTES:
#
# Display name of each step should be prefixed with one of the following:
# CR-QC: for quality control measures.
# CR-BUILD: for build-related tasks.
# CR-DEPLOY: for publication or deployment.
# [no prefix]: for unrelated CI setup/tooling.
#
# Use PowerShell Core for any utility scripts so they are re-usable across
# Windows, macOS, and Linux.
#
trigger:
- master
stages:
- stage: Unit_Tests
displayName: Unit Tests
jobs:
- job: pytest
displayName: pytest
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
py3.5:
PYTHON_VERSION: '3.5'
py3.6:
PYTHON_VERSION: '3.6'
py3.7:
PYTHON_VERSION: '3.7'
py3.8:
PYTHON_VERSION: '3.8'
steps:
- task: UsePythonVersion@0
displayName: 'Use Python version'
inputs:
versionSpec: '$(PYTHON_VERSION)'
architecture: 'x64'
- script: python -m pip install -r requirements-dev.txt
displayName: 'CR-QC: Install from local repo'
- script: pytest ./testproject/
displayName: 'CR-QC: Run unit tests'
- task: PublishTestResults@2
displayName: 'Publish unit test report'
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for Python $(python.version)'
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage report'
condition: succeededOrFailed()
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage.xml'
- stage: Static_Analysis
displayName: Static Analysis
dependsOn: Unit_Tests
condition: succeeded('Unit_Tests')
jobs:
- job: lint
displayName: Linters
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UsePythonVersion@0
displayName: 'Use Python version'
inputs:
versionSpec: '3.8'
architecture: 'x64'
- script: python -m pip install -r requirements-dev.txt
displayName: 'CR-QC: Install from local repo'
- script: flake8 .
displayName: 'CR-QC: Static analysis (flake8)'
- script: mypy .
displayName: 'CR-QC: Type check (mypy)'
- job: codecov
displayName: Code Coverage
pool:
vmImage: 'ubuntu-latest'
steps:
- task: DownloadPipelineArtifact@2
displayName: 'Download code coverage from current build'
inputs:
source: 'current'
path: '$(Agent.WorkFolder)/current-artifacts'
project: '$(System.TeamProjectId)'
pipeline: '$(System.DefinitionId)'
- pwsh: ./ci/compare-codecov.ps1 -wd $Env:WorkDir
displayName: 'CR-QC: Compare code coverage'
env:
WorkDir: $(Agent.WorkFolder)
|