Skip to content

MNT: update renovate config and drop dependabot #1053

MNT: update renovate config and drop dependabot

MNT: update renovate config and drop dependabot #1053

Workflow file for this run

name: CI
on:
push:
branches:
- main
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@887a942a15af3a7626099df99e897a18d9e5ab3a # v5.1.0
- name: Check build
run: |
uvx check-manifest
uv build
unit-tests:
name: ${{matrix.os}} x py${{matrix.python-version}} ${{matrix.marker}}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
python-version:
- '3.11'
- '3.12'
- '3.13'
marker: [''] # needed to avoid collision with PY_LIB job
include:
- os: macos-latest
python-version: '3.13'
- os: windows-latest
python-version: '3.13'
# test GPGI_PY_LIB
- marker: PY_LIB
os: ubuntu-latest
python-version: '3.13'
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Source
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@887a942a15af3a7626099df99e897a18d9e5ab3a # v5.1.0
with:
python-version: ${{ matrix.python-version }}
- name: Test
env:
GPGI_PY_LIB: ${{ matrix.marker == 'PY_LIB' }}
shell: bash # for windows-compat (using `\` as a line continuation)
# TODO: add --no-editable
run: |
uv run --frozen --group covcheck \
coverage run --parallel-mode -m pytest --color=yes -ra
- 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@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: gpgi_coverage_data-${{matrix.os}}-${{matrix.python-version}}-${{matrix.marker}}
path: .coverage.*
if-no-files-found: ignore
include-hidden-files: true
minimal-env:
name: Minimal requirements
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
with:
# setup-uv doesn't have this exact version of Python
python-version: 3.11.0
- uses: astral-sh/setup-uv@887a942a15af3a7626099df99e897a18d9e5ab3a # v5.1.0
- name: Test
run: |
uv run --python-preference=only-system \
--resolution=lowest-direct \
--no-editable --group test \
pytest --color=yes -ra
image-tests:
name: Image tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@887a942a15af3a7626099df99e897a18d9e5ab3a # v5.1.0
with:
python-version: '3.13'
- name: Run Image Tests
run: |
uv run --frozen --no-editable --group test \
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: |
uv run --frozen --no-editable --group test \
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@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: gpgi_pytest_mpl_results
path: gpgi_pytest_mpl_results/*
- name: Upload pytest-mpl baseline
if: always()
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: gpgi_pytest_mpl_new_baseline
path: gpgi_pytest_mpl_new_baseline/*
if-no-files-found: ignore
concurrency-tests:
name: Thread concurrency tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@887a942a15af3a7626099df99e897a18d9e5ab3a # v5.1.0
with:
python-version: '3.13'
- name: Run Concurrency Tests
run: |
uv run --frozen --no-editable --group concurrency \
pytest --color=yes --count 500 tests/test_concurrent.py
coverage:
name: Combine & check coverage.
runs-on: ubuntu-latest
needs: unit-tests
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@887a942a15af3a7626099df99e897a18d9e5ab3a # v5.1.0
with:
python-version: '3.13'
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
pattern: gpgi_coverage_data-*
merge-multiple: true
- name: Check coverage
run: |
uv tool install coverage
coverage combine
coverage html --skip-covered --skip-empty
coverage report --fail-under=100 # >> $GITHUB_STEP_SUMMARY
- name: Upload HTML report if check failed.
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: gpgi_coverage_report
path: htmlcov
if: ${{ failure() }}
typecheck:
strategy:
matrix:
python-version:
- '3.11'
- '3.12'
- '3.13'
runs-on: ubuntu-latest
name: type check
steps:
- name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@887a942a15af3a7626099df99e897a18d9e5ab3a # v5.1.0
with:
python-version: ${{ matrix.python-version }}
- name: Typecheck
run: |
uv run --frozen --no-editable --group typecheck mypy src/gpgi
future:
name: py${{ matrix.python-version }}
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
python-version:
#- 3.14-dev
- 3.13t
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# TODO: ditch Quansight-Labs/setup-python when either condition is met
# - setup-uv support Python pre-releases
# - actions/setup-python support free-threaded versions
# see https://github.com/actions/setup-python/issues/771
- uses: Quansight-Labs/setup-python@b9ab292c751a42bcd2bb465b7fa202ea2c3f5796 # v5.3.1
with:
python-version: ${{ matrix.python-version }}
- uses: astral-sh/setup-uv@887a942a15af3a7626099df99e897a18d9e5ab3a # v5.1.0
- name: Configure uv
run: |
echo "UV_PYTHON_PREFERENCE=only-system" >> $GITHUB_ENV
pin=${{ matrix.python-version }}
echo "UV_PYTHON=${pin%-dev}" >> $GITHUB_ENV
echo "UV_PRERELEASE=allow" >> $GITHUB_ENV
echo "UV_EXTRA_INDEX_URL=https://pypi.anaconda.org/scientific-python-nightly-wheels/simple" >> $GITHUB_ENV
- name: Set PYTHON_GIL
if: ${{ endswith( matrix.python-version , 't' ) }}
run: |
echo "PYTHON_GIL=0" >> $GITHUB_ENV
echo
- name: Build
run: |
uv venv
uv lock --upgrade --prerelease=allow --no-build
uv pip install setuptools numpy Cython
uv pip install --no-build-isolation --no-deps .
- run: uv pip list
- name: Unit Tests
run: |
uv run --no-editable --group test pytest --color=yes -ra
- name: Concurrency tests
run: |
uv run --no-editable --group concurrency \
pytest --color=yes -ra --count 500 tests/test_concurrent.py
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@572eed14422c4d6ca37e870f97e7da209422f5bd # v3.4.4
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 }}