120 lines
3.5 KiB
YAML
120 lines
3.5 KiB
YAML
trigger:
|
|
- main
|
|
- dev
|
|
- feature/*
|
|
- hotfix/*
|
|
- bugfix/*
|
|
- release/*
|
|
|
|
pr:
|
|
autoCancel: true # automatically cancel PR if new push made
|
|
drafts: true # get triggered when doing drafts
|
|
branches:
|
|
include:
|
|
- main
|
|
- dev
|
|
- feature/*
|
|
- hotfix/*
|
|
- bugfix/*
|
|
- release/*
|
|
|
|
parameters:
|
|
# https://stackoverflow.com/a/70046417
|
|
- name: matrix
|
|
type: object
|
|
default:
|
|
- job_name: 'UbuntuPython38'
|
|
py: '3.8'
|
|
img: 'ubuntu-latest'
|
|
every_time: false
|
|
- job_name: 'UbuntuPython310'
|
|
py: '3.10'
|
|
img: 'ubuntu-latest'
|
|
every_time: true
|
|
- job_name: 'WindowsPython38'
|
|
py: '3.8'
|
|
img: 'windows-latest'
|
|
every_time: false
|
|
- job_name: 'WindowsPython310'
|
|
py: '3.10'
|
|
img: 'windows-latest'
|
|
every_time: false
|
|
- job_name: 'MacOSPython38'
|
|
py: '3.8'
|
|
img: 'macOS-latest'
|
|
every_time: false
|
|
- job_name: 'MacOSPython310'
|
|
py: '3.10'
|
|
img: 'macOS-latest'
|
|
every_time: false
|
|
|
|
stages:
|
|
- stage: Test
|
|
jobs:
|
|
- ${{ each item in parameters.matrix }}:
|
|
- job: ${{ item.job_name }}
|
|
pool:
|
|
vmImage: ${{ item.img }}
|
|
|
|
condition: or( eq(variables['Build.Reason'], 'PullRequest'), ${{ item.every_time }} )
|
|
|
|
steps:
|
|
- task: UsePythonVersion@0
|
|
inputs:
|
|
versionSpec: ${{ item.py }}
|
|
displayName: 'Use Python ${{ item.py }}'
|
|
|
|
- script: |
|
|
python -m pip install pre-commit
|
|
pre-commit install
|
|
pre-commit run --all-files
|
|
displayName: 'Run pre-commits'
|
|
|
|
- script: |
|
|
python -m pip install --upgrade pip==23.0.1
|
|
pip install wheel==0.38.4 --upgrade
|
|
pip install setuptools==66 --upgrade
|
|
pip install build==0.10.0
|
|
pip install pytest-azurepipelines
|
|
displayName: 'Install build dependencies'
|
|
|
|
- script: |
|
|
python -m build
|
|
displayName: 'Build PrimAITE'
|
|
|
|
- script: |
|
|
PRIMAITE_WHEEL=$(ls ./dist/primaite*.whl)
|
|
python -m pip install $PRIMAITE_WHEEL[dev]
|
|
displayName: 'Install PrimAITE'
|
|
condition: or(eq( variables['Agent.OS'], 'Linux' ), eq( variables['Agent.OS'], 'Darwin' ))
|
|
|
|
- script: |
|
|
forfiles /p dist\ /m *.whl /c "cmd /c python -m pip install @file[dev]"
|
|
displayName: 'Install PrimAITE'
|
|
condition: eq( variables['Agent.OS'], 'Windows_NT' )
|
|
|
|
- script: |
|
|
primaite setup
|
|
displayName: 'Perform PrimAITE Setup'
|
|
|
|
- script: |
|
|
pytest -v tests/ --cov=src/ -o junit_family=xunit2 --junitxml=junit/test-results.xml --cov-report xml:$(System.DefaultWorkingDirectory)/coverage.xml --cov-report html:$(System.DefaultWorkingDirectory)/htmlcov --cov-report term
|
|
displayName: 'Run tests and code coverage'
|
|
|
|
- task: PublishTestResults@2
|
|
condition: succeededOrFailed()
|
|
inputs:
|
|
testRunner: JUnit
|
|
testResultsFiles: 'junit/**.xml'
|
|
testRunTitle: 'Publish test results'
|
|
|
|
- publish: $(System.DefaultWorkingDirectory)/htmlcov/
|
|
artifact: coverage_report
|
|
|
|
- task: PublishCodeCoverageResults@2
|
|
displayName: 'Publish coverage report'
|
|
inputs:
|
|
codeCoverageTool: Cobertura
|
|
summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage.xml'
|
|
failIfCoverageEmpty: true
|