name: CI on: push: pull_request: release: types: [published] schedule: # Daily at 3:21 - cron: '21 3 * * *' jobs: pre-commit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: "3.11" - uses: pre-commit/action@v3.0.0 ci: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] python-version: - name: pypy-3.9 toxenv: pypy3-noextra-build - name: pypy-3.9 toxenv: pypy3-noextra-tests - name: pypy-3.9 toxenv: pypy3-format-build - name: pypy-3.9 toxenv: pypy3-format-tests - name: pypy-3.9 toxenv: pypy3-formatnongpl-build - name: pypy-3.9 toxenv: pypy3-formatnongpl-tests - name: 3.8 toxenv: py38-noextra-build - name: 3.8 toxenv: py38-noextra-tests - name: 3.8 toxenv: py38-format-build - name: 3.8 toxenv: py38-format-tests - name: 3.8 toxenv: py38-formatnongpl-build - name: 3.8 toxenv: py38-formatnongpl-tests - name: 3.9 toxenv: py39-noextra-build - name: 3.9 toxenv: py39-noextra-tests - name: 3.9 toxenv: py39-format-build - name: 3.9 toxenv: py39-format-tests - name: 3.9 toxenv: py39-formatnongpl-build - name: 3.9 toxenv: py39-formatnongpl-tests - name: "3.10" toxenv: py310-noextra-build - name: "3.10" toxenv: py310-noextra-tests - name: "3.10" toxenv: py310-format-build - name: "3.10" toxenv: py310-format-tests - name: "3.10" toxenv: py310-formatnongpl-build - name: "3.10" toxenv: py310-formatnongpl-tests - name: "3.11" toxenv: py311-noextra-build - name: "3.11" toxenv: py311-noextra-tests - name: "3.11" toxenv: py311-format-build - name: "3.11" toxenv: py311-format-tests - name: "3.11" toxenv: py311-formatnongpl-build - name: "3.11" toxenv: py311-formatnongpl-tests - name: "3.11" toxenv: docs-dirhtml - name: "3.11" toxenv: docs-doctest - name: "3.11" toxenv: docs-linkcheck - name: "3.11" toxenv: docs-spelling - name: "3.11" toxenv: docs-style - name: "3.11" toxenv: readme - name: "3.11" toxenv: secrets - name: "3.11" toxenv: style - name: "3.11" toxenv: typing include: - os: ubuntu-latest python-version: name: "3.11" toxenv: py311-format-ghcoverage - os: ubuntu-latest python-version: name: "3.11" toxenv: py311-noextra-ghcoverage - os: ubuntu-latest python-version: name: "3.11" toxenv: format-audit - os: ubuntu-latest python-version: name: "3.11" toxenv: formatnongpl-audit - os: ubuntu-latest python-version: name: "3.11" toxenv: noextra-audit exclude: - os: windows-latest python-version: name: "3.11" toxenv: readme - os: windows-latest python-version: name: "3.11" toxenv: docs-dirhtml - os: windows-latest python-version: name: "3.11" toxenv: docs-doctest - os: windows-latest python-version: name: "3.11" toxenv: docs-linkcheck - os: windows-latest python-version: name: "3.11" toxenv: docs-spelling - os: windows-latest python-version: name: "3.11" toxenv: docs-style steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version.name }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version.name }} - name: Install dependencies run: > sudo apt-get update && sudo apt-get install -y libenchant-2-dev libxml2-dev libxslt-dev if: runner.os == 'Linux' && startsWith(matrix.python-version.toxenv, 'docs-') - name: Install dependencies run: brew install enchant if: runner.os == 'macOS' && startsWith(matrix.python-version.toxenv, 'docs-') - name: Install tox run: python -m pip install tox - name: Enable UTF-8 on Windows run: echo "PYTHONUTF8=1" >> $env:GITHUB_ENV if: runner.os == 'Windows' && startsWith(matrix.python-version.toxenv, 'py') - name: Run tox run: python -m tox -e "${{ matrix.python-version.toxenv }}" packaging: needs: ci runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - uses: actions/setup-python@v4 with: python-version: "3.10" - name: Install dependencies run: python -m pip install build - name: Create packages run: python -m build . - uses: actions/upload-artifact@v3 with: name: dist path: dist - name: Publish package if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.pypi_password }} - name: Create Release Notes if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') uses: actions/github-script@v6 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | await github.request(`POST /repos/${{ github.repository }}/releases`, { tag_name: "${{ github.ref }}", generate_release_notes: true });