Skip to content

MNT: migrate requirement files to PEP 735 dependency groups #587

MNT: migrate requirement files to PEP 735 dependency groups

MNT: migrate requirement files to PEP 735 dependency groups #587

Workflow file for this run

# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Test
on:
push:
branches:
- master
tags: v*
pull_request:
schedule:
# run this on first day of the month at 3 am UTC
- cron: 0 3 1 * *
workflow_dispatch:
jobs:
build:
name: ${{ matrix.os }}, Python ${{ matrix.python-version }} ${{ matrix.install-args }} ${{ matrix.viscm-flavor }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
python-version:
- '3.10'
- '3.11'
- '3.12'
- '3.13'
install-args: ['']
include:
- os: ubuntu-20.04
python-version: '3.10'
install-args: --resolution=lowest-direct
- os: windows-latest
python-version: '3.10'
- os: windows-latest
python-version: '3.11'
- os: windows-latest
python-version: '3.12'
- os: windows-latest
python-version: '3.13'
concurrency:
group: ${{ github.ref }}-${{ matrix.os }}-${{ matrix.python-version }}-${{ matrix.install-args }}-build
cancel-in-progress: true
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@3b9817b1bf26186f03ab8277bab9b827ea5cc254 # v3.2.0
with:
enable-cache: true
cache-dependency-glob: pyproject.toml
- name: Build
shell: bash # for windows-compat
run: |
uv venv -p ${{ matrix.python-version }}
uv pip install ${{ matrix.install-args }} .
- run: uv pip list
- name: Test package (no coverage)
if: ${{ !startsWith( matrix.os , 'ubuntu' ) }}
shell: bash # for windows-compat
run: |
uv run --verbose --group dev ${{ matrix.install-args }} \
pytest --color=yes --mpl
- name: Test package (with coverage)
if: startsWith( matrix.os , 'ubuntu' )
run: |
uv run --verbose --group dev ${{ matrix.install-args }} \
coverage run --parallel-mode -m pytest --color=yes --mpl
- name: Upload coverage data
# only using reports from ubuntu because
# combining reports from multiple platforms is tricky (or impossible ?)
if: startsWith( matrix.os , 'ubuntu' )
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
with:
name: cmasher_coverage_data-${{ matrix.os }}-${{ matrix.python-version }}-${{ matrix.install-args }}
path: .coverage.*
if-no-files-found: ignore
include-hidden-files: true
coverage:
name: Combine & check coverage
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@3b9817b1bf26186f03ab8277bab9b827ea5cc254 # v3.2.0
- run: | # uv sync --only-group covcheck
uv venv
uv pip install . -r requirements/dev.txt
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
pattern: cmasher_coverage_data-*
merge-multiple: true
- name: Check coverage
run: |
uv run coverage combine
uv run coverage html --skip-covered --skip-empty
uv run coverage report --fail-under=100
- name: Upload HTML report if check failed.
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
with:
name: cmasher_coverage_report
path: htmlcov
if: ${{ failure() }}
type-check:
name: type check w/ Python ${{ matrix.python-version }}
strategy:
fail-fast: false
matrix:
python-version:
- '3.10'
- '3.13'
runs-on: ubuntu-latest
concurrency:
group: ${{ github.ref }}-${{ matrix.python-version }}-typecheck
cancel-in-progress: true
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@3b9817b1bf26186f03ab8277bab9b827ea5cc254 # v3.2.0
with:
enable-cache: true
cache-dependency-glob: pyproject.toml
- name: Run mypy
run: uv run -p ${{ matrix.python-version }} --group dev mypy src/cmasher
docs:
name: Build docs
runs-on: ubuntu-latest
concurrency:
group: ${{ github.ref }}-docs
cancel-in-progress: true
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@3b9817b1bf26186f03ab8277bab9b827ea5cc254 # v3.2.0
with:
enable-cache: true
cache-dependency-glob: pyproject.toml
- name: Build
run: |
uvx -p 3.13 --with-requirements=docs/requirements.txt --compile-bytecode \
--from sphinx sphinx-build -M html docs/source site -W
- name: Upload artifacts
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
with:
name: site
path: site
check-manifest:
name: Check MANIFEST.in
runs-on: ubuntu-latest
concurrency:
group: ${{ github.ref }}-check_manifest
cancel-in-progress: true
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@3b9817b1bf26186f03ab8277bab9b827ea5cc254 # v3.2.0
with:
enable-cache: true
cache-dependency-glob: pyproject.toml
- run: uvx check-manifest
build-artifacts:
name: Build artifacts
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: astral-sh/setup-uv@3b9817b1bf26186f03ab8277bab9b827ea5cc254 # v3.2.0
with:
enable-cache: true
cache-dependency-glob: pyproject.toml
- run: uv build
- run: uvx twine check dist/*
- name: Upload artifacts
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
with:
name: dist
path: dist
publish:
name: Publish to PyPI
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
needs:
- build
- type-check
- docs
- check-manifest
- build-artifacts
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/CMasher
permissions:
id-token: write
steps:
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: dist
path: dist
- name: Publish package distributions to PyPI
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
uses: pypa/gh-action-pypi-publish@f7600683efdcb7656dec5b29656edb7bc586e597 # v1.10.3