-
-
Notifications
You must be signed in to change notification settings - Fork 6
155 lines (154 loc) · 5.52 KB
/
ci.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
name: CI
on: [push, pull_request]
defaults:
run:
shell: bash
concurrency:
group: CI-${{ github.ref }}
# Queue on all branches and tags, but only cancel overlapping PR burns.
cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') }}
jobs:
org-check:
name: Check GitHub Organization
if: github.repository_owner == 'a-scie'
runs-on: ubuntu-22.04
steps:
- name: Noop
run: "true"
ci:
name: (${{ matrix.name }}) CI
needs: org-check
runs-on: ${{ matrix.os }}
strategy:
matrix:
# N.B.: macos-13 is the oldest non-deprecated Intel Mac runner and macos-14 is the oldest
# non-deprecated ARM Mac runner.
include:
- os: ubuntu-24.04
name: Linux x86-64
docker-platform: linux/amd64
- os: ubuntu-24.04
name: Linux aarch64
docker-platform: linux/arm64
- os: ubuntu-24.04
name: Linux armv7l
docker-platform: linux/arm/v7
- os: ubuntu-24.04
name: Linux s390x
docker-platform: linux/s390x
- os: ubuntu-24.04
name: Linux powerpc64le
docker-platform: linux/ppc64le
- os: macos-13
name: macOS x86-64
- os: macos-14
name: macOS aarch64
- os: windows-2022
name: Windows x86-64
- os: windows-arm64
name: Windows aarch64
env:
SCIENCE_AUTH_API_GITHUB_COM_BEARER: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Setup Python 3.12
if: matrix.docker-platform == '' && matrix.os != 'windows-arm64'
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Setup Python 3.12
if: matrix.os == 'windows-arm64'
run: |
py -3.12 -m venv .venv
echo "$(pwd)/.venv/Scripts" >> "${GITHUB_PATH}"
- name: Setup Nox
if: matrix.docker-platform == ''
run: pip install nox
- name: Installing emulators
if: matrix.docker-platform != ''
run: docker run --privileged --rm tonistiigi/binfmt --install all
- name: Checkout Lift
uses: actions/checkout@v4
- name: Check Formatting & Lints
if: matrix.docker-platform == ''
run: nox -e lint
- name: Check Formatting & Lints
if: matrix.docker-platform != ''
run: |
docker run --rm \
-v $PWD:/code \
-w /code \
--platform ${{ matrix.docker-platform }} \
python:3.12-bookworm \
bash -c "
pip install nox &&
addgroup --gid $(id -g) build &&
adduser --disabled-password --gecos '' --gid $(id -g) --uid $(id -u) build &&
su build -c 'nox -e lint'
"
- name: Configure Windows pytest short tmp dir path
if: matrix.os == 'windows-2022' || matrix.os == 'windows-arm64'
run: |
mkdir -p C:/tmp/gha
echo PYTEST_ADDOPTS="--basetemp C:/tmp/gha/pytest" >> ${GITHUB_ENV}
echo SCIE_BASE=C:/tmp/gha/nce >> ${GITHUB_ENV}
- name: Unit Tests
if: matrix.docker-platform == ''
run: nox -e test -- -vvs
- name: Unit Tests
if: matrix.docker-platform != ''
run: |
cat << EOF > _ci_test.sh
set -euo pipefail
if [[ "${{ matrix.docker-platform }}" == "linux/s390x" ]]; then
# This hack gets the PyPy provider tests working on this image. The old PyPy s390x
# distributions dynmaically link libffi at an older version than I've been able to
# find a multi-platform image with s390x support for.
ln -s /usr/lib/s390x-linux-gnu/libffi.so.8 /usr/lib/s390x-linux-gnu/libffi.so.6
elif [[ "${{ matrix.docker-platform }}" == "linux/ppc64le" ]]; then
echo "Skipping tests on ppc64le."
exit 0
fi
pip install nox
addgroup --gid $(id -g) build
adduser --disabled-password --gecos '' --gid $(id -g) --uid $(id -u) build
su build -c "nox -e test -- -vvs"
EOF
docker run --rm \
-v $PWD:/code \
-w /code \
--platform ${{ matrix.docker-platform }} \
python:3.12-bookworm bash _ci_test.sh
- name: Build & Package
if: matrix.docker-platform == ''
run: nox -e package
- name: Build & Package
if: matrix.docker-platform != ''
run: |
docker run --rm \
-v $PWD:/code \
-w /code \
--platform ${{ matrix.docker-platform }} \
python:3.12-bookworm \
bash -c "
pip install nox &&
addgroup --gid $(id -g) build &&
adduser --disabled-password --gecos '' --gid $(id -g) --uid $(id -u) build &&
su build -c 'nox -e package'
"
- name: Generate Doc Site
if: matrix.docker-platform == ''
run: nox -e doc linkcheck
- name: Generate Doc Site
if: matrix.docker-platform != ''
run: |
docker run --rm \
-v $PWD:/code \
-w /code \
--platform ${{ matrix.docker-platform }} \
python:3.12-bookworm \
bash -c "
pip install nox &&
addgroup --gid $(id -g) build &&
adduser --disabled-password --gecos '' --gid $(id -g) --uid $(id -u) build &&
su build -c 'nox -e doc linkcheck'
"