| --- |
| name: Build & upload PyPI package |
| |
| on: |
| push: |
| branches: [main] |
| tags: ["*"] |
| release: |
| types: |
| - published |
| workflow_dispatch: |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} |
| cancel-in-progress: true |
| |
| permissions: {} |
| |
| jobs: |
| # Always build & lint package. |
| build-package: |
| name: Build & verify package |
| runs-on: ubuntu-latest |
| permissions: |
| attestations: write # necessary for GitHub attestations |
| id-token: write # necessary for GitHub attestations |
| |
| steps: |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 |
| with: |
| fetch-depth: 0 |
| persist-credentials: false |
| |
| - uses: hynek/build-and-inspect-python-package@d44ca7d91762de7a7d5436ddae667c6da6d1c3df # v2.18.0 |
| with: |
| attest-build-provenance-github: 'true' |
| |
| # Upload to Test PyPI on every commit on main. |
| release-test-pypi: |
| name: Publish in-dev package to test.pypi.org |
| environment: release-test-pypi |
| if: github.repository_owner == 'python-attrs' && github.event_name == 'push' && github.ref == 'refs/heads/main' |
| runs-on: ubuntu-latest |
| needs: build-package |
| |
| permissions: |
| id-token: write # necessary for trusted publishing |
| |
| steps: |
| - name: Download packages built by build-and-inspect-python-package |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 |
| with: |
| name: Packages |
| path: dist |
| |
| - name: Upload package to Test PyPI |
| uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 |
| with: |
| repository-url: https://test.pypi.org/legacy/ |
| |
| # Upload to real PyPI on GitHub Releases. |
| release-pypi: |
| name: Publish released package to pypi.org |
| environment: release-pypi |
| if: github.repository_owner == 'python-attrs' && github.event.action == 'published' |
| runs-on: ubuntu-latest |
| needs: build-package |
| |
| permissions: |
| id-token: write # necessary for trusted publishing |
| |
| steps: |
| - name: Download packages built by build-and-inspect-python-package |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 |
| with: |
| name: Packages |
| path: dist |
| |
| - name: Upload package to PyPI |
| uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 |
| with: |
| attestations: true |