gecko/tools/release/Bootstrap/Step/Build.pm

156 lines
4.4 KiB
Perl

#
# Build step. Calls tinderbox to produce en-US Firefox build.
#
package Bootstrap::Step::Build;
use Bootstrap::Step;
@ISA = ("Bootstrap::Step");
sub Execute {
my $this = shift;
my $config = new Bootstrap::Config();
my $buildDir = $config->Get(sysvar => 'buildDir');
my $productTag = $config->Get(var => 'productTag');
my $rc = $config->Get(var => 'rc');
my $buildPlatform = $config->Get(sysvar => 'buildPlatform');
my $logDir = $config->Get(var => 'logDir');
my $rcTag = $productTag . '_RC' . $rc;
my $lastBuilt = catfile($buildDir, $buildPlatform, 'last-built');
if (! unlink($lastBuilt)) {
$this->Log(msg => "Cannot unlink last-built file $lastBuilt: $!");
} else {
$this->Log(msg => "Unlinked $lastBuilt");
}
my $buildLog = catfile($logDir, 'build_' . $rcTag . '-build.log');
$this->Shell(
cmd => './build-seamonkey.pl',
cmdArgs => ['--once', '--mozconfig', 'mozconfig', '--depend',
'--config-cvsup-dir',
catfile($buildDir, 'tinderbox-configs')],
dir => $buildDir,
logFile => $buildLog,
timeout => 36000
);
}
sub Verify {
my $this = shift;
my $config = new Bootstrap::Config();
my $buildDir = $config->Get(sysvar => 'buildDir');
my $productTag = $config->Get(var => 'productTag');
my $rc = $config->Get(var => 'rc');
my $rcTag = $productTag.'_RC'.$rc;
my $logDir = $config->Get(var => 'logDir');
my $buildLog = catfile($logDir, 'build_' . $rcTag . '-build.log');
$this->CheckLog(
log => $buildLog,
notAllowed => 'tinderbox: status: failed',
);
my $logParser = new MozBuild::TinderLogParse(
logFile => $buildLog,
);
if (! defined($logParser->GetBuildID())) {
die("No buildID found in $buildLog");
}
if (! defined($logParser->GetPushDir())) {
die("No pushDir found in $buildLog");
}
}
sub Push {
my $this = shift;
my $config = new Bootstrap::Config();
my $productTag = $config->Get(var => 'productTag');
my $rc = $config->Get(var => 'rc');
my $logDir = $config->Get(var => 'logDir');
my $sshUser = $config->Get(var => 'sshUser');
my $sshServer = $config->Get(var => 'sshServer');
my $rcTag = $productTag . '_RC' . $rc;
my $buildLog = catfile($logDir, 'build_' . $rcTag . '-build.log');
my $pushLog = catfile($logDir, 'build_' . $rcTag . '-push.log');
my $logParser = new MozBuild::TinderLogParse(
logFile => $buildLog,
);
my $pushDir = $logParser->GetPushDir();
if (! defined($pushDir)) {
die("No pushDir found in $buildLog");
}
$pushDir =~ s!^http://ftp.mozilla.org/pub/mozilla.org!/home/ftp/pub!;
my $candidateDir = $config->GetFtpCandidateDir(bitsUnsigned => 1);
my $osFileMatch = $config->SystemInfo(var => 'osname');
if ($osFileMatch eq 'win32') {
$osFileMatch = 'win';
} elsif ($osFileMatch eq 'macosx') {
$osFileMatch = 'mac';
}
$this->Shell(
cmd => 'ssh',
cmdArgs => ['-2', '-l', $sshUser, $sshServer,
'mkdir -p ' . $candidateDir],
logFile => $pushLog,
);
$this->Shell(
cmd => 'ssh',
cmdArgs => ['-2', '-l', $sshUser, $sshServer,
'rsync', '-av',
'--include=*' . $osFileMatch . '*',
'--exclude=*',
$pushDir,
$candidateDir],
logFile => $pushLog,
);
}
sub Announce {
my $this = shift;
my $config = new Bootstrap::Config();
my $product = $config->Get(var => 'product');
my $productTag = $config->Get(var => 'productTag');
my $version = $config->Get(var => 'version');
my $rc = $config->Get(var => 'rc');
my $logDir = $config->Get(var => 'logDir');
my $rcTag = $productTag . '_RC' . $rc;
my $buildLog = catfile($logDir, 'build_' . $rcTag . '-build.log');
my $logParser = new MozBuild::TinderLogParse(
logFile => $buildLog,
);
my $buildID = $logParser->GetBuildID();
my $pushDir = $logParser->GetPushDir();
if (! defined($buildID)) {
die("No buildID found in $buildLog");
}
if (! defined($pushDir)) {
die("No pushDir found in $buildLog");
}
$this->SendAnnouncement(
subject => "$product $version build step finished",
message => "$product $version en-US build was copied to the candidates dir.\nBuild ID is $buildID\nPush Dir was $pushDir",
);
}
1;