name: goreleaser on: push: tags: ['*'] jobs: goreleaser: runs-on: ubuntu-latest outputs: hashes: ${{ steps.hash.outputs.hashes }} steps: - uses: actions/checkout@v3 - name: Unshallow run: git fetch --prune --unshallow - uses: actions/setup-go@v4 with: go-version: 1.21 check-latest: true - uses: goreleaser/goreleaser-action@v4.2.0 id: run-goreleaser with: version: "~> v1.19" args: release --rm-dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Generate subject id: hash env: ARTIFACTS: "${{ steps.run-goreleaser.outputs.artifacts }}" run: | set -euo pipefail checksum_file=$(echo "$ARTIFACTS" | jq -r '.[] | select (.type=="Checksum") | .path') echo "hashes=$(cat $checksum_file | base64 -w0)" >> $GITHUB_OUTPUT provenance: needs: [goreleaser] permissions: actions: read # To read the workflow path. id-token: write # To sign the provenance. contents: write # To add assets to a release. uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.5.0 with: base64-subjects: "${{ needs.goreleaser.outputs.hashes }}" upload-assets: true # upload to a new release verification: needs: [goreleaser, provenance] runs-on: ubuntu-latest permissions: read-all steps: - name: Install SLSA verifier uses: slsa-framework/slsa-verifier/actions/installer@v2.2.0 - name: Download assets env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} PROVENANCE: "${{ needs.provenance.outputs.provenance-name }}" run: | set -euo pipefail gh -R "$GITHUB_REPOSITORY" release download "$GITHUB_REF_NAME" -p "*.tar.gz" gh -R "$GITHUB_REPOSITORY" release download "$GITHUB_REF_NAME" -p $PROVENANCE - name: Verify assets env: CHECKSUMS: ${{ needs.goreleaser.outputs.hashes }} PROVENANCE: "${{ needs.provenance.outputs.provenance-name }}" run: | set -euo pipefail checksums=$(echo "$CHECKSUMS" | base64 -d) while read -r line; do fn=$(echo $line | cut -d ' ' -f2) echo "Verifying $fn" slsa-verifier verify-artifact "$fn" \ --provenance-path "$PROVENANCE" \ --source-uri "github.com/$GITHUB_REPOSITORY" \ --source-tag "$GITHUB_REF_NAME" done <<<"$checksums"