diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a6b47cc..cdccde7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -67,6 +67,7 @@ jobs: labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max + sbom: true - uses: actions/attest-build-provenance@v4 # Provenance attestation is not available for user-owned private @@ -78,3 +79,27 @@ jobs: subject-name: ${{ env.REGISTRY }}/${{ github.repository }} subject-digest: ${{ steps.build.outputs.digest }} push-to-registry: true + + release: + # A Release page per tag, its notes the version's CHANGELOG section, so + # "what changed in X.Y.Z" has one answer on GitHub too. Only after the + # images are out: a page for a release nobody can pull is a false claim. + if: startsWith(github.ref, 'refs/tags/v') + needs: [publish] + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v7 + + - name: Create the Release page from the CHANGELOG section + env: + GH_TOKEN: ${{ github.token }} + run: | + TAG="${GITHUB_REF_NAME#v}" + awk -v head="## ${TAG}" '$0 == head {on = 1; next} /^## / {on = 0} on' CHANGELOG.md > notes.md + if gh release view "$GITHUB_REF_NAME" > /dev/null 2>&1; then + echo "Release ${GITHUB_REF_NAME} already exists; leaving it as it is." + else + gh release create "$GITHUB_REF_NAME" --title "$TAG" --notes-file notes.md --verify-tag + fi diff --git a/CHANGELOG.md b/CHANGELOG.md index ccb7950..85d2c26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ replacing a module has to be a decision with visible consequences. ## Unreleased +- **Each tag gets a GitHub Release page and an SBOM.** The Release page's notes are the + version's CHANGELOG section. Every image carries an SPDX SBOM (BuildKit attestation) inside + the image index, and the signed build provenance covers that index digest. Check one with + `gh attestation verify oci://IMAGE@DIGEST --owner Conker-AI`. + ## 0.5.2 - **The image takes Debian's zlib security fix** (zlib1g CVE-2026-76844 and CVE-2026-85091,