1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-11 13:06:01 +01:00

Merge pull request #141 from DeterminateSystems/external-builder-stdin

Add an `external-builders` experimental feature
This commit is contained in:
Eelco Dolstra 2025-07-14 22:42:21 +02:00 committed by GitHub
commit 35a8e9c71e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 33 additions and 3 deletions

View file

@ -1309,7 +1309,25 @@ public:
"tmpDirInSandbox": "/build", "tmpDirInSandbox": "/build",
"topTmpDir": "/private/tmp/nix-build-hello-2.12.2.drv-0" "topTmpDir": "/private/tmp/nix-build-hello-2.12.2.drv-0"
} }
)" )",
{}, // aliases
true, // document default
// NOTE(cole-h): even though we can make the experimental feature required here, the errors
// are not as good (it just becomes a warning if you try to use this setting without the
// experimental feature)
//
// With this commented out:
//
// error: experimental Nix feature 'external-builders' is disabled; add '--extra-experimental-features external-builders' to enable it
//
// With this uncommented:
//
// warning: Ignoring setting 'external-builders' because experimental feature 'external-builders' is not enabled
// error: Cannot build '/nix/store/vwsp4qd8a62jqa36p26d15hin4xnj949-opentofu-1.10.2.drv'.
// Reason: required system or feature not available
// Required system: 'aarch64-linux' with features {}
// Current system: 'aarch64-darwin' with features {apple-virt, benchmark, big-parallel, nixos-test}
// Xp::ExternalBuilders
}; };
}; };

View file

@ -12,6 +12,7 @@ struct ExternalDerivationBuilder : DerivationBuilderImpl
: DerivationBuilderImpl(store, std::move(miscMethods), std::move(params)) : DerivationBuilderImpl(store, std::move(miscMethods), std::move(params))
, externalBuilder(std::move(externalBuilder)) , externalBuilder(std::move(externalBuilder))
{ {
experimentalFeatureSettings.require(Xp::ExternalBuilders);
} }
static std::unique_ptr<ExternalDerivationBuilder> newIfSupported( static std::unique_ptr<ExternalDerivationBuilder> newIfSupported(
@ -83,8 +84,10 @@ struct ExternalDerivationBuilder : DerivationBuilderImpl
json.emplace("realStoreDir", getLocalStore(store).config->realStoreDir.get()); json.emplace("realStoreDir", getLocalStore(store).config->realStoreDir.get());
json.emplace("system", drv.platform); json.emplace("system", drv.platform);
// FIXME: maybe write this JSON into the builder's stdin instead....? // TODO(cole-h): writing this to stdin is too much effort right now, if we want to revisit
auto jsonFile = topTmpDir + "/build.json"; // that, see this comment by Eelco about how to make it not suck:
// https://github.com/DeterminateSystems/nix-src/pull/141#discussion_r2205493257
auto jsonFile = std::filesystem::path{topTmpDir} / "build.json";
writeFile(jsonFile, json.dump()); writeFile(jsonFile, json.dump());
pid = startProcess([&]() { pid = startProcess([&]() {

View file

@ -288,6 +288,14 @@ constexpr std::array<ExperimentalFeatureDetails, numXpFeatures> xpFeatureDetails
)", )",
.trackingUrl = "https://github.com/NixOS/nix/milestone/55", .trackingUrl = "https://github.com/NixOS/nix/milestone/55",
}, },
{
.tag = Xp::ExternalBuilders,
.name = "external-builders",
.description = R"(
Enables support for external builders / sandbox providers.
)",
.trackingUrl = "",
},
{ {
.tag = Xp::BLAKE3Hashes, .tag = Xp::BLAKE3Hashes,
.name = "blake3-hashes", .name = "blake3-hashes",

View file

@ -35,6 +35,7 @@ enum struct ExperimentalFeature
MountedSSHStore, MountedSSHStore,
VerifiedFetches, VerifiedFetches,
PipeOperators, PipeOperators,
ExternalBuilders,
BLAKE3Hashes, BLAKE3Hashes,
}; };