Skip to content

ci: require signer OTS proof for final releases#10880

Open
ziggie1984 wants to merge 1 commit into
lightningnetwork:masterfrom
ziggie1984:ci/check-final-release-ots
Open

ci: require signer OTS proof for final releases#10880
ziggie1984 wants to merge 1 commit into
lightningnetwork:masterfrom
ziggie1984:ci/check-final-release-ots

Conversation

@ziggie1984
Copy link
Copy Markdown
Collaborator

@ziggie1984 ziggie1984 commented Jun 5, 2026

Change Description

Require final published releases to include OpenTimestamps proof artifacts for:

  • the release manifest: manifest-${VERSION}.txt.ots
  • at least
    one trusted developer signature: manifest-<signer>-${VERSION}.sig.ots

Release candidate tags ending in .rcN are skipped.

The signature OTS check is constrained to trusted
release signers from scripts/verify-install.sh, and only passes when the matching uploaded manifest-<signer>-${VERSION}.sig asset is also present.

This also fixes the generated
release text to document the actual OTS artifact names and verification commands.

Steps to Test

  • Parsed .github/workflows/release.yaml and .github/workflows/verify- release.yaml locally with Ruby YAML loading.
  • Tested the final/RC tag matching logic locally.
  • Tested trusted signer matching against scripts/verify-install.sh.
  • Ran git diff --check.

@gemini-code-assist
Copy link
Copy Markdown

Note

Gemini is unable to generate a summary for this pull request due to the file types involved not being currently supported.

@github-actions github-actions Bot added the severity-low Best-effort review label Jun 5, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 5, 2026

🟢 PR Severity: LOW

Automated classification | 1 file | 40 lines changed

🟢 Low (1 file)
  • .github/workflows/verify-release.yaml - CI/CD workflow configuration file

Analysis

This PR modifies a single GitHub Actions workflow file (.github/workflows/verify-release.yaml). Files under .github/* are classified as LOW severity as they represent CI'D configuration changes with no impact on the Lightning Network daemon's core logic, security model, or financial operations.

No severity bump was applied: only 1 non-test, non-generated file changed (threshold: >20), and only 40 lines were modified (threshold: >500).


To override, add a severity-override-{critical,high,medium,low} label.
<!-- pr-severity-bot -->

@ziggie1984 ziggie1984 force-pushed the ci/check-final-release-ots branch from d7d0070 to 28584ea Compare June 5, 2026 20:00
@ziggie1984 ziggie1984 changed the title ci: require roasbeef OTS proof for final releases ci: require trusted OTS proofs for final releases Jun 5, 2026
@ziggie1984 ziggie1984 changed the title ci: require trusted OTS proofs for final releases ci: require signer OTS proof for final releases Jun 5, 2026
@ziggie1984 ziggie1984 requested review from Copilot and saubyk June 5, 2026 20:04
Copy link
Copy Markdown

Copilot AI left a comment

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 tightens the release verification pipeline by requiring OpenTimestamps (OTS) proof artifacts to be present on final GitHub releases, ensuring the release manifest and at least one trusted developer signature have corresponding .ots proofs. It also updates the release body text to document the correct OTS artifact names and verification commands.

Changes:

  • Add a pre-check in the verify-release workflow to enforce presence of manifest-${VERSION}.txt.ots and at least one manifest-<trusted-signer>-${VERSION}.sig.ots (and its matching .sig) for non-.rcN tags.
  • Constrain acceptable signer OTS proofs to the trusted signer list derived from scripts/verify-install.sh.
  • Update the generated release text to reflect the actual OTS artifact filenames and ots verify commands.

Reviewed changes

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

File Description
.github/workflows/verify-release.yaml Adds a final-release-only OTS asset enforcement step (with trusted signer matching) before running the existing Docker-based verification.
.github/workflows/release.yaml Fixes the release notes template to document the correct OTS proof artifact names and verification commands.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

- name: git checkout
uses: actions/checkout@v4

- name: Check final release OpenTimestamps asset
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Process note: this step runs on release: published, so if maintainers publish the release before uploading the .sig.ots/.txt.ots assets, the gate fails and the existing if: failure() handler reverts the release to draft. It's recoverable (upload assets, re-publish), but it's a behavioral change worth calling out in the release runbook — the first release after this merges is the most likely to trip on it.

runs-on: ubuntu-latest
steps:
- name: git checkout
uses: actions/checkout@v4
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

For workflow_dispatch with an older version input, actions/checkout@v4 checks out the default branch, so TRUSTED_SIGNERS is read from current master rather than the released tag's verify-install.sh. Harmless while the signer list only grows, but if a signer is ever removed a historical re-verify could behave inconsistently. Consider pinning ref: ${{ inputs.version || github.sha }}.

REQUIRED_MANIFEST_OTS="manifest-${VERSION}.txt.ots"
TRUSTED_SIGNERS="$(sed -n \
's/^KEYS+=(.* \([^" ]*\)")$/\1/p' \
scripts/verify-install.sh)"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This sed is tightly coupled to the exact KEYS+=("<fp> <name>") line shape in verify-install.sh. If that format ever changes, TRUSTED_SIGNERS silently becomes empty and every final release fails with the generic "missing OTS proof" error. A defensive guard would turn that into a clear failure:

[[ -n "${TRUSTED_SIGNERS}" ]] || { echo "ERROR: no trusted signers parsed from verify-install.sh"; exit 1; }

(FWIW I verified the current regex extracts all 14 signers correctly and handles hyphenated names like ViktorT-11.)

exit 1
fi

echo "Found required OpenTimestamps artifacts:"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Worth being explicit that this gate verifies the presence of the .ots asset names — it never runs ots verify on them, so a malformed/empty proof file would still pass. The trusted-signer + matching-.sig constraints make presence a reasonable bar, but the PR title ("require signer OTS proof") slightly oversells it: it requires the proof file, not a valid proof. Either tweak the wording or consider actually validating the timestamp if integrity is the goal.

## Verifying the Release Timestamp

From this new version onwards, in addition time-stamping the _git tag_ with [OpenTimestamps](https://opentimestamps.org/), we'll also now timestamp the manifest file along with its signature. Two new files are now included along with the rest of our release artifacts: ` manifest-roasbeef-${{ env.RELEASE_VERSION }}.txt.asc.ots`.
From this new version onwards, in addition time-stamping the _git tag_ with [OpenTimestamps](https://opentimestamps.org/), we'll also now timestamp the manifest file along with at least one developer signature. Timestamp proof files are included along with the rest of our release artifacts: `manifest-${{ env.RELEASE_VERSION }}.txt.ots` and one or more `manifest-<signer>-${{ env.RELEASE_VERSION }}.sig.ots` files.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Nit (pre-existing wording carried into this edited line): "in addition time-stamping the git tag" reads as missing a "to" — "in addition to time-stamping the git tag". Easy to fix while this line is already being rewritten.

Copy link
Copy Markdown
Collaborator

@saubyk saubyk left a comment

Choose a reason for hiding this comment

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

Non blocking comments

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants