template for your azure pipelines
This a template that will help simplify the
Azure Pipelines configuration when using
tox to drive your CI.
First configure a github service connection
It is suggested to use a generic name, such as github
so forks can also configure the same.
You can find this in Project Settings
=> Service connections
in the Azure Devops dashboard for your project. Project
settings is located in the bottom left corner of the UI as of 2019-04-30. Below I’m using the endpoint name github
.
To load the template, add this to the beginning of the azure-pipelines.yml
resources:
repositories:
- repository: tox
type: github
endpoint: github
name: tox-dev/azure-pipelines-template
ref: refs/tags/0.2
this will make the templates in this repository available in the tox
namespace. Note the ref allows you to pin the
template version you want, you can use refs/master
if you want latest unstable version.
run-tox-env.yml
tox will run under Python 3.8
. tox environments generate Junit file under .tox\junit.{toxenv}.xml
. Environments
tracking coverage data generate will have another tox environment to normalize/merge coverage files. These should be
invoked after test suit runs, and one final time to merge all the sub-coverage files when all specified tox environments
finished (independent their outcome).
This job template will run tox for a given set of tox target on given platforms (new in 0.2
). Features and
functionality:
image_name
variable to macOs
, linux
or windows
depending on the image used)3.8
) and install a specified tox into that.tox\junit.{toxenv}.xml
upload it as test report.tox\coverage.xml
or .tox\.coverage
and uploadThe following example will run py36
and py37
on Windows, Linux and MacOs. It will also invoke fix_lint
and docs
target with python3.8
on Linux. It will also run the the coverage
tox environment for py37
and py36
, and then
save as build artifacts files .tox/.coverage
and .tox/coverage.xml
:
jobs:
- template: run-tox-env.yml@tox
parameters:
tox_version: ""
jobs:
fix_lint: null
docs: null
py37:
image: [linux, windows, macOs]
py36:
image: [linux, windows, macOs]
coverage:
with_toxenv: "coverage"
for_envs: [py39, py38]
At root level you can control with:
tox_version
the tox version specifier to install, this defaults to latest in PyPi (tox
) - setting it to empty,dependsOn
jobs these set of jobs should depend onbefore
steps to be run before invoking every tox environment (useful to provision additional dependencies), usejobs
a map where the key is the tox environment key, while the value is configuration related to that environment:
the value contains:
image
to list an array of targeted architecture, the array elements are mapped as:
linux
- ubuntu-latest
windows
- windows-latest
osx
- macOS-latest
ubuntu-latest
.py
- determines the python to provision for running the environment, if not set will be derived from the key:
py27
or starts with py27-
- Python 2.7py36
or starts with py36-
- Python 3.6py37
or starts with py37-
- Python 3.7py38
or starts with py38-
- Python 3.8py39
or starts with py39-
- Python 3.9py310
or starts with py310-
- Python 3.10pypy
or starts with pypy-
- PyPy 2pypy3
or starts with pypy3-
- PyPy 3jython
- Jython is available from under Linux and MacOs.architecture
: Python architecture (either x64
or x86
) with default x64
(only affects windows)before
steps to be run before invoking this tox environment (useful to provision additional dependencies)coverage
- if set runs a tox environment (with_toxenv
- must run with python3.8
) to normalize coverage data
(must generate .tox/.coverage
and .tox/coverage.xml
) after all environments within for_envs
. It also enqueues a
final job to use with_toxenv
to merge the coverage files under the name report_coverage
.
publish-pypi.yml
The project is PEP-517 and PEP-518 compatible. A PyPi remote and external feed is configured via Azure Pipelines project
dashboard.
This job template will publish the Python package in the current folder (both sdist and wheel) via the PEP-517/8 build
mechanism and twine.
- ${{ if startsWith(variables['Build.SourceBranch'], 'refs/tags/') }}:
- template: publish-pypi.yml@tox
parameters:
external_feed: "toxdev"
pypi_remote: "pypi-toxdev"
dependsOn: [report_coverage, fix_lint, docs]
external_feed
- the external feed to uploadpypi_remote
- the pypi remote to upload todependsOn
- jobs this jobs depends on