Skip to content

Commit

Permalink
nix upgrade-nix: make the source URL an option
Browse files Browse the repository at this point in the history
This new option enables organizations to more easily manage their Nix
fleet's deployment, and ensure a consistent and planned rollout of Nix
upgrades.
  • Loading branch information
grahamc committed Nov 10, 2023
1 parent 458e511 commit fd5a4a8
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 6 deletions.
10 changes: 10 additions & 0 deletions src/libstore/globals.hh
Original file line number Diff line number Diff line change
Expand Up @@ -1084,6 +1084,16 @@ public:
true, // document default
Xp::ConfigurableImpureEnv
};

Setting<std::string> upgradeNixStorePathUrl{
this,
"https://github.com/NixOS/nixpkgs/raw/master/nixos/modules/installer/tools/nix-fallback-paths.nix",
"upgrade-nix-store-path-url",
R"(
Used by `nix upgrade-nix`, the URL of the file that contains the
store paths of the latest Nix release.
)"
};
};


Expand Down
7 changes: 3 additions & 4 deletions src/nix/upgrade-nix.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ using namespace nix;
struct CmdUpgradeNix : MixDryRun, StoreCommand
{
Path profileDir;
std::string storePathsUrl = "https://github.com/NixOS/nixpkgs/raw/master/nixos/modules/installer/tools/nix-fallback-paths.nix";

CmdUpgradeNix()
{
Expand All @@ -30,7 +29,7 @@ struct CmdUpgradeNix : MixDryRun, StoreCommand
.longName = "nix-store-paths-url",
.description = "The URL of the file that contains the store paths of the latest Nix release.",
.labels = {"url"},
.handler = {&storePathsUrl}
.handler = {&(std::string&) settings.upgradeNixStorePathUrl}
});
}

Expand All @@ -44,7 +43,7 @@ struct CmdUpgradeNix : MixDryRun, StoreCommand

std::string description() override
{
return "upgrade Nix to the stable version declared in Nixpkgs";
return "upgrade Nix to the latest stable version";
}

std::string doc() override
Expand Down Expand Up @@ -145,7 +144,7 @@ struct CmdUpgradeNix : MixDryRun, StoreCommand
Activity act(*logger, lvlInfo, actUnknown, "querying latest Nix version");

// FIXME: use nixos.org?
auto req = FileTransferRequest(storePathsUrl);
auto req = FileTransferRequest((std::string&) settings.upgradeNixStorePathUrl);
auto res = getFileTransfer()->download(req);

auto state = std::make_unique<EvalState>(SearchPath{}, store);
Expand Down
6 changes: 4 additions & 2 deletions src/nix/upgrade-nix.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ R""(

# Description

This command upgrades Nix to the stable version declared in Nixpkgs.
This stable version is defined in [nix-fallback-paths.nix](https://github.com/NixOS/nixpkgs/raw/master/nixos/modules/installer/tools/nix-fallback-paths.nix)
This command upgrades Nix to the stable version.

By default, the latest stable version is defined by Nixpkgs, in
[nix-fallback-paths.nix](https://github.com/NixOS/nixpkgs/raw/master/nixos/modules/installer/tools/nix-fallback-paths.nix)
and updated manually. It may not always be the latest tagged release.

By default, it locates the directory containing the `nix` binary in the `$PATH`
Expand Down

0 comments on commit fd5a4a8

Please sign in to comment.