1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
name: Main
on:
push:
branches:
- main
pull_request:
schedule:
- cron: "0 0 * * *" # daily
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
env:
FORCE_COLOR: "1"
TOX_TESTENV_PASSENV: "FORCE_COLOR"
MIN_PYTHON_VERSION: "3.9"
DEFAULT_PYTHON_VERSION: "3.11"
permissions:
contents: read
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5.0.0
with:
persist-credentials: false
- uses: actions/setup-python@v5.6.0
with:
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
- name: Install dependencies
run: python -m pip install tox
- name: Run linting
run: python -m tox -e lint
test:
strategy:
matrix:
python-version:
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
platform:
- ubuntu-latest
- macos-latest
- windows-latest
tox-environment:
- py
include:
# Test with the oldest supported ``packaging`` version.
- platform: ubuntu-latest
python-version: "3.9"
tox-environment: py-packaging240
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v5.0.0
with:
persist-credentials: false
- uses: actions/setup-python@v5.6.0
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: python -m pip install tox
- name: Run type-checking
run: python -m tox -e types
- name: Run tests
run: python -m tox -e ${{ matrix.tox-environment }}
# Because the tests can be flaky, they shouldn't be required for merge, but
# it's still helpful to run them on PRs. See:
# https://github.com/pypa/twine/issues/684#issuecomment-703150619
integration:
# Only run on Ubuntu because most of the tests are skipped on Windows
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5.0.0
with:
persist-credentials: false
- uses: actions/setup-python@v5.6.0
with:
python-version: ${{ env.MIN_PYTHON_VERSION }}
- name: Install dependencies
run: python -m pip install tox
- name: Run tests
run: python -m tox -e integration
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5.0.0
with:
persist-credentials: false
- uses: actions/setup-python@v5.6.0
with:
python-version: ${{ env.MIN_PYTHON_VERSION }}
- name: Install dependencies
run: python -m pip install tox
- name: Build docs
run: python -m tox -e docs
# https://github.com/marketplace/actions/alls-green#why
check: # This job does nothing and is only used for the branch protection
if: always()
needs:
- lint
- test
- integration
- docs
runs-on: ubuntu-latest
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
allowed-failures: integration # can be flaky
jobs: ${{ toJSON(needs) }}
release:
needs:
- check
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5.0.0
with:
persist-credentials: false
- uses: actions/setup-python@v5.6.0
with:
python-version: ${{ env.MIN_PYTHON_VERSION }}
- name: Install dependencies
run: python -m pip install tox
- name: Release
run: tox -e release
env:
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|