update-scripts/version-info: get channel status for supported versions

Fetch channel info from NixOS/infra, the canonical source of truth.

(cherry picked from commit 9328f4437d)
This commit is contained in:
Matt Sturgeon 2025-05-25 04:36:42 +01:00 committed by nix-infra-bot
parent dfbab369c4
commit 8917e2e8ec
3 changed files with 99 additions and 0 deletions

View file

@ -2,19 +2,41 @@
lib, lib,
callPackage, callPackage,
writeShellApplication, writeShellApplication,
stdenv,
}: }:
let let
mainInfo = callPackage ./main.nix { }; mainInfo = callPackage ./main.nix { };
channelsURL = "https://raw.githubusercontent.com/NixOS/infra/refs/heads/main/channels.nix";
in in
writeShellApplication { writeShellApplication {
name = "version-info"; name = "version-info";
runtimeEnv = {
NIX_CONFIG = ''
experimental-features = nix-command flakes pipe-operators
'';
};
text = '' text = ''
# Download channel info from NixOS/infra
curl ${channelsURL} | nix eval --file - --json > channels.json
# Use channels.nix to build channels.toml
nix build --impure \
--inputs-from ${toString ../..} \
--file ${./supported-versions.nix} \
--argstr system ${stdenv.hostPlatform.system} \
--arg-from-file channelsJSON channels.json \
--out-link channels.toml
( (
echo "# DO NOT MODIFY!" echo "# DO NOT MODIFY!"
echo "# This file was generated by ${ echo "# This file was generated by ${
lib.strings.removePrefix (toString ../.. + "/") (toString ./default.nix) lib.strings.removePrefix (toString ../.. + "/") (toString ./default.nix)
}" }"
cat ${mainInfo} cat ${mainInfo}
echo
cat channels.toml
) > version-info.toml ) > version-info.toml
''; '';
} }

View file

@ -0,0 +1,62 @@
{
system ? builtins.currentSystem,
pkgs ? import <nixpkgs> { inherit system; },
lib ? import <nixpkgs/lib>,
channelsJSON ? throw "Neither `channels` or `channelsJSON` provided",
channels ? builtins.fromJSON channelsJSON,
}:
let
# Pick out supported stable channels
supported = [
"beta"
"stable"
"deprecated"
];
stable_versions =
channels.channels
|> builtins.mapAttrs (channel: entry: entry // { inherit channel; })
|> builtins.attrValues
|> builtins.filter (entry: entry.variant or null == "primary")
|> builtins.filter (entry: builtins.elem entry.status supported)
|> builtins.map (entry: {
name = entry.channel |> builtins.match "nixos-(.+)" |> builtins.head;
value = {
inherit (entry) channel status;
# Currently, Nixvim stable branches match NixOS channel names
branch = entry.channel;
};
})
|> builtins.listToAttrs;
newest_stable =
stable_versions |> builtins.attrNames |> builtins.sort (a: b: a > b) |> builtins.head;
bumpYear = y: toString (lib.toIntBase10 y + 1);
bumpMonth =
m:
assert m == "05" || m == "11";
if m == "05" then "11" else "05";
unstable =
newest_stable
|> builtins.match "(.+)[.](.+)"
|> (v: {
y = builtins.elemAt v 0;
m = builtins.elemAt v 1;
})
|> (v: {
y = if v.m == "11" then bumpYear v.y else v.y;
m = bumpMonth v.m;
})
|> (v: "${v.y}.${v.m}");
in
pkgs.writers.writeTOML "channels.toml" {
versions = stable_versions // {
${unstable} = {
branch = "main";
channel = "nixpkgs-unstable";
status = "rolling";
};
};
}

View file

@ -3,3 +3,18 @@
nixpkgs_rev = "7282cb574e0607e65224d33be8241eae7cfe0979" nixpkgs_rev = "7282cb574e0607e65224d33be8241eae7cfe0979"
release = "25.05" release = "25.05"
unstable = false unstable = false
[versions."24.11"]
branch = "nixos-24.11"
channel = "nixos-24.11"
status = "deprecated"
[versions."25.05"]
branch = "nixos-25.05"
channel = "nixos-25.05"
status = "stable"
[versions."25.11"]
branch = "main"
channel = "nixpkgs-unstable"
status = "rolling"