2021-12-15 01:25:02 +00:00
|
|
|
use warnings;
|
|
|
|
use strict;
|
|
|
|
|
|
|
|
package CliRunners;
|
|
|
|
our @ISA = qw(Exporter);
|
|
|
|
our @EXPORT = qw(
|
2022-01-10 21:47:04 +00:00
|
|
|
captureStdoutStderr
|
2022-01-21 14:23:48 +00:00
|
|
|
captureStdoutStderrWithStdin
|
2022-01-10 21:47:04 +00:00
|
|
|
evalFails
|
|
|
|
evalSucceeds
|
|
|
|
runBuild
|
|
|
|
sendNotifications
|
|
|
|
);
|
2021-12-15 01:25:02 +00:00
|
|
|
|
|
|
|
|
|
|
|
sub captureStdoutStderr {
|
|
|
|
# "Lazy"-load Hydra::Helper::Nix to avoid the compile-time
|
|
|
|
# import of Hydra::Model::DB. Early loading of the DB class
|
|
|
|
# causes fixation of the DSN, and we need to fixate it after
|
|
|
|
# the temporary DB is setup.
|
|
|
|
require Hydra::Helper::Nix;
|
|
|
|
return Hydra::Helper::Nix::captureStdoutStderr(@_)
|
|
|
|
}
|
|
|
|
|
2022-01-21 14:23:48 +00:00
|
|
|
sub captureStdoutStderrWithStdin {
|
|
|
|
# "Lazy"-load Hydra::Helper::Nix to avoid the compile-time
|
|
|
|
# import of Hydra::Model::DB. Early loading of the DB class
|
|
|
|
# causes fixation of the DSN, and we need to fixate it after
|
|
|
|
# the temporary DB is setup.
|
|
|
|
require Hydra::Helper::Nix;
|
|
|
|
return Hydra::Helper::Nix::captureStdoutStderrWithStdin(@_)
|
|
|
|
}
|
|
|
|
|
2021-12-15 01:25:02 +00:00
|
|
|
sub evalSucceeds {
|
|
|
|
my ($jobset) = @_;
|
|
|
|
my ($res, $stdout, $stderr) = captureStdoutStderr(60, ("hydra-eval-jobset", $jobset->project->name, $jobset->name));
|
|
|
|
$jobset->discard_changes; # refresh from DB
|
2022-01-10 21:46:19 +00:00
|
|
|
if ($res) {
|
|
|
|
chomp $stdout; chomp $stderr;
|
2022-01-21 20:17:47 +00:00
|
|
|
utf8::decode($stdout) or die "Invalid unicode in stdout.";
|
|
|
|
utf8::decode($stderr) or die "Invalid unicode in stderr.";
|
2022-01-11 18:10:43 +00:00
|
|
|
print STDERR "Evaluation unexpectedly failed for jobset ".$jobset->project->name.":".$jobset->name.": \n".$jobset->errormsg."\n" if $jobset->errormsg;
|
2022-01-10 21:46:19 +00:00
|
|
|
print STDERR "STDOUT: $stdout\n" if $stdout ne "";
|
|
|
|
print STDERR "STDERR: $stderr\n" if $stderr ne "";
|
|
|
|
}
|
2021-12-15 01:25:02 +00:00
|
|
|
return !$res;
|
|
|
|
}
|
|
|
|
|
2022-01-10 21:47:04 +00:00
|
|
|
sub evalFails {
|
|
|
|
my ($jobset) = @_;
|
|
|
|
my ($res, $stdout, $stderr) = captureStdoutStderr(60, ("hydra-eval-jobset", $jobset->project->name, $jobset->name));
|
|
|
|
$jobset->discard_changes; # refresh from DB
|
|
|
|
if (!$res) {
|
|
|
|
chomp $stdout; chomp $stderr;
|
2022-01-21 20:17:47 +00:00
|
|
|
utf8::decode($stdout) or die "Invalid unicode in stdout.";
|
|
|
|
utf8::decode($stderr) or die "Invalid unicode in stderr.";
|
2022-01-11 18:10:43 +00:00
|
|
|
print STDERR "Evaluation unexpectedly succeeded for jobset ".$jobset->project->name.":".$jobset->name.": \n".$jobset->errormsg."\n" if $jobset->errormsg;
|
2022-01-10 21:47:04 +00:00
|
|
|
print STDERR "STDOUT: $stdout\n" if $stdout ne "";
|
|
|
|
print STDERR "STDERR: $stderr\n" if $stderr ne "";
|
|
|
|
}
|
|
|
|
return !!$res;
|
|
|
|
}
|
|
|
|
|
2021-12-15 01:25:02 +00:00
|
|
|
sub runBuild {
|
|
|
|
my ($build) = @_;
|
|
|
|
my ($res, $stdout, $stderr) = captureStdoutStderr(60, ("hydra-queue-runner", "-vvvv", "--build-one", $build->id));
|
|
|
|
if ($res) {
|
2022-01-21 20:17:47 +00:00
|
|
|
utf8::decode($stdout) or die "Invalid unicode in stdout.";
|
|
|
|
utf8::decode($stderr) or die "Invalid unicode in stderr.";
|
2021-12-15 01:25:02 +00:00
|
|
|
print STDERR "Queue runner stdout: $stdout\n" if $stdout ne "";
|
|
|
|
print STDERR "Queue runner stderr: $stderr\n" if $stderr ne "";
|
|
|
|
}
|
|
|
|
return !$res;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub sendNotifications() {
|
|
|
|
my ($res, $stdout, $stderr) = captureStdoutStderr(60, ("hydra-notify", "--queued-only"));
|
|
|
|
if ($res) {
|
2022-01-21 20:17:47 +00:00
|
|
|
utf8::decode($stdout) or die "Invalid unicode in stdout.";
|
|
|
|
utf8::decode($stderr) or die "Invalid unicode in stderr.";
|
2021-12-15 01:25:02 +00:00
|
|
|
print STDERR "hydra notify stdout: $stdout\n" if $stdout ne "";
|
|
|
|
print STDERR "hydra notify stderr: $stderr\n" if $stderr ne "";
|
|
|
|
}
|
|
|
|
return !$res;
|
|
|
|
}
|
|
|
|
|
|
|
|
1;
|