Fix store-copied package updaters and update linear-cli to 2.5.0 - #2888
Merged
Conversation
|
Tick the box to add this pull request to the merge queue (same as
|
cameronraysmith
force-pushed
the
fm/vx-updater-store-path-resolution
branch
from
September 1, 2026 04:40
15efb95 to
d79e20f
Compare
cameronraysmith
force-pushed
the
fm/vx-updater-store-path-resolution
branch
from
September 1, 2026 05:37
d79e20f to
bd9a7ea
Compare
cameronraysmith
changed the base branch from
main
to
fm/vx-omp-direnv-autoload
September 1, 2026 05:37
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.
Summary
Update scripts exposed as flake apps are copied into the Nix store before execution. Scripts that derive their package directory from
$0orBASH_SOURCEconsequently resolve/nix/store/...-update.shrather than the repository package directory, sopackage.nixcannot be read. The correct convention is to resolve the repository root withgit rev-parse --show-toplevel, then addresspkgs/by-name/<package>beneath that root.The affected scripts were:
pkgs/by-name/chrome-devtools-axi/update.shpkgs/by-name/dbt-fusion/update.shpkgs/by-name/gh-axi/update.shpkgs/by-name/hindsight/update.shpkgs/by-name/lavish-axi/update.shpkgs/by-name/linear-cli/update.shpkgs/by-name/quota-axi/update.shpkgs/by-name/tasks-axi/update.shpkgs/by-name/uncomment-bin/update.shpkgs/by-name/worktrunk-bin/update.shAll ten scripts now use repository-root-relative package paths. Updaters that newly invoke Git in the pure flake-app environment also declare Git as a runtime dependency.
nix run .#update-linear-clinow completes through the supported entry point and updates linear-cli from 2.0.0 to 2.5.0, including its source hash, two Darwin artifact hashes, and Linux source-build dependency hash.Linux dependency output
Nixbot build 118 exposed that the original updater refreshed three of the four fixed-output hashes and silently retained the 2.0.0
denoDeps.outputHash. Darwin did not detect the stale value because linear-cli installs upstream binaries on aarch64-darwin and x86_64-darwin; x86_64-linux is the only supported system that consumes the source-build dependency derivation.The vendored dependency output is platform-dependent in both 2.0.0 and 2.5.0. Deno retains the host-selected optional lefthook package:
lefthook-darwin-arm64on aarch64-darwin andlefthook-linux-x64on x86_64-linux. A forced 2.0.0 Linux build also produced a different hash from the retained Darwin-generated 2.0.0 value. Because only Linux consumesdenoDeps, the package needs one Linux-generated dependency hash rather than a per-system map.After the Linux hash matched, the remote builder exposed an absolute
deno_dir/node_compat_bin/nodeshim referencing the Deno store path. Nix rejects such a reference in fixed-output content. The dependency derivation now removes that regenerable, non-npm cache artifact before hashing; the cleaned output has no store references.The updater now replaces the dependency pin with a probe hash, builds the derivation explicitly as x86_64-linux through the configured magnetite fleet builder, extracts the produced digest, and fails if no digest is available. The cleaned 2.5.0 Linux hash was generated by rerunning
nix run .#update-linear-cli -- 2.5.0; a second run was idempotent. A pinned magnetite build completed the Linux package and its install check reportedlinear 2.5.0.Recurrence checks
The flake check in
modules/checks/hooks.nixscans everypkgs/by-name/*/update.sh, rejects package-path resolution from script identity, explains the repository-root convention, and verifies that scripts using Git declare it in the updater runtime. The check accepts the existing atomic updater as the working pattern. It also rejects packaged updaters that own anoutputHashwithout updating that hash, preventing another partial update from silently retaining a stale fixed-output pin.Related updater results
nix run .#update-hindsightcompletes and would update 0.9.1 to 0.9.2. Its generated package change was restored and is not part of this pull request.nix run .#update-worktrunk-bincompletes and would update 0.65.0 to 0.75.0. Its generated package change was restored and is not part of this pull request.Verification
nix eval --raw .#checks.aarch64-darwin.updater-repository-paths.drvPathnix build .#checks.aarch64-darwin.updater-repository-pathsshellcheck pkgs/by-name/linear-cli/update.shnix build --no-link --print-out-paths .#linear-clilinear 2.5.0linear 2.5.0bash -nfor all ten affected updater scriptsgit diff --check 4ff7508dff8d7d3959fc1eee4ee8afdfe78bbb06..HEAD15efb95c5;checks.x86_64-linux.package-linear-cliwasskipped_localbecause the pinned magnetite build had already populated the CI store, and all six home-manager plus five NixOS consumers succeeded.The full parallel check set was not run locally. Nixbot build 121 supplied the x86_64-linux integration result.