forked from lix-project/hydra
* Inputs of type "build" must now be declared explicitly.
This commit is contained in:
parent
8c58448afc
commit
a74bfdf533
|
@ -175,7 +175,8 @@ sub updateProject {
|
||||||
my $inputType = trim $c->request->params->{"jobset-$baseName-input-$baseName2-type"};
|
my $inputType = trim $c->request->params->{"jobset-$baseName-input-$baseName2-type"};
|
||||||
error($c, "Invalid input type: $inputType") unless
|
error($c, "Invalid input type: $inputType") unless
|
||||||
$inputType eq "svn" || $inputType eq "cvs" || $inputType eq "tarball" ||
|
$inputType eq "svn" || $inputType eq "cvs" || $inputType eq "tarball" ||
|
||||||
$inputType eq "string" || $inputType eq "path" || $inputType eq "boolean";
|
$inputType eq "string" || $inputType eq "path" || $inputType eq "boolean" ||
|
||||||
|
$inputType eq "build";
|
||||||
|
|
||||||
$inputNames{$inputName} = 1;
|
$inputNames{$inputName} = 1;
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ sub getStorePathHash {
|
||||||
|
|
||||||
|
|
||||||
sub fetchInputAlt {
|
sub fetchInputAlt {
|
||||||
my ($input, $alt) = @_;
|
my ($project, $jobset, $input, $alt) = @_;
|
||||||
my $type = $input->type;
|
my $type = $input->type;
|
||||||
|
|
||||||
if ($type eq "path") {
|
if ($type eq "path") {
|
||||||
|
@ -151,6 +151,33 @@ sub fetchInputAlt {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
elsif ($type eq "build") {
|
||||||
|
my $jobName = $alt->value or die;
|
||||||
|
|
||||||
|
# Pick the most recent successful build of the specified job.
|
||||||
|
(my $prevBuild) = $db->resultset('Builds')->search(
|
||||||
|
{finished => 1, project => $project->name, jobset => $jobset->name, attrname => $jobName, buildStatus => 0},
|
||||||
|
{join => 'resultInfo', order_by => "timestamp DESC", rows => 1});
|
||||||
|
|
||||||
|
if (!defined $prevBuild || !isValidPath($prevBuild->outpath)) {
|
||||||
|
print STDERR "no previous build available for `$jobName'";
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $pkgNameRE = "(?:(?:[A-Za-z0-9]|(?:-[^0-9]))+)";
|
||||||
|
my $versionRE = "(?:[A-Za-z0-9\.\-]+)";
|
||||||
|
|
||||||
|
my $relName = ($prevBuild->resultInfo->releasename or $prevBuild->nixname);
|
||||||
|
my $version = $2 if $relName =~ /^($pkgNameRE)-($versionRE)$/;
|
||||||
|
|
||||||
|
return
|
||||||
|
{ type => "build"
|
||||||
|
, storePath => $prevBuild->outpath
|
||||||
|
, id => $prevBuild->id
|
||||||
|
, version => $version
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
elsif ($type eq "string") {
|
elsif ($type eq "string") {
|
||||||
die unless defined $alt->value;
|
die unless defined $alt->value;
|
||||||
return {type => $type, value => $alt->value};
|
return {type => $type, value => $alt->value};
|
||||||
|
@ -168,10 +195,11 @@ sub fetchInputAlt {
|
||||||
|
|
||||||
|
|
||||||
sub fetchInputs {
|
sub fetchInputs {
|
||||||
my ($jobset, $inputInfo) = @_;
|
my ($project, $jobset, $inputInfo) = @_;
|
||||||
foreach my $input ($jobset->jobsetinputs->all) {
|
foreach my $input ($jobset->jobsetinputs->all) {
|
||||||
foreach my $alt ($input->jobsetinputalts->all) {
|
foreach my $alt ($input->jobsetinputalts->all) {
|
||||||
push @{$$inputInfo{$input->name}}, fetchInputAlt($input, $alt);
|
my $info = fetchInputAlt($project, $jobset, $input, $alt);
|
||||||
|
push @{$$inputInfo{$input->name}}, $info if defined $info;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -267,10 +295,11 @@ sub inputsToArgs {
|
||||||
when ("boolean") {
|
when ("boolean") {
|
||||||
push @res, "--arg", $input, $alt->{value};
|
push @res, "--arg", $input, $alt->{value};
|
||||||
}
|
}
|
||||||
when (["svn", "path"]) {
|
when (["svn", "path", "build"]) {
|
||||||
push @res, "--arg", $input, (
|
push @res, "--arg", $input, (
|
||||||
"{ outPath = builtins.storePath " . $alt->{storePath} . "" .
|
"{ outPath = builtins.storePath " . $alt->{storePath} . "" .
|
||||||
"; rev = \"" . $alt->{revision} . "\"" .
|
(defined $alt->{revision} ? "; rev = \"" . $alt->{revision} . "\"" : "") .
|
||||||
|
(defined $alt->{version} ? "; version = \"" . $alt->{version} . "\"" : "") .
|
||||||
";}"
|
";}"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -292,7 +321,7 @@ sub checkJobSet {
|
||||||
});
|
});
|
||||||
|
|
||||||
# Fetch all values for all inputs.
|
# Fetch all values for all inputs.
|
||||||
fetchInputs($jobset, $inputInfo);
|
fetchInputs($project, $jobset, $inputInfo);
|
||||||
|
|
||||||
# Evaluate the job expression.
|
# Evaluate the job expression.
|
||||||
my $nixExprPath = $inputInfo->{$jobset->nixexprinput}->[0]->{storePath}
|
my $nixExprPath = $inputInfo->{$jobset->nixexprinput}->[0]->{storePath}
|
||||||
|
|
Loading…
Reference in a new issue