Add option eval_substituter

When using the "build" or "sysbuild" jobset input types in conjunction
with a binary cache store, the evaluator needs to be able to fetch
store paths from the binary cache. Typical usage:

  store_uri = s3://nix-test-cache?secret-key=...
  eval_substituter = s3://nix-test-cache

Also, the public key of the binary cache must be added to
binary-cache-public-keys in nix.conf, otherwise the local nix-daemon
won't allow the store paths to be copied over.
This commit is contained in:
Eelco Dolstra 2017-11-20 16:12:20 +01:00
parent a0b1875a4f
commit 5986aae704
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE

View file

@ -75,6 +75,20 @@ sub attrsToSQL {
}
# Fetch a store path from 'eval_substituter' if not already present.
sub getPath {
my ($path) = @_;
return 1 if isValidPath($path);
my $substituter = $config->{eval_substituter};
system("nix", "copy", "--from", $substituter, "--", $path)
if defined $substituter;
return isValidPath($path);
}
sub fetchInputBuild {
my ($db, $project, $jobset, $name, $value) = @_;
@ -95,7 +109,7 @@ sub fetchInputBuild {
, where => \ attrsToSQL($attrs, "me.id") })->single;
}
return () if !defined $prevBuild || !isValidPath(getMainOutput($prevBuild)->path);
return () if !defined $prevBuild || !getPath(getMainOutput($prevBuild)->path);
#print STDERR "input `", $name, "': using build ", $prevBuild->id, "\n";
@ -133,7 +147,7 @@ sub fetchInputSystemBuild {
my @validBuilds = ();
foreach my $build (@latestBuilds) {
push(@validBuilds, $build) if isValidPath(getMainOutput($build)->path);
push(@validBuilds, $build) if getPath(getMainOutput($build)->path);
}
if (scalar(@validBuilds) == 0) {