Skip to content

refactor(cli): rename binary digstore -> dig-store with transitional dual-publish - #23

Merged
MichaelTaylor3d merged 1 commit into
mainfrom
refactor/rename-binary-dig-store
Jul 17, 2026
Merged

refactor(cli): rename binary digstore -> dig-store with transitional dual-publish#23
MichaelTaylor3d merged 1 commit into
mainfrom
refactor/rename-binary-dig-store

Conversation

@MichaelTaylor3d

Copy link
Copy Markdown
Contributor

Task

Step [2] of the rename epic #703 (RELEASE-FIRST). Rename the primary CLI binary digstore -> dig-store to match the renamed repo, keeping the digs alias and ALL crate/package names, so the downstream apt.dig.net + dig-installer cutover lanes have a released dig-store binary/assets to depend on.

Changes

  • CLI binary namecrates/digstore-cli/Cargo.toml [[bin]] name digstore -> dig-store. digs alias, [package] name = digstore-cli, [lib] name = digstore_cli, and every library crate name are UNCHANGED (published/consumed — out of scope by the canonical convention). The shared digstore_cli::run() entrypoint self-reports its argv[0] program name, so dig-store --version reports dig-store 0.14.0 and digs --version reports digs 0.14.0 (verified against the built binaries).
  • Release workflow dual-publish (build-binaries.yml) — for ONE transition cycle every asset is published under BOTH the new dig-store-* stem AND the legacy digstore-* stem (bare per-OS binaries + apt .tar.gz), so apt.dig.net + dig-installer stay green until they cut over. --bin digstore --bin digs -> --bin dig-store --bin digs.
  • ${DIGS_BIN} substring fix (load-bearing) — the old DIGS_BIN="${DIGS_BIN/digstore/digs}" derived the digs asset name by substring replacement on the primary. After the rename the primary is dig-store, which contains NO digs substring, so the trick is broken. The digs name is now derived INDEPENDENTLY (digs + the OS .exe suffix), guarded by a new shape test.
  • Transitional compat symlink — the apt .tar.gz (and the .deb layout via apt) ships a digstore -> dig-store symlink at its root for one cycle, so scripts calling digstore directly keep working (the digs alias already shields interactive users).
  • Self-updater (update.rs) — select_binary_asset now prefers the primary dig-store stem over the legacy digstore/digs alias (fixes a latent ambiguity: today's releases already ship both digstore-* and digs-* raw assets, so a naive first-match could self-replace with the alias). extract_digstore_from_targz extracts the real dig-store file (skipping the compat symlink) with a digstore fallback so a dig-store binary can still update from an older, pre-rename tarball.
  • release.yml / publish-binary.yml — build + upload the dig-store binary. The dighub S3 hub-worker layout (digstore/<ver>/digstore + latest.json) is UNCHANGED — it is the hub compile-worker's contract, a separate consumer NOT cut over in this lane.
  • action.yml — runtime invocations call dig-store; repository: DIG-Network/digstore -> dig-store. cargo install --path crates/digstore-cli unchanged (package name kept).
  • crate repository= metadatadigstore-core + dig-client-wasm (+ the wasm pkg assembler) -> github.com/DIG-Network/dig-store.
  • SPEC.md / README / runbook / issue templates — binary/product/repo-URL refs -> dig-store; digs alias invocations + historical CHANGELOG untouched; crate names (digstore-*) preserved.

SemVer rationale

MINOR (0.13.5 -> 0.14.0): a user-facing binary rename that stays backwards-compatible via the transitional dual-publish + digstore compat symlink + the digs alias — no consumer breaks.

Verification

  • cargo build -p digstore-cli --bins green; dig-store/digs binaries self-report their own names + Usage: lines.
  • Full cargo test -p digstore-cli green (46 test-result blocks, 0 failures), incl. new update.rs tests (dual-publish stem preference, dig-store extraction, compat-symlink skip) + new nightly_release_workflow_shape.rs guards (dual-publish both stems, compat symlink, independent digs-name derivation).
  • cargo fmt --all -- --check clean; cargo clippy -p digstore-cli --all-targets --all-features -- -D warnings clean.

Blast radius (gitnexus + manual)

invoked_bin_name() (arg0-derived) is consumed only by lib.rs + completion.rs, so the program name flips to dig-store automatically for usage/version/help-json/completions — the only test assertions updated are those dynamic-name checks + the cargo_bin("digstore") -> cargo_bin("dig-store") invocations. In-CLI hardcoded help EXAMPLES (digstore init, ...) were intentionally LEFT as digstore for this transitional release (they remain runnable via the compat symlink); canonicalizing them to the dynamic invoked-name is filed as a follow-up.

Do NOT merge yet

Hand back to the review gate. After merge + a dig-store release (release-first) + pointer bump, dispatch the apt [3a] + dig-installer [3b] cutover lanes.

Refs #703

…dual-publish

Rename the primary CLI binary `digstore` -> `dig-store` to match the renamed
repo (rename epic #703), keeping the `digs` alias and ALL crate/package names
(`digstore-cli`/`digstore-core`/... unchanged — they are published/consumed).

- `[[bin]] name` `digstore` -> `dig-store`; the shared `digstore_cli::run()`
  entrypoint already self-reports its argv[0] program name, so `dig-store`
  reports `dig-store` and `digs` reports `digs` (verified).
- Release build (`build-binaries.yml`): DUAL-PUBLISH for one transition cycle —
  both the new `dig-store-*` and the legacy `digstore-*` bare binaries + apt
  tarballs, so apt.dig.net + dig-installer stay green until they cut over. The
  apt tarball ships a `digstore` -> `dig-store` compat symlink at its root. The
  `digs` asset name is derived INDEPENDENTLY (the old `${DIGS_BIN/digstore/digs}`
  substring trick is broken after the rename — `dig-store` has no `digs`
  substring), guarded by a new shape test.
- Self-updater (`update.rs`): prefer the `dig-store` stem over the legacy
  `digstore`/`digs` alias, and extract the real `dig-store` file from the tarball
  (skipping the compat symlink), with a `digstore` fallback for older releases.
- `release.yml` / `publish-binary.yml`: build + upload the `dig-store` binary;
  the dighub S3 hub-worker layout (`digstore/<ver>/digstore`) is UNCHANGED (it is
  the compile-worker's contract, a separate consumer not cut over here).
- `action.yml`: call `dig-store` at runtime; repo -> `DIG-Network/dig-store`.
- crate `repository=` metadata (`digstore-core`, `dig-client-wasm`) -> dig-store.
- SPEC.md / README / runbook / issue templates: binary/product/repo-URL refs ->
  dig-store; `digs` alias invocations and historical CHANGELOG untouched.

Version: MINOR (0.13.5 -> 0.14.0) — user-facing binary rename that stays
backwards-compatible via the transitional dual-publish + compat symlink + the
`digs` alias, so no consumer breaks.

Refs #703

Co-Authored-By: Claude <noreply@anthropic.com>
@MichaelTaylor3d
MichaelTaylor3d merged commit 5a5f480 into main Jul 17, 2026
10 checks passed
@MichaelTaylor3d
MichaelTaylor3d deleted the refactor/rename-binary-dig-store branch July 17, 2026 00:52
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.

1 participant