Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 27 additions & 3 deletions .github/workflows/build-publish-container-goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ name: Build and publish container using goreleaser
on:
workflow_call:
inputs:
build_deps:
type: string
required: false
description: 'Space-separated list of apt packages to install before building (e.g. "gcc-aarch64-linux-gnu libc6-dev-arm64-cross").'
cgo_enabled:
type: number
required: false
Expand Down Expand Up @@ -41,6 +45,14 @@ jobs:
container_build_publish:
runs-on: ubuntu-latest
steps:
- name: Install build dependencies
if: ${{ inputs.build_deps != '' }}
env:
BUILD_DEPS: ${{ inputs.build_deps }}
run: |
sudo apt update
# shellcheck disable=SC2086 # intentional word splitting
sudo apt install -y --no-install-recommends ${BUILD_DEPS}
- name: Set up Go
uses: actions/setup-go@v6.4.0
with:
Expand Down Expand Up @@ -97,13 +109,18 @@ jobs:
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git tag -f -a pr-${{ inputs.pr_number }} -m "PR Release"
- name: Generate release notes
if: ${{ !inputs.is_pr_build }}
env:
GITHUB_TOKEN: ${{ github.token }}
run: gh api "repos/${GITHUB_REPOSITORY}/releases/generate-notes" -F tag_name="${{ github.ref_name }}" --jq .body > ../notes.md
- name: Build/Push/Release container with goreleaser
uses: goreleaser/goreleaser-action@v6
env:
GITHUB_TOKEN: ${{ github.token }}
with:
version: '~> 2'
args: release --clean ${{ inputs.is_pr_build && '--skip=announce,validate,archive' || '' }}${{ env.SKIP_CONTAINER_PUBLISH == 'true' && (inputs.is_pr_build && ',publish' || '--skip=publish') || '' }}${{ inputs.release_draft && ' --draft' || '' }}
args: release --clean ${{ inputs.is_pr_build && '--skip=announce,validate,archive' || '' }}${{ env.SKIP_CONTAINER_PUBLISH == 'true' && (inputs.is_pr_build && ',publish' || '--skip=publish') || '' }} ${{ inputs.release_draft && '--draft' || '' }} ${{ !inputs.is_pr_build && '--release-notes ../notes.md' || '' }}
id: goreleaser
- name: Process goreleaser output
if: env.SKIP_CONTAINER_PUBLISH == 'false'
Expand All @@ -114,9 +131,16 @@ jobs:
const artifacts = ${{ steps.goreleaser.outputs.artifacts }};
const firstNonNullDigest = artifacts.find(artifact => artifact.extra && artifact.extra.Digest != null)?.extra.Digest;
console.log(firstNonNullDigest);
fs.writeFileSync('digest.txt', firstNonNullDigest);
if (firstNonNullDigest) {
fs.writeFileSync('digest.txt', firstNonNullDigest);
} else {
console.error('No digest found in artifacts');
process.exit(1);
}
EOF
echo "digest=$(cat digest.txt)" >> "${GITHUB_OUTPUT}"
if [ -f digest.txt ]; then
echo "digest=$(cat digest.txt)" >> "${GITHUB_OUTPUT}"
fi
- name: Attest Binaries
if: ${{ (env.SKIP_CONTAINER_PUBLISH == 'false') && (inputs.is_pr_build == false) }}
uses: actions/attest-build-provenance@v4.1.0
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,9 @@ jobs:
```

### build-publish-container-goreleaser (Reusable Workflow)
Builds and publishes a container image via GoReleaser, with multi-arch builds, build provenance attestation, and PR snapshot support.
Builds and publishes a container image via GoReleaser, with multi-arch builds, build provenance attestation, and PR snapshot support. Release builds (`is_pr_build: false`) pass GitHub's auto-generated release notes for the pushed tag to GoReleaser via `--release-notes`.

Optional `build_deps` is a space-separated list of apt packages installed before the build, for cases such as CGO cross-compilation that need a toolchain not present on the runner.

**Usage:**
```yaml
Expand All @@ -166,6 +168,8 @@ jobs:
with:
registry_subject_name: ghcr.io/openchami/foo
release_draft: false
cgo_enabled: 1
build_deps: gcc-aarch64-linux-gnu libc6-dev-arm64-cross
```

### build-rpm-quadlet (Reusable Workflow)
Expand Down