В общем, в сам action добавляются разрешения
permissions:
contents: write
id-token: write
attestations: write
artifact-metadata: write
Потом ставятся такие штуки перед go releaser:
- name: Install Syft
uses: anchore/sbom-action/download-syft@v0
- name: Install Cosign
uses: sigstore/cosign-installer@v4.1.1
Следующим шагом запускается Goreleaser, а затем ставится аттестация:
- name: Find checksum file
shell: bash
run: echo "CHECKSUMS_FILE=$(ls dist/*_checksums.txt)" >> "$GITHUB_ENV"
- name: Generate artifact attestation
uses: actions/attest@v4.1.0
with:
subject-checksums: ${{ env.CHECKSUMS_FILE }}
В самом же конфиге go releaser помимо обычных вещей добавляется:
checksum:
name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt"
algorithm: sha256
sboms:
- artifacts: archive
release:
draft: false
prerelease: auto
mode: replace
changelog:
disable: true
signs:
- id: checksums
cmd: cosign
signature: "${artifact}.sigstore.json"
artifacts: checksum
args:
- sign-blob
- "--bundle=${signature}"
- "${artifact}"
- "--yes"
После этого всё сделается "само". Затем через Cosign любой может сделать верификацию, либо посмотреть аттестацию прямо на GitHub