Skip to content

ci: sign fat jars (.asc) + cross-repo byte-identical shared files - #359

Merged
bernardladenthin merged 4 commits into
mainfrom
claude/bitcoinaddressfinder-jar-upload-k0tkj7
Jul 24, 2026
Merged

ci: sign fat jars (.asc) + cross-repo byte-identical shared files#359
bernardladenthin merged 4 commits into
mainfrom
claude/bitcoinaddressfinder-jar-upload-k0tkj7

Conversation

@bernardladenthin

Copy link
Copy Markdown
Owner

Summary

  • GPG-sign the all-backends fat jars (.asc) on the GitHub Release / snapshot pre-release: new .github/sign-fatjars.sh (ephemeral keyring, detached armored signature + verify) is called from github-release-signed / github-snapshot after they download llama-fatjars. Both jobs now declare environment: maven-central (where the key is scoped; no approval gate) and checkout the repo. .sha256 (integrity) is kept; .asc adds authenticity — parity with the thin jars and the BAF/srcmorph siblings.
  • sign-fatjars.sh is a byte-identical cross-repo shared script (dual MIT OR Apache-2.0), shared with srcmorph.
  • Unify .github/signing-selftest/ (build.gradle.kts + settings.gradle.kts) to MIT OR Apache-2.0 so the throwaway verify-signing-key-gradle project is truly byte-identical across all four repos (previously the body matched but the SPDX header drifted).
  • Sync llama/lombok.config to the canonical workspace/policies/lombok-config.md block verbatim (directives were already identical; only comment rationale drifted).

CI-config / docs only — no production code, no C++/JNI changes. Fat-jar signing runs only on the dispatch-gated publish path (publish_to_central=true).

Test plan

  • No source changes; native build + Java behavior unaffected
  • sign-fatjars.sh verified end-to-end locally with a throwaway key (both fat jars signed + verified, thin jar untouched)
  • CI green on this branch (fat-jar signing itself only exercises on a publish dispatch)
  • Docs updated (CLAUDE.md fat-jar section + cross-repo policy pointer)

Related issues / PRs

Coordinated cross-repo change; the canonical docs + the checksum drift-check table land in the workspace PR (same branch name). Sibling PRs: BitcoinAddressFinder / srcmorph / streambuffer / workspace.

Checklist

  • My commits follow Conventional Commits
  • No security-sensitive changes (signing prints only public metadata; passphrase is masked / fed on stdin)

🤖 Generated with Claude Code

https://claude.ai/code/session_01TJzCezSnQ8FxpFdeVxYxQY


Generated by Claude Code

claude added 4 commits July 24, 2026 05:10
The all-backends server fat jars (jar-with-dependencies) were attached to the
GitHub Release / snapshot pre-release with only a .sha256 checksum — no signature,
unlike the thin jars (which maven-gpg signs at deploy) and unlike the BAF /
srcmorph sibling fat jars.

Add .github/sign-fatjars.sh (imports the release key into an ephemeral keyring and
produces a detached, armored .asc for every *-jar-with-dependencies*.jar in a
directory, verifying each) and call it from github-release-signed and
github-snapshot after they download llama-fatjars, before the upload. Both jobs now
declare environment: maven-central (where GPG_PRIVATE_KEY/GPG_PASSPHRASE are scoped;
it has no approval gate) and check out the repo so the script is present. The
.sha256 files are kept (integrity); the .asc adds authenticity. Signed in these
dispatch-gated attach jobs, not in package-fatjars, because only this path receives
the key.

Verified locally end-to-end with a throwaway key: both fat jars signed + verified,
the thin jar left untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TJzCezSnQ8FxpFdeVxYxQY
…script

Neutralize the header (repo-agnostic) and relicense to MIT OR Apache-2.0 so the
exact same sign-fatjars.sh can live byte-identical in java-llama.cpp and srcmorph
(same pattern as the verify-signing-key job). Signing logic is unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TJzCezSnQ8FxpFdeVxYxQY
…cross-repo)

Unify the throwaway signing-selftest Gradle project (build.gradle.kts +
settings.gradle.kts) to the dual SPDX-License-Identifier "MIT OR Apache-2.0" so the
files are TRULY byte-identical across all four sibling repos (java-llama.cpp used MIT,
the others Apache-2.0 — same body, only the header drifted). This matches the
cross-repo-synced-file convention already used for sign-fatjars.sh and makes the
verify-signing-key-gradle preflight project checksum-verifiable via workspace.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TJzCezSnQ8FxpFdeVxYxQY
…al cross-repo)

Sync lombok.config to the canonical workspace policy content verbatim

The three Lombok repos had IDENTICAL directives but drifted comments (per-repo
rationale in the file). Replace each with the canonical block from
workspace/policies/lombok-config.md verbatim, so the file is now byte-identical
across all three (the rationale lives once in the policy / crossrepo, not in the
file). Recorded in the workspace cross-repo checksum drift-check.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TJzCezSnQ8FxpFdeVxYxQY
@sonarqubecloud

Copy link
Copy Markdown

@bernardladenthin
bernardladenthin merged commit 72f4391 into main Jul 24, 2026
11 of 17 checks passed
@bernardladenthin
bernardladenthin deleted the claude/bitcoinaddressfinder-jar-upload-k0tkj7 branch July 24, 2026 06:28
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