diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index 38b455e8b5..edd27998dd 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -31,6 +31,11 @@ jobs: build: name: Build Python distribution runs-on: ubuntu-latest + permissions: + id-token: write + attestations: write + contents: read + steps: - uses: actions/checkout@v4 with: @@ -98,6 +103,16 @@ jobs: - name: List contents of wheel run: python -m zipfile --list dist/pyhf-*.whl + - name: Generate artifact attestation for sdist and wheel + # If publishing to TestPyPI or PyPI + if: >- + (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && github.repository == 'scikit-hep/pyhf') + || (github.event_name == 'workflow_dispatch' && github.event.inputs.publish == 'true' && github.repository == 'scikit-hep/pyhf') + || (github.event_name == 'release' && github.event.action == 'published' && github.repository == 'scikit-hep/pyhf') + uses: actions/attest-build-provenance@897ed5eab6ed058a474202017ada7f40bfa52940 # v1.0.0 + with: + subject-path: "dist/pyhf-*" + - name: Upload distribution artifact uses: actions/upload-artifact@v4 with: @@ -127,6 +142,26 @@ jobs: - name: List all files run: ls -lh dist + - name: Verify sdist artifact attestation + # If publishing to TestPyPI or PyPI + if: >- + (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && github.repository == 'scikit-hep/pyhf') + || (github.event_name == 'workflow_dispatch' && github.event.inputs.publish == 'true' && github.repository == 'scikit-hep/pyhf') + || (github.event_name == 'release' && github.event.action == 'published' && github.repository == 'scikit-hep/pyhf') + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh attestation verify dist/pyhf-*.tar.gz --repo ${{ github.repository }} + + - name: Verify wheel artifact attestation + # If publishing to TestPyPI or PyPI + if: >- + (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && github.repository == 'scikit-hep/pyhf') + || (github.event_name == 'workflow_dispatch' && github.event.inputs.publish == 'true' && github.repository == 'scikit-hep/pyhf') + || (github.event_name == 'release' && github.event.action == 'published' && github.repository == 'scikit-hep/pyhf') + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh attestation verify dist/pyhf-*.whl --repo ${{ github.repository }} + - name: Publish distribution 📦 to Test PyPI # Publish to TestPyPI on tag events of if manually triggered # Compare to 'true' string as booleans get turned into strings in the console