Skip to content

feat(install): verify release bundle signature - #54

Merged
jmservera merged 1 commit into
mainfrom
release-signing/installer-verify
Jul 30, 2026
Merged

feat(install): verify release bundle signature#54
jmservera merged 1 commit into
mainfrom
release-signing/installer-verify

Conversation

@jmservera

Copy link
Copy Markdown
Owner

Summary

Recovers the installer signature-verification work (issue #15, plan Phase 3). The original PR #53 was auto-closed when its stacked base branch was deleted on #52's merge. Its base is now in main, so this PR targets main and contains only the installer-verification delta.

Makes release-mode installs verify authenticity, not just integrity.

Changes

.github/workflows/release.yml

  • Signs the in-bundle checksums.txt into checksums.txt.cosign.bundle, shipped inside the bundle so the extracted payload carries its own signature.

install.sh

  • Adds verify_release_signature() (called from verify_release_bundle()): cosign verify-blob against the in-bundle signature, pinning workflow identity and OIDC issuer (overridable via UBEROS_SIGN_IDENTITY_REGEXP / UBEROS_SIGN_OIDC_ISSUER). Skips cleanly when the signature or cosign is absent; fails closed on a bad signature, before Docker.

scripts/validate-wave3.sh

  • Adds signature-verification tests: valid signature installs, invalid signature is rejected before Docker, cosign-absent installs on verified checksums alone.

Validation

Previously green on #53 (lint, installer-modes sh/bash, all compose-modes, integration). checksums.txt already vouches for every bundled file, so one signature over it authenticates the whole payload. Gated so offline hosts keep the checksum-only path.

- sign the in-bundle checksums.txt and ship the signature in the bundle
- verify it with cosign in release mode, gated when cosign is absent
- cover valid, invalid, and cosign-absent paths in the installer harness

🔏 - Generated by Copilot
Copilot AI review requested due to automatic review settings July 30, 2026 11:46
@jmservera
jmservera merged commit 11660ba into main Jul 30, 2026
27 checks passed
@jmservera
jmservera deleted the release-signing/installer-verify branch July 30, 2026 11:48

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR restores “release bundle authenticity” verification by signing the in-bundle checksums.txt during the release workflow and having install.sh verify that signature with cosign verify-blob when both cosign and the signature bundle are present.

Changes:

  • .github/workflows/release.yml: Signs dist/<bundle>/checksums.txt into checksums.txt.cosign.bundle so the extracted bundle carries its own signature for installer verification.
  • install.sh: Adds verify_release_signature() and invokes it from verify_release_bundle() to verify checksums.txt authenticity via cosign (with identity/issuer pinning and env overrides).
  • scripts/validate-wave3.sh: Adds a new block of installer tests covering valid signature, invalid signature (fail-closed), and cosign-absent behavior.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
.github/workflows/release.yml Adds an in-bundle signature generation step for checksums.txt to support offline installer authenticity verification.
install.sh Verifies the in-bundle signature (when available) before any Docker/Compose operations run.
scripts/validate-wave3.sh Adds harness coverage for the new signature-verification behavior in the installer.

Comment on lines +244 to +248
set -euo pipefail
bundle="dist/${ARCHIVE_BASE}"
cosign sign-blob --yes \
--bundle "${bundle}/checksums.txt.cosign.bundle" \
"${bundle}/checksums.txt"
Comment thread scripts/validate-wave3.sh
Comment on lines +371 to +383
# A cosign that succeeds: the signed bundle installs and reaches Docker.
cat > "${FAKE_BIN}/cosign" <<EOF
#!/bin/sh
exit 0
EOF
chmod +x "${FAKE_BIN}/cosign"
: > "${DOCKER_LOG}"
PATH="${FAKE_BIN}:${PATH}" sh "${SIG_ROOT}/install.sh" -y \
--workspace "${SIG_WS}" --no-migrate >/dev/null \
|| fail "signed release bundle failed to install with a valid signature"
grep -q 'compose .* pull' "${DOCKER_LOG}" \
|| fail "signed release bundle did not reach the pull step"
pass "signed release bundle with a valid signature installs"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants