mirror of
https://github.com/sysadminsmedia/homebox.git
synced 2025-12-21 13:23:14 +01:00
134 lines
4.3 KiB
YAML
134 lines
4.3 KiB
YAML
name: Publish Release Binaries
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
tags: [ 'v*.*.*' ]
|
|
|
|
jobs:
|
|
goreleaser:
|
|
name: goreleaser
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
hashes: ${{ steps.binary.outputs.hashes }}
|
|
permissions:
|
|
contents: write
|
|
packages: write
|
|
id-token: write
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: "1.24"
|
|
cache-dependency-path: backend/go.mod
|
|
|
|
- uses: pnpm/action-setup@v2
|
|
with:
|
|
version: 9.15.3
|
|
|
|
- name: Build Frontend and Copy to Backend
|
|
working-directory: frontend
|
|
run: |
|
|
pnpm install
|
|
pnpm run build
|
|
cp -r ./.output/public ../backend/app/api/static/
|
|
|
|
- name: Install CoSign
|
|
working-directory: backend
|
|
run: |
|
|
go install github.com/sigstore/cosign/cmd/cosign@latest
|
|
|
|
- name: Install Syft
|
|
working-directory: backend
|
|
run: |
|
|
go install github.com/anchore/syft/cmd/syft@latest
|
|
|
|
- name: Run GoReleaser
|
|
id: releaser
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
uses: goreleaser/goreleaser-action@v5
|
|
with:
|
|
workdir: "backend"
|
|
distribution: goreleaser
|
|
version: "~> v2"
|
|
args: release --clean
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
COSIGN_PWD: ${{ secrets.COSIGN_PWD }}
|
|
COSIGN_YES: "true"
|
|
|
|
- name: Generate binary hashes
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
id: binary
|
|
env:
|
|
ARTIFACTS: "${{ steps.releaser.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"
|
|
|
|
- name: Run GoReleaser No Release
|
|
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
|
|
uses: goreleaser/goreleaser-action@v5
|
|
with:
|
|
workdir: "backend"
|
|
distribution: goreleaser
|
|
version: "~> v2"
|
|
args: release --clean --snapshot --skip=publish
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
COSIGN_PWD: ${{ secrets.COSIGN_PWD }}
|
|
COSIGN_YES: "true"
|
|
|
|
binary-provenance:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
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.9.0
|
|
with:
|
|
base64-subjects: "${{ needs.goreleaser.outputs.hashes }}"
|
|
upload-assets: true # upload to a new release
|
|
|
|
verification-with-slsa-verifier:
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
needs: [goreleaser, binary-provenance]
|
|
runs-on: ubuntu-latest
|
|
permissions: read-all
|
|
steps:
|
|
- name: Install the verifier
|
|
uses: slsa-framework/slsa-verifier/actions/installer@v2.4.0
|
|
|
|
- name: Download assets
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
PROVENANCE: "${{ needs.binary-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 "*.zip"
|
|
gh -R "$GITHUB_REPOSITORY" release download "$GITHUB_REF_NAME" -p "$PROVENANCE"
|
|
- name: Verify assets
|
|
env:
|
|
CHECKSUMS: ${{ needs.goreleaser.outputs.hashes }}
|
|
PROVENANCE: "${{ needs.binary-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 --provenance-path "$PROVENANCE" \
|
|
--source-uri "github.com/$GITHUB_REPOSITORY" \
|
|
--source-tag "$GITHUB_REF_NAME" \
|
|
"$fn"
|
|
done <<<"$checksums"
|