| name: test |
| |
| on: |
| push: |
| paths: |
| - .github/workflows/test.yml |
| - src/** |
| - tests/** |
| - tox.ini |
| - pyproject.toml |
| |
| pull_request: |
| paths: |
| - .github/workflows/test.yml |
| - src/** |
| - tests/** |
| - tox.ini |
| - pyproject.toml |
| |
| permissions: |
| contents: read |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} |
| cancel-in-progress: true |
| |
| jobs: |
| test: |
| # We want to run on external PRs, but not on our own internal PRs as they'll be run |
| # by the push to the branch. Without this if check, checks are duplicated since |
| # internal PRs match both the push and pull_request events. |
| if: |
| github.event_name == 'push' || github.event.pull_request.head.repo.full_name != |
| github.repository |
| |
| runs-on: ${{ matrix.os }} |
| strategy: |
| fail-fast: false |
| matrix: |
| python-version: |
| ["3.10", "3.11", "3.12.10", "3.13", "3.14", "3.15", "pypy3.11-v7.3.22"] |
| os: [ubuntu-latest, macOS-latest, windows-latest, windows-11-arm] |
| exclude: |
| # setup-python only supports CPython 3.11+ on arm64 windows |
| - os: windows-11-arm |
| python-version: "3.10" |
| - os: windows-11-arm |
| python-version: "pypy3.11-v7.3.22" |
| |
| steps: |
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 |
| with: |
| persist-credentials: false |
| |
| - name: Set up Python ${{ matrix.python-version }} |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 |
| with: |
| python-version: ${{ matrix.python-version }} |
| allow-prereleases: true |
| pip-version: "25.3" |
| pip-install: --group tox |
| |
| - name: Unit tests |
| if: "!startsWith(matrix.python-version, 'pypy')" |
| run: |
| tox -e ci-py$(echo ${{ matrix.python-version }} | tr -d '.') -- -v --color=yes |
| |
| - name: Unit tests (pypy) |
| if: "startsWith(matrix.python-version, 'pypy')" |
| run: tox -e ci-pypy3 -- -v --color=yes |
| |
| - name: Upload coverage to Coveralls |
| # Upload coverage if we are on the main repository and |
| # we're running on Linux (this action only supports Linux) |
| if: |
| github.repository == 'psf/black' && matrix.os == 'ubuntu-latest' && |
| !startsWith(matrix.python-version, 'pypy') |
| uses: AndreMiras/coveralls-python-action@ac868b9540fad490f7ca82b8ca00480fd751ed19 |
| with: |
| github-token: ${{ secrets.GITHUB_TOKEN }} |
| parallel: true |
| flag-name: py${{ matrix.python-version }}-${{ matrix.os }} |
| debug: true |
| |
| coveralls-finish: |
| needs: test |
| if: github.repository == 'psf/black' |
| |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 |
| with: |
| persist-credentials: false |
| |
| - name: Send finished signal to Coveralls |
| uses: AndreMiras/coveralls-python-action@ac868b9540fad490f7ca82b8ca00480fd751ed19 |
| with: |
| parallel-finished: true |
| debug: true |
| |
| uvloop: |
| if: |
| github.event_name == 'push' || github.event.pull_request.head.repo.full_name != |
| github.repository |
| runs-on: ${{ matrix.os }} |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ubuntu-latest, macOS-latest, windows-latest, windows-11-arm] |
| |
| steps: |
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 |
| with: |
| persist-credentials: false |
| |
| - name: Set up Python |
| uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 |
| with: |
| python-version: "3.14" |
| pip-version: "25.3" |
| pip-install: -e .[uvloop] |
| |
| - name: Format ourselves |
| run: python -m black --check . |