ci(release): nightlies system (cron + dispatch, nightly channel) (#592)#38
Merged
Conversation
Fan out the validated nightlies release system from the reference (dig-updater)
to dig-node, replacing the tag-and-release-on-every-merge model.
- Convert changelog-tag.yml -> nightly-release.yml: schedule (0 0 * * * midnight
UTC) + workflow_dispatch (channel both|stable|nightly, force bool); removes
push:branches:main. Keeps version-detect, skip-if-tagged, git-cliff changelog,
RELEASE_TOKEN push, loop guard, no-op-if-absent.
- Add the nightly channel: dated nightly-YYYYMMDD + rolling nightly, prerelease,
never latest, keep-14 retention (anchored ^nightly-[0-9]{8}$ + cleanup-tag),
delete-then-upload.
- Extract the cross-OS build into a reusable build-binaries.yml (workflow_call,
version+ref) preserving dual asset naming (dig-node-* + dig-companion-*) + the
dign first-class alias + the ENOSPC debuginfo-strip env; release.yml is now
tag-only (meta -> build -> publish, latest=true). Release-path check is
fmt+clippy only (drops the redundant cargo test, per the repo's own #489 intent;
ci.yml runs the full nextest+coverage on PR).
- R1 force-guard: refuse to force-move a tag when a PUBLISHED release exists and
the tag commit differs from HEAD (same-commit re-cut + tag-repair allowed).
- opus notes: pin stable checkout ref:main; force breaks tag-immutability, the
dig-updater signed feed is dig-node's integrity layer.
- A3: un-swallowed gh release list in the prune step.
- Guard test nightly_release_workflow_shape.rs pins the shape; the build moved out
of release.yml so release_workflow_dign_guard.rs now reads build-binaries.yml.
- SPEC §11 rewritten for the nightlies system + runbooks/release.md added.
Version bump 0.31.1 -> 0.31.2 (ci -> patch) to validate through the new system.
Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Task
Fan out the VALIDATED nightlies release system (reference: DIG-Network/dig-updater #590/#15) to dig-node. Superproject issue DIG-Network/dig_ecosystem#592 (child of epic #590). Release-infra change — do NOT merge; hand to the review gate.
What changed
changelog-tag.yml→nightly-release.yml:schedule: 0 0 * * *(midnight UTC) +workflow_dispatch(channel,force). Removedpush: branches: main. Preserves version-detect ([workspace.package].version), skip-if-tagged idempotency, git-cliff changelog, RELEASE_TOKEN push, loop guard, no-op-if-absent.nightly-YYYYMMDD+ rollingnightly,prerelease, neverlatest, keep-14 (anchored filter +--cleanup-tag), delete-then-upload.build-binaries.yml(workflow_call,version+ref) preserves the dual asset naming (dig-node-*canonical +dig-companion-*legacy) + thedignfirst-class alias + the ENOSPC debuginfo-strip env. Bothrelease.yml(now tag-only) and the nightly channel call it.ref: main; force-branch comment notes tag-immutability break + that the dig-updater signed feed is dig-node's integrity layer.gh release list.nightly_release_workflow_shape.rs(11). The build moved out ofrelease.yml, so the existingrelease_workflow_dign_guard.rsnow readsbuild-binaries.yml.runbooks/release.mdadded (incl. R2 60-day cron auto-disable recovery).Version
0.31.1 → 0.31.2(ci → patch). Cargo.lock synced (cargo update --workspace; onlydig-node-serviceinherits the workspace version).Per-repo deviations from the template
checkis now fmt+clippy only — the oldrelease.ymlcheckjob also rancargo test --locked, but its own header already documented the #489 intent to drop it (a deploy-time test re-run is redundant flake-exposure).ci.ymlruns the fullcargo llvm-cov nextest --workspaceon every PR, so coverage is unaffected. Flagging as a (documented-intent) behavior change on the release path.ci.ymlisubuntu-latestonly — it does NOT build the Windows/macOS release targets on PR (the workspace pullsopenssl-sys/wasmtime; a cross-OS CI matrix would be heavy). A midnight stable tag could be cut from amainwhose per-OS build was never exercised by PR CI. The nightly channel mitigates this (builds all 4 targets frommainHEAD nightly, ~24h detection lag). Documented in SPEC §11 + the runbook; wideningci.ymlis filed as a follow-up.release_workflow_dign_guard.rsnowinclude_str!sbuild-binaries.ymlinstead ofrelease.yml(the build relocated). Non-pure-copy change, flagged.cargo testcould not compile the crate on my Windows box (a cmake-based native dep has no local C toolchain) — the guard test is text-only and byte-identical to dig-relay/dig-dns (which passed); CI has the full toolchain and is the verification of record.Verification
🤖 Generated with Claude Code
https://claude.ai/code/session_014CHdgyC9V2Lhhwhuxk3e3r