From 5522af5eb1c88ecc6b9addde33f93171aae2af50 Mon Sep 17 00:00:00 2001 From: pgjones Date: Sat, 30 Sep 2023 18:57:36 +0100 Subject: [PATCH] Add a publish workflow This will allow trusted publishing of Quart to PyPI. It is based on the pallets standard rather than the standard used for other Quart extensions. --- .github/workflows/publish.yaml | 70 ++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 .github/workflows/publish.yaml diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 0000000..7fd07f5 --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,70 @@ +name: Publish +on: + push: + tags: + - '*' +jobs: + build: + runs-on: ubuntu-latest + outputs: + hash: ${{ steps.hash.outputs.hash }} + steps: + - uses: actions/checkout + - uses: actions/setup-python + with: + python-version: '3.x' + - run: pip install poetry + - run: poetry build + # Generate hashes used for provenance. + - name: generate hash + id: hash + run: cd dist && echo "hash=$(sha256sum * | base64 -w0)" >> $GITHUB_OUTPUT + - uses: actions/upload-artifact + with: + path: ./dist + + provenance: + needs: ['build'] + permissions: + actions: read + id-token: write + contents: write + # Can't pin with hash due to how this workflow works. + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml + with: + base64-subjects: ${{ needs.build.outputs.hash }} + + create-release: + # Upload the sdist, wheels, and provenance to a GitHub release. They remain + # available as build artifacts for a while as well. + needs: ['provenance'] + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/download-artifact + - name: create release + run: > + gh release create --draft --repo ${{ github.repository }} + ${{ github.ref_name }} + *.intoto.jsonl/* artifact/* + env: + GH_TOKEN: ${{ github.token }} + publish-pypi: + needs: ['provenance'] + # Wait for approval before attempting to upload to PyPI. This allows reviewing the + # files in the draft release. + environment: 'publish' + runs-on: ubuntu-latest + permissions: + id-token: write + steps: + - uses: actions/download-artifact + # Try uploading to Test PyPI first, in case something fails. + - uses: pypa/gh-action-pypi-publish + with: + repository-url: https://test.pypi.org/legacy/ + packages-dir: artifact/ + - uses: pypa/gh-action-pypi-publish + with: + packages-dir: artifact/