* [2.x] Update virtualenv URLs to avoid blob URLs It looks like many people are hitting the HTTP 429 for old versions of cibuildwheel. These hosted versions of virtualenv should work, let's see... * Write the correct version strings * ci: some updates based on main branch Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * ci: move to using latest images Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * chore: fix up style checks Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * ci: newer azure images too Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * tests: use new SSL test from main Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * Drop `build`'s installation from Pyodide build tools --------- Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com>
216 lines
5.9 KiB
YAML
216 lines
5.9 KiB
YAML
name: Test
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
- 2.x
|
|
pull_request:
|
|
paths-ignore:
|
|
- 'docs/**'
|
|
- .pre-commit-config.yaml
|
|
workflow_dispatch:
|
|
# allow manual runs on branches without a PR
|
|
|
|
permissions: {}
|
|
|
|
concurrency:
|
|
group: test-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
lint:
|
|
name: Linters (mypy, flake8, etc.)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
persist-credentials: false
|
|
- uses: actions/setup-python@v6
|
|
id: python
|
|
with:
|
|
python-version: "3.x"
|
|
- uses: j178/prek-action@v1
|
|
- name: PyLint checks
|
|
run: pipx run --python "${{ steps.python.outputs.python-path }}" nox -s pylint -- --output-format=github
|
|
|
|
test:
|
|
name: Test on ${{ matrix.os }} (${{ matrix.python_version }})
|
|
needs: lint
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-15-intel, macos-latest]
|
|
python_version: ['3.13']
|
|
include:
|
|
- os: ubuntu-latest
|
|
python_version: '3.8'
|
|
timeout-minutes: 180
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
persist-credentials: false
|
|
- uses: actions/setup-python@v6
|
|
name: Install Python ${{ matrix.python_version }}
|
|
with:
|
|
python-version: ${{ matrix.python_version }}
|
|
allow-prereleases: true
|
|
|
|
- uses: astral-sh/setup-uv@v7
|
|
|
|
# free some space to prevent reaching GHA disk space limits
|
|
- name: Clean docker images
|
|
if: runner.os == 'Linux'
|
|
run: |
|
|
docker system prune -a -f
|
|
df -h
|
|
|
|
# for oci_container unit tests
|
|
- name: Set up QEMU
|
|
if: runner.os == 'Linux'
|
|
uses: docker/setup-qemu-action@v4
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
uv sync --no-dev --group test
|
|
|
|
- name: Generate a sample project
|
|
run: |
|
|
uv run -m test.test_projects test.test_0_basic.basic_project sample_proj
|
|
|
|
- name: Run a sample build (GitHub Action)
|
|
uses: ./
|
|
with:
|
|
package-dir: sample_proj
|
|
output-dir: wheelhouse
|
|
env:
|
|
CIBW_ARCHS_MACOS: x86_64 universal2 arm64
|
|
CIBW_BUILD_FRONTEND: 'build[uv]'
|
|
CIBW_FREE_THREADED_SUPPORT: 1
|
|
CIBW_PRERELEASE_PYTHONS: 1
|
|
|
|
- name: Run a sample build (GitHub Action, only)
|
|
uses: ./
|
|
with:
|
|
package-dir: sample_proj
|
|
output-dir: wheelhouse_only
|
|
only: cp312-${{ runner.os == 'Linux' && (runner.arch == 'ARM64' && 'manylinux_aarch64' || 'manylinux_x86_64') || (runner.os == 'Windows' && 'win_amd64' || 'macosx_x86_64') }}
|
|
|
|
- name: Create custom configuration file
|
|
shell: bash
|
|
run: |
|
|
cat > sample_proj/cibw.toml <<EOF
|
|
[tool.cibuildwheel]
|
|
# Only build on CPython 3.12 on native arch
|
|
archs = ["native"]
|
|
build = "cp312-*"
|
|
# Skip musllinux
|
|
skip = "*-musllinux*"
|
|
EOF
|
|
|
|
- name: Run a sample build (GitHub Action, config-file)
|
|
uses: ./
|
|
with:
|
|
package-dir: sample_proj
|
|
output-dir: wheelhouse_config_file
|
|
config-file: sample_proj/cibw.toml
|
|
|
|
- name: Check Action artifacts
|
|
shell: bash
|
|
run: |
|
|
test $(find wheelhouse -name '*.whl' | wc -l) -ge 1
|
|
test $(find wheelhouse_only -name '*.whl' | wc -l) -eq 1
|
|
test $(find wheelhouse_config_file -name '*.whl' | wc -l) -eq 1
|
|
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }}
|
|
path: wheelhouse/*.whl
|
|
|
|
- name: Test cibuildwheel
|
|
run: |
|
|
uv run bin/run_tests.py ${{ (runner.os == 'Linux' && runner.arch == 'X64') && '--run-podman' || '' }}
|
|
|
|
emulated-archs:
|
|
name: Get qemu emulated architectures
|
|
needs: lint
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
archs: ${{ steps.archs.outputs.archs }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
persist-credentials: false
|
|
- uses: actions/setup-python@v6
|
|
with:
|
|
python-version: "3.x"
|
|
- uses: astral-sh/setup-uv@v7
|
|
- name: Install dependencies
|
|
run: uv sync --no-dev --group test
|
|
- name: Get qemu emulated architectures
|
|
id: archs
|
|
run: |
|
|
OUTPUT=$(uv run --no-sync python -c "from json import dumps; from test.utils import EMULATED_ARCHS; print(dumps(EMULATED_ARCHS))")
|
|
echo "${OUTPUT}"
|
|
echo "archs=${OUTPUT}" >> "$GITHUB_OUTPUT"
|
|
|
|
test-emulated:
|
|
name: Test Linux ${{ matrix.arch }} using qemu
|
|
needs: emulated-archs
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 180
|
|
strategy:
|
|
matrix:
|
|
arch: ${{ fromJSON(needs.emulated-archs.outputs.archs) }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
persist-credentials: false
|
|
- uses: actions/setup-python@v6
|
|
with:
|
|
python-version: "3.x"
|
|
- uses: astral-sh/setup-uv@v7
|
|
- name: Install dependencies
|
|
run: uv sync --no-dev --group test
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v4
|
|
|
|
- name: Run the emulation tests
|
|
run: uv run --no-sync pytest --run-emulation ${{ matrix.arch }} test/test_emulation.py
|
|
|
|
test-pyodide:
|
|
name: Test cibuildwheel building Pyodide wheels
|
|
needs: lint
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 180
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
persist-credentials: false
|
|
- uses: actions/setup-python@v6
|
|
name: Install Python 3.12
|
|
with:
|
|
python-version: '3.12'
|
|
- uses: astral-sh/setup-uv@v7
|
|
|
|
- name: Install dependencies
|
|
run: uv sync --no-dev --group test
|
|
|
|
- name: Generate a sample project
|
|
run: |
|
|
uv run -m test.test_projects test.test_0_basic.basic_project sample_proj
|
|
|
|
- name: Run a sample build (GitHub Action)
|
|
uses: ./
|
|
with:
|
|
package-dir: sample_proj
|
|
output-dir: wheelhouse
|
|
env:
|
|
CIBW_PLATFORM: pyodide
|
|
|
|
- name: Run tests with 'CIBW_PLATFORM' set to 'pyodide'
|
|
run: uv run --no-sync ./bin/run_tests.py
|
|
env:
|
|
CIBW_PLATFORM: pyodide
|