forked from lix-project/hydra
RunCommand: use helper functions to ensure filenames and paths are the same
Otherwise, it's possible someone updates the format in one place but not the others, leading to broken or incorrect functionality.
This commit is contained in:
parent
4a441b54ce
commit
5d3912962b
|
@ -140,7 +140,7 @@ sub view_log : Chained('buildChain') PathPart('log') {
|
||||||
sub view_runcommand_log : Chained('buildChain') PathPart('runcommand-log') {
|
sub view_runcommand_log : Chained('buildChain') PathPart('runcommand-log') {
|
||||||
my ($self, $c, $sha) = @_;
|
my ($self, $c, $sha) = @_;
|
||||||
|
|
||||||
$c->stash->{log_uri} = $c->uri_for($c->controller('Root')->action_for("runcommandlog"), $sha . "-" . $c->stash->{build}->id);
|
$c->stash->{log_uri} = $c->uri_for($c->controller('Root')->action_for("runcommandlog"), constructRunCommandLogFilename($sha, $c->stash->{build}->id));
|
||||||
$c->stash->{template} = 'runcommand-log.tt';
|
$c->stash->{template} = 'runcommand-log.tt';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ use base 'Hydra::Base::Controller::ListBuilds';
|
||||||
use Hydra::Helper::Nix;
|
use Hydra::Helper::Nix;
|
||||||
use Hydra::Helper::CatalystUtils;
|
use Hydra::Helper::CatalystUtils;
|
||||||
use Hydra::View::TT;
|
use Hydra::View::TT;
|
||||||
use Hydra::Model::DB;
|
|
||||||
use Nix::Store;
|
use Nix::Store;
|
||||||
use Nix::Config;
|
use Nix::Config;
|
||||||
use Encode;
|
use Encode;
|
||||||
|
@ -538,7 +537,7 @@ sub runcommandlog :Local :Args(1) {
|
||||||
|
|
||||||
die if defined $tail && $tail !~ /^[0-9]+$/;
|
die if defined $tail && $tail !~ /^[0-9]+$/;
|
||||||
|
|
||||||
my $logFile = Hydra::Model::DB::getHydraPath . "/runcommand-logs/" . substr($filename, 0, 2) . "/$filename";
|
my $logFile = constructRunCommandLogPath($filename);
|
||||||
if (-f $logFile) {
|
if (-f $logFile) {
|
||||||
serveLogFile($c, $logFile, $tail);
|
serveLogFile($c, $logFile, $tail);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -19,6 +19,8 @@ our @EXPORT = qw(
|
||||||
cancelBuilds
|
cancelBuilds
|
||||||
captureStdoutStderr
|
captureStdoutStderr
|
||||||
captureStdoutStderrWithStdin
|
captureStdoutStderrWithStdin
|
||||||
|
constructRunCommandLogFilename
|
||||||
|
constructRunCommandLogPath
|
||||||
findLog
|
findLog
|
||||||
gcRootFor
|
gcRootFor
|
||||||
getBaseUrl
|
getBaseUrl
|
||||||
|
@ -589,4 +591,20 @@ sub isLocalStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub constructRunCommandLogFilename {
|
||||||
|
my ($sha, $build_id) = @_;
|
||||||
|
my $filename = "$sha-$build_id";
|
||||||
|
return $filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub constructRunCommandLogPath {
|
||||||
|
my ($filename) = @_;
|
||||||
|
|
||||||
|
my $hydra_path = Hydra::Model::DB::getHydraPath;
|
||||||
|
my $bucket = substr($filename, 0, 2);
|
||||||
|
|
||||||
|
return "$hydra_path/runcommand-logs/$bucket/$filename";
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
|
@ -7,6 +7,8 @@ use experimental 'smartmatch';
|
||||||
use JSON::MaybeXS;
|
use JSON::MaybeXS;
|
||||||
use Digest::SHA1 qw(sha1_hex);
|
use Digest::SHA1 qw(sha1_hex);
|
||||||
use Hydra::Model::DB;
|
use Hydra::Model::DB;
|
||||||
|
use Hydra::Helper::Nix;
|
||||||
|
use File::Basename qw(dirname);
|
||||||
|
|
||||||
sub isEnabled {
|
sub isEnabled {
|
||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
|
@ -162,15 +164,15 @@ sub buildFinished {
|
||||||
|
|
||||||
$runlog->started();
|
$runlog->started();
|
||||||
|
|
||||||
# Prepare log collection
|
my $filename = constructRunCommandLogFilename(sha1_hex($command), $build->get_column('id'));
|
||||||
my $filename = sha1_hex($command) . "-" . $build->get_column('id');
|
my $logPath = constructRunCommandLogPath($filename);
|
||||||
my $dir = Hydra::Model::DB::getHydraPath . "/runcommand-logs/" . substr($filename, 0, 2);
|
my $dir = dirname($logPath);
|
||||||
my $logpath = "$dir/$filename";
|
|
||||||
mkdir($dir, oct(755));
|
mkdir($dir, oct(755));
|
||||||
# This creates the file with the correct permissions
|
|
||||||
open(my $f, '>', $logpath);
|
open(my $f, '>', $logPath);
|
||||||
close($f);
|
close($f);
|
||||||
chmod(oct(644), $logpath);
|
chmod(oct(644), $logPath);
|
||||||
|
|
||||||
# Run the command
|
# Run the command
|
||||||
system("$command 1>$logpath 2>&1") == 0
|
system("$command 1>$logpath 2>&1") == 0
|
||||||
|
|
Loading…
Reference in a new issue