Skip to content

Track SDK releases instead of a commit pin - #19

Merged
Marketen merged 2 commits into
mainfrom
chore/resolve-sdk-at-build-time
Sep 9, 2026
Merged

Marketen merged 2 commits into
mainfrom
chore/resolve-sdk-at-build-time

Conversation

@Marketen

@Marketen Marketen commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Why

upstreamVersion should name an SDK release, the way every other Dappnode package names its upstream. Hermes tracks NousResearch/hermes-agent at v2026.7.20 and tropibot opens the bump PR; there is no reason this package should be different.

It carried a commit SHA only because the SDK had no releases to point at. dappnode/dappnode-nexus-sdk#11 fixes that end — a release on every merge to main.

What changes

before after
upstreamVersion 219977388b9f… (40-char SHA, hand-edited) v0.1.0
Dockerfile required a 40-char hex SHA requires vX.Y.Z, fetches refs/tags/
bump a PR someone remembers to write auto_check.ymldappnode/workflows bump-upstream

Also in here

  • NEXUS_SDK_TOKEN goes. The SDK is public, so the secret mount in the Dockerfile, the secrets: block in compose and both workflow env entries were dead. Supersedes Use the public Nexus SDK without repository credentials #14, blocked since 2 September because back then the SDK was still private.
  • needs: build-test on the release job. It had none, so a failing build test did not stop a publish — open since the 24 August session notes.

Verified

  • tag shape check accepts v0.1.0, rejects a SHA, a bare branch name and v1.2
  • git fetch --depth=1 origin refs/tags/<tag> resolves correctly against a repository that has tags
  • manifest and compose pass dappmanager schema validation

The image cannot build until the first SDK release exists, so merge dappnode/dappnode-nexus-sdk#11 first.

Ordering

  1. Merge Fix two false claims on the verification page, and style the disclosure dappnode-nexus-sdk#10 (verification page fixes)
  2. Merge Cut a release on every merge to main dappnode-nexus-sdk#11 → cuts SDK v0.1.0
  3. Merge this
  4. Re-cut the proxy release and publish onchain

🤖 Generated with Claude Code

The pin was not protecting anything. Nothing measures or attests the proxy
image -- there is no PCR for it, no verify-build script, no point at which
anyone checks the running binary against source. The package is trusted
because Dappnode publishes it onchain, and both repositories are open source.
So the pin bought a provenance record, at the cost of a PR for every SDK
change, and the SDK has changed ten times since 17 August.

CI now resolves dappnode-nexus-sdk main to a commit and stamps it into the
manifest and compose before building. The record survives -- the published
package still says exactly which SDK source went into it -- but it is an
output rather than something a human copies.

Nothing about the build gets weaker. The Dockerfile still demands a full
40-character SHA and re-checks it after fetching, so the build stays
content-addressed; only who supplies the value changed. Base images were
already pinned by digest.

Two things fall out of it:

- The NEXUS_SDK_TOKEN machinery goes. dappnode-nexus-sdk is public, the
  workflow no longer passes the secret, and leaving a dead secret mount in the
  Dockerfile and compose would just be confusing. This supersedes #14.
- The release job gains `needs: build-test`. It had none, so a failing build
  test did not stop a publish -- open since the 24 August session notes.

Verified: the script resolves main, stamps both files, and the image builds
from the result with no credentials.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Replaces the hand-maintained SHA with the pattern every other Dappnode package
already uses: upstreamVersion names an upstream release, and the bump bot opens
the PR. Hermes tracks NousResearch/hermes-agent exactly this way.

The SDK had nothing to point at, which is the only reason a SHA was there in
the first place; dappnode/dappnode-nexus-sdk#11 makes it cut a release on every
merge to main.

- upstreamVersion becomes v0.1.0 and the Dockerfile takes a release tag,
  validating the shape and fetching refs/tags/.
- auto_check.yml calls dappnode/workflows bump-upstream, same as Hermes, so a
  new SDK release arrives as a PR rather than someone noticing.
- NEXUS_SDK_TOKEN goes: the SDK is public, so the secret mount in the
  Dockerfile, the compose secrets block and both workflow env entries were all
  dead. Supersedes #14.
- The release job gains needs: build-test. It had none, so a failing build test
  did not stop a publish. Open since the 24 August notes.

Verified: the tag shape check accepts v0.1.0 and rejects a SHA, a bare branch
name and a two-part version; fetching refs/tags/ resolves against a repository
that has tags; manifest and compose pass dappmanager validation. The image
itself cannot build until the first SDK release exists.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Marketen Marketen changed the title Resolve the SDK commit at build time instead of maintaining a pin Track SDK releases instead of a commit pin Sep 9, 2026
Comment on lines +13 to +14
uses: dappnode/workflows/.github/workflows/bump-upstream.yml@master
secrets: inherit
@Marketen
Marketen merged commit 1c1ef04 into main Sep 9, 2026
6 of 7 checks passed
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