-
Notifications
You must be signed in to change notification settings - Fork 1
/
.cirrus.yml
195 lines (178 loc) · 6.83 KB
/
.cirrus.yml
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# Cirrus CI configuration file using the matrix feature
# Read more under:
# - https://cirrus-ci.org/guide/quick-start/
# - https://cirrus-ci.org/guide/writing-tasks/
# THIS FILE IS SUPPOSED TO BE AN EXAMPLE. MODIFY IT ACCORDING TO YOUR NEEDS!
---
# ---- Default values to be merged into tasks ----
env:
LC_ALL: C
LC_CTYPE: UTF-8
LANG: C
PIP_CACHE_DIR: ${CIRRUS_WORKING_DIR}/.cache/pip
PRE_COMMIT_HOME: ${CIRRUS_WORKING_DIR}/.cache/pre-commit
# Coveralls configuration
CI_NAME: cirrus-ci
CI_BRANCH: ${CIRRUS_BRANCH}
CI_PULL_REQUEST: ${CIRRUS_PR}
CI_BUILD_NUMBER: ${CIRRUS_BUILD_ID}
CI_BUILD_URL: https://cirrus-ci.com/build/${CIRRUS_BUILD_ID}
COVERALLS_PARALLEL: "true"
COVERALLS_FLAG_NAME: ${CIRRUS_TASK_NAME}
# TODO: You will also need to set `COVERALLS_REPO_TOKEN` to work with coveralls.
# We recommend that you do that via Cirrus CI web interface via
# `Environment variable overrides`.
# See: https://coveralls-python.readthedocs.io/en/latest/usage/index.html
# ---- Templates ----
.task_template: &task-template
debug_information_script:
- echo "$(which python) -- $(python -VV)"
- echo "$(which pip) -- $(pip -VV)"
- python -c 'import os, sys; print(os.name, sys.platform, getattr(sys, "abiflags", None))'
prepare_script: # avoid git failing with setuptools-scm
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
pip_cache:
folder: "${CIRRUS_WORKING_DIR}/.cache/pip"
fingerprint_script: echo "${CIRRUS_OS}-${CIRRUS_TASK_NAME}"
reupload_on_changes: true
pre_commit_cache:
folder: "${CIRRUS_WORKING_DIR}/.cache/pre-commit"
fingerprint_script: echo "${CIRRUS_OS}-${CIRRUS_TASK_NAME}" | cat - .pre-commit-config.yaml
reupload_on_changes: true
.test_template: &test-template
# Requires pip, tox, and pipx to be installed via OS/pip
alias: test
depends_on: [build]
<<: *task-template
dist_cache: {folder: dist, fingerprint_script: echo $CIRRUS_BUILD_ID} # download
test_script:
- tox --installpkg dist/*.whl -- -rfEx --durations 10 --color yes
submit_coverage_script:
- pipx run coverage xml -o coverage.xml
- pipx run coveralls --submit coverage.xml
# Deep clone script for POSIX environments (required for setuptools-scm)
.clone_script: &clone |
if [ -z "$CIRRUS_PR" ]; then
git clone --recursive --branch=$CIRRUS_BRANCH https://x-access-token:${CIRRUS_REPO_CLONE_TOKEN}@github.com/${CIRRUS_REPO_FULL_NAME}.git $CIRRUS_WORKING_DIR
git reset --hard $CIRRUS_CHANGE_IN_REPO
else
git clone --recursive https://x-access-token:${CIRRUS_REPO_CLONE_TOKEN}@github.com/${CIRRUS_REPO_FULL_NAME}.git $CIRRUS_WORKING_DIR
git fetch origin pull/$CIRRUS_PR/head:pull/$CIRRUS_PR
git reset --hard $CIRRUS_CHANGE_IN_REPO
fi
# ---- CI Pipeline ----
build_task:
name: build (Linux - 3.10)
alias: build
container: {image: "python:3.10-bullseye"}
clone_script: *clone
dist_cache: # build once and upload to be used by other tasks
folder: dist
fingerprint_script: echo $CIRRUS_BUILD_ID
reupload_on_changes: true
<<: *task-template
install_script: pip install tox
build_script: tox -e clean,build
check_task:
name: check (Linux - 3.11)
alias: check
depends_on: [build]
container: {image: "python:3.11-bullseye"} # most recent => better types
dist_cache: {folder: dist, fingerprint_script: echo $CIRRUS_BUILD_ID} # download
<<: *task-template
install_script: pip install pre-commit
check_script:
- pre-commit run --all-files --show-diff-on-failure --color always
# - tox -e typecheck
linux_task:
matrix:
- name: test (Linux - 3.7)
container: {image: "python:3.7-bullseye"}
- name: test (Linux - 3.8)
container: {image: "python:3.8-bullseye"}
- name: test (Linux - 3.9)
container: {image: "python:3.9-bullseye"}
- name: test (Linux - 3.10)
container: {image: "python:3.10-bullseye"}
- name: test (Linux - 3.11)
container: {image: "python:3.11-bullseye"}
- name: test (Linux - 3.12)
container: {image: "python:3.12-rc-bullseye"}
allow_failures: true # Experimental
install_script:
- python -m pip install --upgrade pip tox pipx
<<: *test-template
mamba_task:
name: test (Linux - mambaforge)
container: {image: "condaforge/mambaforge"}
install_script: # Overwrite template
- mamba install -y pip pipx tox
<<: *test-template
macos_task:
name: test (macOS - brew)
macos_instance:
image: ghcr.io/cirruslabs/macos-monterey-xcode
brew_cache: {folder: "$HOME/Library/Caches/Homebrew"}
install_script: brew install python tox pipx
env:
PATH: "/opt/homebrew/opt/python/libexec/bin:${PATH}"
<<: *test-template
freebsd_task:
name: test (freebsd - 3.9)
freebsd_instance: {image_family: freebsd-13-1}
install_script:
- pkg remove -y python lang/python
- pkg install -y git python39 py39-pip py39-gdbm py39-sqlite3 py39-tox py39-pipx py39-tomli
- ln -s /usr/local/bin/python3.9 /usr/local/bin/python
<<: *test-template
windows_task:
name: test (Windows - 3.9.10)
windows_container:
image: "cirrusci/windowsservercore:2019"
os_version: 2019
env:
CIRRUS_SHELL: bash
PATH: /c/Python39:/c/Python39/Scripts:/c/tools:${PATH}
install_script:
# Activate long file paths to avoid some errors
- ps: New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
- choco install -y --no-progress python3 --version=3.9.10 --params "/NoLockdown"
- pip install --upgrade certifi
- python -m pip install -U pip tox pipx
<<: *test-template
finalize_task:
container: {image: "python:3.10-bullseye"}
depends_on: [test]
<<: *task-template
install_script: pip install coveralls
finalize_coverage_script: coveralls --finish
linkcheck_task:
name: linkcheck (Linux - 3.10)
container: {image: "python:3.10-bullseye"}
depends_on: [finalize]
allow_failures: true
dist_cache: {folder: dist, fingerprint_script: echo $CIRRUS_BUILD_ID} # download
<<: *task-template
install_script: pip install tox
linkcheck_script: tox --installpkg dist/*.whl -e linkcheck -- -q
publish_task:
name: publish (Linux - 3.10)
container: {image: "python:3.10-bullseye"}
depends_on: [check, build, test]
only_if: $CIRRUS_TAG =~ 'v\d.*' && $CIRRUS_USER_PERMISSION == "admin"
<<: *task-template
dist_cache: {folder: dist, fingerprint_script: echo $CIRRUS_BUILD_ID} # download
env:
TWINE_REPOSITORY: pypi
TWINE_USERNAME: __token__
TWINE_PASSWORD: $PYPI_TOKEN
# TODO: You can set a `environment variable override` for PYPI_TOKEN
# in Cirrus CI web interface using an encrypted variable.
# See:
# - https://pypi.org/help/#apitoken
# - https://cirrus-ci.org/guide/writing-tasks/#encrypted-variables
install_script: pip install tox
publish_script:
- ls dist/*
- tox -e publis