1- name : check
1+ name : 🧪 check
22on :
33 workflow_dispatch :
44 push :
55 branches : ["main"]
6- tags-ignore : ["**"]
76 pull_request :
87 schedule :
98 - cron : " 0 8 * * *"
@@ -14,7 +13,7 @@ concurrency:
1413
1514jobs :
1615 test :
17- name : test ${{ matrix.py }} - ${{ matrix.os }}
16+ name : 🧪 test ${{ matrix.py }} - ${{ matrix.os }}
1817 if : github.event_name != 'schedule' || github.repository_owner == 'pypa'
1918 runs-on : ${{ matrix.os }}
2019 timeout-minutes : 40
@@ -34,133 +33,112 @@ jobs:
3433 - pypy-3.8
3534 - graalpy-24.1
3635 os :
37- - ubuntu-latest
38- - macos-latest
39- - windows-latest
36+ - ubuntu-24.04
37+ - macos-15
38+ - windows-2025
4039 include :
41- - { os: macos-latest , py: "brew@3.11" }
42- - { os: macos-latest , py: "brew@3.10" }
43- - { os: macos-latest , py: "brew@3.9" }
40+ - { os: macos-15 , py: "brew@3.11" }
41+ - { os: macos-15 , py: "brew@3.10" }
42+ - { os: macos-15 , py: "brew@3.9" }
4443 exclude :
45- - { os: windows-latest , py: "graalpy-24.1" }
46- - { os: windows-latest , py: "pypy-3.10" }
47- - { os: windows-latest , py: "pypy-3.9" }
48- - { os: windows-latest , py: "pypy-3.8" }
44+ - { os: windows-2025 , py: "graalpy-24.1" }
45+ - { os: windows-2025 , py: "pypy-3.10" }
46+ - { os: windows-2025 , py: "pypy-3.9" }
47+ - { os: windows-2025 , py: "pypy-3.8" }
4948 steps :
50- - uses : taiki-e/install-action@cargo-binstall
51- - name : Install OS dependencies
52- run : |
53- set -x
54- for i in 1 2 3; do
55- echo "try $i" && \
56- ${{ runner.os == 'Linux' && 'sudo apt-get update -y && sudo apt-get install snapd fish csh -y' || true }} && \
57- ${{ runner.os == 'Linux' && 'cargo binstall -y nu' || true }} && \
58- ${{ runner.os == 'macOS' && 'brew install fish tcsh nushell' || true }} && \
59- ${{ runner.os == 'Windows' && 'choco install nushell' || true }} && \
60- exit 0 || true;
61- sleep 1
62- done
63- exit 1
64- shell : bash
65- - uses : actions/checkout@v4
49+ - name : 🚀 Install uv
50+ uses : astral-sh/setup-uv@v4
51+ - name : 📥 Checkout code
52+ uses : actions/checkout@v4
6653 with :
6754 fetch-depth : 0
68- - name : Install the latest version of uv
69- uses : astral-sh /setup-uv@v4
55+ - name : 🐍 Setup Python for tox
56+ uses : actions /setup-python@v5
7057 with :
71- enable-cache : true
72- cache-dependency-glob : " pyproject.toml"
73- github-token : ${{ secrets.GITHUB_TOKEN }}
74- - name : Add .local/bin to PATH Windows
75- if : runner.os == 'Windows'
76- shell : bash
77- run : echo "$USERPROFILE/.local/bin" >> $GITHUB_PATH
78- - name : Add .local/bin to PATH macos-13
79- if : matrix.os == 'macos-13'
58+ python-version : " 3.13"
59+ - name : 📦 Install tox with this virtualenv
8060 shell : bash
81- run : echo ~/.local/bin >> $GITHUB_PATH
82- - name : Install tox
83- if : matrix.py == '3.13' || matrix.py == '3.13t'
84- run : uv tool install --python-preference only-managed --python 3.12 tox --with tox-uv
85- - name : Install tox
86- if : " !(matrix.py == '3.13' || matrix.py == '3.13t')"
87- run : uv tool install --python-preference only-managed --python 3.13 tox --with tox-uv
88- - name : Setup brew python for test ${{ matrix.py }}
89- if : startsWith(matrix.py, 'brew@')
9061 run : |
91- set -e
92- PY=$(echo '${{ matrix.py }}' | cut -c 6-)
93- brew cleanup && brew upgrade python@$PY || brew install python@$PY
94- echo "/usr/local/opt/python@$PY/libexec/bin" >>"${GITHUB_PATH}"
95- shell : bash
96- - name : Setup python for test ${{ matrix.py }}
97- if : " !(startsWith(matrix.py, 'brew@') || endsWith(matrix.py, 't'))"
62+ if [[ "${{ matrix.py }}" == "3.13t" ]]; then
63+ uv tool install --no-managed-python --python 3.13 tox --with .
64+ else
65+ uv tool install --no-managed-python --python 3.13 tox --with tox-uv --with .
66+ fi
67+ - name : 🐍 Setup Python for test ${{ matrix.py }}
9868 uses : actions/setup-python@v5
69+ if : ${{ !startsWith(matrix.py, 'brew@') }}
9970 with :
10071 python-version : ${{ matrix.py }}
101- allow-prereleases : true
102- # quansight-labs to install free-threaded python until actions/setup-python supports it
103- # https://github.com/actions/setup-python/issues/771
104- - name : Setup python for test ${{ matrix.py }}
105- if : endsWith(matrix.py, 't')
106- uses : quansight-labs/setup-python@v5.3.1
107- with :
108- python-version : ${{ matrix.py }}
109- - name : Pick environment to run
110- if : matrix.py != '3.13t'
111- run : python tasks/pick_tox_env.py ${{ matrix.py }}
112- - name : Pick environment to run
113- if : matrix.py == '3.13t' && runner.os != 'Windows'
114- run : python tasks/pick_tox_env.py ${{ matrix.py }} $Python_ROOT_DIR/bin/python
115- - name : Pick environment to run
116- if : matrix.py == '3.13t' && runner.os == 'Windows'
117- run : python tasks/pick_tox_env.py ${{ matrix.py }} $env:Python_ROOT_DIR\python.exe
118- - name : Setup test suite
119- run : tox run -vv --notest --skip-missing-interpreters false
120- - name : Run test suite
72+ - name : 🛠️ Install OS dependencies
73+ shell : bash
74+ run : |
75+ if [ "${{ runner.os }}" = "Linux" ]; then
76+ sudo apt-get install -y software-properties-common
77+ sudo apt-add-repository ppa:fish-shell/release-4 -y
78+ curl -fsSL https://apt.fury.io/nushell/gpg.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/fury-nushell.gpg
79+ echo "deb https://apt.fury.io/nushell/ /" | sudo tee /etc/apt/sources.list.d/fury.list
80+ sudo apt-get update -y
81+ sudo apt-get install snapd fish csh nushell -y
82+ elif [ "${{ runner.os }}" = "macOS" ]; then
83+ if [[ "${{ matrix.py }}" == brew@* ]]; then
84+ PY=$(echo '${{ matrix.py }}' | cut -c 6-)
85+ brew install python@$PY || brew upgrade python@$PY
86+ echo "/usr/local/opt/python@$PY/libexec/bin" >>"${GITHUB_PATH}"
87+ fi
88+ brew install fish tcsh nushell || brew upgrade fish tcsh nushell
89+ elif [ "${{ runner.os }}" = "Windows" ]; then
90+ choco install nushell
91+ fi
92+ - name : 🧬 Pick environment to run
93+ shell : bash
94+ run : |
95+ py="${{ matrix.py }}"
96+ if [[ "$py" == brew@* ]]; then
97+ brew_version="${py#brew@}"
98+ echo "TOX_DISCOVER=/opt/homebrew/bin/python${brew_version}" >> "$GITHUB_ENV"
99+ py="$brew_version"
100+ fi
101+ [[ "$py" == graalpy-* ]] && py="graalpy"
102+ echo "TOXENV=$py" >> "$GITHUB_ENV"
103+ echo "Set TOXENV=$py"
104+ - name : 🏗️ Setup test suite
105+ run : tox run -vvvv --notest --skip-missing-interpreters false
106+ - name : 🏃 Run test suite
121107 run : tox run --skip-pkg-install
122108 timeout-minutes : 20
123109 env :
124110 PYTEST_ADDOPTS : " -vv --durations=20"
125111 CI_RUN : " yes"
126112 DIFF_AGAINST : HEAD
127-
128113 check :
129- name : ${{ matrix.tox_env }} - ${{ matrix.os }}
114+ name : 🔎 check ${{ matrix.tox_env }} - ${{ matrix.os }}
130115 if : github.event_name != 'schedule' || github.repository_owner == 'pypa'
131116 runs-on : ${{ matrix.os }}
132117 strategy :
133118 fail-fast : false
134119 matrix :
135120 os :
136- - ubuntu-latest
137- - windows-latest
121+ - ubuntu-24.04
122+ - windows-2025
138123 tox_env :
139124 - dev
140125 - docs
141126 - readme
142127 - upgrade
143128 - zipapp
144129 exclude :
145- - { os: windows-latest , tox_env: readme }
146- - { os: windows-latest , tox_env: docs }
130+ - { os: windows-2025 , tox_env: readme }
131+ - { os: windows-2025 , tox_env: docs }
147132 steps :
148- - uses : actions/checkout@v4
149- with :
150- fetch-depth : 0
151- - name : Install the latest version of uv
133+ - name : 🚀 Install uv
152134 uses : astral-sh/setup-uv@v4
153- with :
154- enable-cache : true
155- cache-dependency-glob : " pyproject.toml"
156- github-token : ${{ secrets.GITHUB_TOKEN }}
157- - name : Add .local/bin to Windows PATH
158- if : runner.os == 'Windows'
159- shell : bash
160- run : echo "$USERPROFILE/.local/bin" >> $GITHUB_PATH
161- - name : Install tox
135+ - name : 📦 Install tox
162136 run : uv tool install --python-preference only-managed --python 3.13 tox --with tox-uv
163- - name : Setup check suite
164- run : tox r -vv --notest --skip-missing-interpreters false -e ${{ matrix.tox_env }}
165- - name : Run check for ${{ matrix.tox_env }}
166- run : tox r --skip-pkg-install -e ${{ matrix.tox_env }}
137+ - name : 📥 Checkout code
138+ uses : actions/checkout@v4
139+ with :
140+ fetch-depth : 0
141+ - name : 🏗️ Setup check suite
142+ run : tox run -vv --notest --skip-missing-interpreters false -e ${{ matrix.tox_env }}
143+ - name : 🏃 Run check for ${{ matrix.tox_env }}
144+ run : tox run --skip-pkg-install -e ${{ matrix.tox_env }}
0 commit comments