name: CD concurrency: cd on: push: tags: - v* permissions: contents: write jobs: test: uses: ./.github/workflows/_test.yml build: name: Build runs-on: ubuntu-latest needs: test outputs: release_id: ${{ steps.gh-release.outputs.id }} steps: - name: Checkout release tag uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 with: ref: ${{ github.event.workflow_run.head_branch }} - name: Set up Python uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 with: python-version: '3.x' - name: Install build dependency run: python3 -m pip install --upgrade pip build - name: Build binary wheel and source tarball run: python3 -m build --sdist --wheel --outdir dist/ . - id: gh-release name: Publish GitHub release candidate uses: softprops/action-gh-release@1e07f4398721186383de40550babbdf2b84acfc5 with: name: ${{ github.ref_name }}-rc tag_name: ${{ github.ref }} body: "Release waiting for review..." files: dist/* - name: Store build artifacts uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # NOTE: The GitHub release page contains the release artifacts too, but using # GitHub upload/download actions seems robuster: there is no need to compute # download URLs and tampering with artifacts between jobs is more limited. with: name: build-artifacts path: dist release: name: Release runs-on: ubuntu-latest needs: build environment: release steps: - name: Fetch build artifacts uses: actions/download-artifact@9782bd6a9848b53b110e712e20e42d89988822b7 with: name: build-artifacts path: dist - name: Publish binary wheel and source tarball on PyPI uses: pypa/gh-action-pypi-publish@37f50c210e3d2f9450da2cd423303d6a14a6e29f with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} - name: Finalize GitHub release uses: actions/github-script@d556feaca394842dc55e4734bf3bb9f685482fa0 with: script: | await github.rest.repos.updateRelease({ owner: context.repo.owner, repo: context.repo.repo, release_id: '${{ needs.build.outputs.release_id }}', name: '${{ github.ref_name }}', body: 'See [CHANGELOG.md](https://github.com/' + context.repo.owner + '/' + context.repo.repo + '/blob/${{ github.ref_name }}/docs/CHANGELOG.md) for details.' })