BLD: add wheels for musllinux #419
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
pull_request: | |
schedule: | |
# run this every Wednesday at 3 am UTC | |
- cron: 0 3 * * 3 | |
workflow_dispatch: | |
concurrency: | |
# auto-cancel any in-progress job *on the same branch* | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
build-test: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Source | |
uses: actions/checkout@v3 | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.11' | |
- run: | | |
python -m pip install --upgrade pip | |
python -m pip install --upgrade check-manifest | |
python -m pip install --upgrade build | |
- name: Check build | |
run: | | |
python -m check_manifest | |
python -m build | |
unit-tests: | |
strategy: | |
matrix: | |
os: | |
- ubuntu-latest | |
python-version: | |
- '3.9' | |
- '3.10' | |
- '3.11' | |
include: | |
- os: macos-latest | |
python-version: '3.11' | |
- os: windows-latest | |
python-version: '3.11' | |
# test with minimal requirements | |
- os: ubuntu-20.04 | |
python-version: '3.9' | |
pip-args: --constraint constraints/minimal_dependencies.txt | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout Source | |
uses: actions/checkout@v3 | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Upgrade pip | |
run: python -m pip install --upgrade pip | |
- name: Build library | |
run: python -m pip install . ${{ matrix.pip-args }} | |
- run: python -m pip install --requirement requirements/tests.txt ${{ matrix.pip-args }} | |
- name: Test | |
run: | | |
python -m pip freeze | |
python -m coverage run -m pytest --color=yes | |
- name: Upload coverage data | |
# only using reports from ubuntu because | |
# combining reports from multiple platforms is tricky (or impossible ?) | |
if: matrix.os == 'ubuntu-latest' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: gpgi_coverage_data | |
path: .coverage.* | |
if-no-files-found: ignore | |
image-tests: | |
name: Image tests | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.11' | |
- uses: actions/checkout@v3 | |
- name: Build library | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install . | |
- run: python -m pip install --requirement requirements/tests.txt | |
- name: Run Image Tests | |
run: | | |
pytest --color=yes --mpl -m mpl_image_compare \ | |
--mpl-generate-summary=html \ | |
--mpl-results-path=gpgi_pytest_mpl_results \ | |
--mpl-baseline-path=tests/pytest_mpl_baseline | |
- name: Generate new image baseline | |
if: failure() | |
run: | | |
pytest --color=yes --mpl -m mpl_image_compare \ | |
--mpl-generate-path=gpgi_pytest_mpl_new_baseline \ | |
--last-failed | |
# always attempt to upload artifacts, even | |
# (and especially) in case of failure. | |
- name: Upload pytest-mpl report | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: gpgi_pytest_mpl_results | |
path: gpgi_pytest_mpl_results/* | |
- name: Upload pytest-mpl baseline | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: gpgi_pytest_mpl_new_baseline | |
path: gpgi_pytest_mpl_new_baseline/* | |
if-no-files-found: ignore | |
coverage: | |
name: Combine & check coverage. | |
runs-on: ubuntu-latest | |
needs: unit-tests | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
# Use latest Python, so it understands all syntax. | |
python-version: '3.11' | |
- run: python -m pip install --upgrade coverage[toml] | |
- uses: actions/download-artifact@v3 | |
with: | |
name: gpgi_coverage_data | |
- name: Check coverage | |
run: | | |
python -m coverage combine | |
python -m coverage html --skip-covered --skip-empty | |
python -m coverage report --fail-under=100 | |
- name: Upload HTML report if check failed. | |
uses: actions/upload-artifact@v3 | |
with: | |
name: gpgi_coverage_report | |
path: htmlcov | |
if: ${{ failure() }} | |
typecheck: | |
strategy: | |
matrix: | |
python-version: | |
- '3.8' | |
- '3.11' | |
runs-on: ubuntu-latest | |
name: type check | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Build | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install --requirement requirements/typecheck.txt | |
- name: Typecheck | |
run: | | |
python -m pip freeze | |
mypy src/gpgi | |
future: | |
if: ${{ github.event_name == 'schedule' }} | |
runs-on: ubuntu-latest | |
name: future proofing | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v3 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.12-dev | |
- name: Build | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install --pre setuptools wheel Cython | |
python -m pip install --pre numpy \ | |
--extra-index https://pypi.anaconda.org/scientific-python-nightly-wheels/simple | |
python -m pip install . --no-build-isolation | |
- name: Install minimal test env | |
run: | | |
python -m pip install --pre pytest | |
- name: Tests | |
run: | | |
python -m pip freeze | |
pytest | |
create-issue: | |
if: ${{ failure() && github.event_name == 'schedule' }} | |
needs: [future] | |
permissions: | |
issues: write | |
runs-on: ubuntu-latest | |
name: Create issue on failure | |
steps: | |
- name: Create issue on failure | |
uses: imjohnbo/issue-bot@v3 | |
with: | |
title: '[TST] Upcoming dependency test failures' | |
body: | | |
The weekly build with future Python, Cython and numpy | |
has failed. Check the logs for any updates that need to be | |
made in gpgi. | |
https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} | |
pinned: false | |
close-previous: false | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |