Skip to content

Commit e41a9d5

Browse files
sigmaclaude
andcommitted
fix: pin toolchain versions to specific constituent package versions
Toolchain meta-packages now use data.json to explicitly pin constituent package versions instead of following .default, making toolchain versions immutable. Introduces v2 with post-bump versions and keeps v1 at pre-bump. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 52d3037 commit e41a9d5

12 files changed

Lines changed: 189 additions & 63 deletions

File tree

packages/buck2-toolchain/data.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"_meta": { "default": "2" },
3+
"1": {
4+
"buck2": "2025-12-01",
5+
"reindeer": "2026.03.09.00"
6+
},
7+
"2": {
8+
"buck2": "2026-03-15",
9+
"reindeer": "2026.03.09.00"
10+
}
11+
}
Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
{ pkgs, lib, toolbox, toolboxLib }:
2-
{
3-
versions = {
4-
"1" = pkgs.symlinkJoin {
5-
name = "buck2-toolchain-1";
6-
paths = [
7-
toolbox.buck2.versions.${toolbox.buck2.default}
8-
toolbox.reindeer.versions.${toolbox.reindeer.default}
9-
];
10-
};
2+
3+
let
4+
inherit (toolboxLib.readData ./data.json) meta versions;
5+
6+
components = {
7+
buck2 = toolbox.buck2;
8+
reindeer = toolbox.reindeer;
119
};
12-
default = "1";
10+
11+
mkToolchain = version: versionData:
12+
pkgs.symlinkJoin {
13+
name = "buck2-toolchain-${version}";
14+
paths = lib.mapAttrsToList (name: ver:
15+
components.${name}.versions.${ver}
16+
) (lib.filterAttrs (n: _: builtins.hasAttr n components) versionData);
17+
};
18+
in
19+
{
20+
versions = builtins.mapAttrs mkToolchain versions;
21+
default = meta.default;
1322
}

packages/go-toolchain/data.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"_meta": { "default": "2" },
3+
"1": {
4+
"go": "1.26.0",
5+
"golangci-lint": "2.11.3",
6+
"gopls": "0.21.1"
7+
},
8+
"2": {
9+
"go": "1.26.1",
10+
"golangci-lint": "2.11.3",
11+
"gopls": "0.21.1"
12+
}
13+
}

packages/go-toolchain/default.nix

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
{ pkgs, lib, toolbox, toolboxLib }:
2-
{
3-
versions = {
4-
"1" = pkgs.symlinkJoin {
5-
name = "go-toolchain-1";
6-
paths = [
7-
toolbox.go.versions.${toolbox.go.default}
8-
toolbox.golangci-lint.versions.${toolbox.golangci-lint.default}
9-
toolbox.gopls.versions.${toolbox.gopls.default}
10-
];
11-
};
2+
3+
let
4+
inherit (toolboxLib.readData ./data.json) meta versions;
5+
6+
components = {
7+
go = toolbox.go;
8+
golangci-lint = toolbox.golangci-lint;
9+
gopls = toolbox.gopls;
1210
};
13-
default = "1";
11+
12+
mkToolchain = version: versionData:
13+
pkgs.symlinkJoin {
14+
name = "go-toolchain-${version}";
15+
paths = lib.mapAttrsToList (name: ver:
16+
components.${name}.versions.${ver}
17+
) (lib.filterAttrs (n: _: builtins.hasAttr n components) versionData);
18+
};
19+
in
20+
{
21+
versions = builtins.mapAttrs mkToolchain versions;
22+
default = meta.default;
1423
}

packages/js-toolchain/data.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"_meta": { "default": "2" },
3+
"1": {
4+
"nodejs": "24.14.0",
5+
"biome": "2.4.6"
6+
},
7+
"2": {
8+
"nodejs": "24.14.0",
9+
"biome": "2.4.7"
10+
}
11+
}

packages/js-toolchain/default.nix

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
{ pkgs, lib, toolbox, toolboxLib }:
2-
{
3-
versions = {
4-
"1" = pkgs.symlinkJoin {
5-
name = "js-toolchain-1";
6-
paths = [
7-
toolbox.nodejs.versions.${toolbox.nodejs.default}
8-
toolbox.biome.versions.${toolbox.biome.default}
9-
];
10-
};
2+
3+
let
4+
inherit (toolboxLib.readData ./data.json) meta versions;
5+
6+
components = {
7+
nodejs = toolbox.nodejs;
8+
biome = toolbox.biome;
119
};
12-
default = "1";
10+
11+
mkToolchain = version: versionData:
12+
pkgs.symlinkJoin {
13+
name = "js-toolchain-${version}";
14+
paths = lib.mapAttrsToList (name: ver:
15+
components.${name}.versions.${ver}
16+
) (lib.filterAttrs (n: _: builtins.hasAttr n components) versionData);
17+
};
18+
in
19+
{
20+
versions = builtins.mapAttrs mkToolchain versions;
21+
default = meta.default;
1322
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"_meta": { "default": "2" },
3+
"1": {
4+
"python": "3.13.12",
5+
"uv": "0.10.9",
6+
"ruff": "0.15.5"
7+
},
8+
"2": {
9+
"python": "3.13.12",
10+
"uv": "0.10.10",
11+
"ruff": "0.15.6"
12+
}
13+
}
Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
{ pkgs, lib, toolbox, toolboxLib }:
2-
{
3-
versions = {
4-
"1" = pkgs.symlinkJoin {
5-
name = "python-toolchain-1";
6-
paths = [
7-
toolbox.python.versions.${toolbox.python.default}
8-
toolbox.uv.versions.${toolbox.uv.default}
9-
toolbox.ruff.versions.${toolbox.ruff.default}
10-
];
11-
};
2+
3+
let
4+
inherit (toolboxLib.readData ./data.json) meta versions;
5+
6+
components = {
7+
python = toolbox.python;
8+
uv = toolbox.uv;
9+
ruff = toolbox.ruff;
1210
};
13-
default = "1";
11+
12+
mkToolchain = version: versionData:
13+
pkgs.symlinkJoin {
14+
name = "python-toolchain-${version}";
15+
paths = lib.mapAttrsToList (name: ver:
16+
components.${name}.versions.${ver}
17+
) (lib.filterAttrs (n: _: builtins.hasAttr n components) versionData);
18+
};
19+
in
20+
{
21+
versions = builtins.mapAttrs mkToolchain versions;
22+
default = meta.default;
1423
}

packages/rust-toolchain/data.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"_meta": { "default": "2" },
3+
"1": {
4+
"rust": "1.92.0",
5+
"rust-analyzer": "2026-03-09",
6+
"cargo-edit": "0.13.9"
7+
},
8+
"2": {
9+
"rust": "1.94.0",
10+
"rust-analyzer": "2026-03-09",
11+
"cargo-edit": "0.13.9"
12+
}
13+
}
Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
{ pkgs, lib, toolbox, toolboxLib }:
2-
{
3-
versions = {
4-
"1" = pkgs.symlinkJoin {
5-
name = "rust-toolchain-1";
6-
paths = [
7-
toolbox.rust.versions.${toolbox.rust.default}
8-
toolbox.rust-analyzer.versions.${toolbox.rust-analyzer.default}
9-
toolbox.cargo-edit.versions.${toolbox.cargo-edit.default}
10-
];
11-
};
2+
3+
let
4+
inherit (toolboxLib.readData ./data.json) meta versions;
5+
6+
components = {
7+
rust = toolbox.rust;
8+
rust-analyzer = toolbox.rust-analyzer;
9+
cargo-edit = toolbox.cargo-edit;
1210
};
13-
default = "1";
11+
12+
mkToolchain = version: versionData:
13+
pkgs.symlinkJoin {
14+
name = "rust-toolchain-${version}";
15+
paths = lib.mapAttrsToList (name: ver:
16+
components.${name}.versions.${ver}
17+
) (lib.filterAttrs (n: _: builtins.hasAttr n components) versionData);
18+
};
19+
in
20+
{
21+
versions = builtins.mapAttrs mkToolchain versions;
22+
default = meta.default;
1423
}

0 commit comments

Comments
 (0)