Use uv #3914
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: | |
push: | |
branches: | |
- main | |
tags: | |
- v* | |
concurrency: | |
group: ${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
DEFAULT_PYTHON: "3.12" | |
permissions: read-all | |
jobs: | |
test: | |
name: Test | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
python-version: ["3.9", "3.10", "3.11", "3.12"] | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Dependencies | |
run: python3 -m pip install --upgrade pip nox[uv] | |
- name: Run Tests and Coverage | |
run: nox --non-interactive --session test | |
codecov: | |
name: Codecov | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ env.DEFAULT_PYTHON }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON }} | |
- name: Install Dependencies | |
run: python3 -m pip install --upgrade pip nox[uv] | |
- name: Run Tests and Coverage | |
run: nox --non-interactive --session test -- cover | |
- name: Upload Coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
files: ./coverage.xml | |
docs: | |
name: Docs | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ env.DEFAULT_PYTHON }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON }} | |
- name: Install Dependencies | |
run: python3 -m pip install --upgrade pip nox[uv] | |
- name: Build Docs | |
run: nox --non-interactive --session docs | |
publish-docs: | |
needs: docs | |
name: Publish Docs | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
# Only publish docs automatically on new release | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ env.DEFAULT_PYTHON }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON }} | |
- name: Install Dependencies | |
run: python3 -m pip install --upgrade pip nox[uv] | |
- name: Deploy Docs to GitHub Pages | |
env: | |
# Use the built in CI GITHUB_TOKEN | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: nox --non-interactive --session docs -- deploy | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
needs: | |
- test | |
- docs | |
- publish-docs | |
- codecov | |
permissions: | |
contents: write | |
pull-requests: read | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Fetch Existing Tags | |
run: git fetch --force --tags | |
- name: Parse Release Version | |
id: version | |
run: | | |
VERSION=${GITHUB_REF#refs/tags/v} | |
echo "version=$VERSION" >> $GITHUB_OUTPUT | |
- name: Set up Python ${{ env.DEFAULT_PYTHON }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON }} | |
- name: Install Dependencies | |
run: python3 -m pip install --upgrade pip nox[uv] | |
- name: Build sdist and wheel | |
run: nox --non-interactive --session build | |
- name: Publish Draft Release | |
uses: release-drafter/release-drafter@v6 | |
with: | |
version: ${{ steps.version.outputs.version }} | |
publish: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload Dist | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: gh release upload ${{ github.ref_name }} dist/* --repo ${{ github.repository }} | |
- name: Publish Distribution to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} |