Bug 421001, include xulrunner code in source tarballs for Firefox releases, r=rhelmer
[mozilla-1.9.git] / tools / release / Bootstrap / Step / Source.pm
blob531e2bdb49f5355402960add8467d97b58511974
2 # Source step. Creates a source tarball equivalent to what was used to
3 # build the binary release, in the Build step.
4 #
5 package Bootstrap::Step::Source;
6 use Bootstrap::Step;
7 use Bootstrap::Config;
8 use File::Copy qw(move);
9 use File::Find qw(find);
10 use MozBuild::Util qw(MkdirWithPath);
11 @ISA = ("Bootstrap::Step");
13 sub Execute {
14 my $this = shift;
16 my $config = new Bootstrap::Config();
17 my $product = $config->Get(var => 'product');
18 my $appName = $config->Get(var => 'appName');
19 my $productTag = $config->Get(var => 'productTag');
20 my $version = $config->GetVersion(longName => 0);
21 my $rc = $config->Get(var => 'rc');
22 my $logDir = $config->Get(sysvar => 'logDir');
23 my $sourceDir = $config->Get(var => 'sourceDir');
24 my $mozillaCvsroot = $config->Get(var => 'mozillaCvsroot');
26 # create staging area
27 my $versionedSourceDir = catfile($sourceDir, $product . '-' . $version,
28 'batch-source', 'rc' . $rc);
30 if (not -d $versionedSourceDir) {
31 MkdirWithPath(dir => $versionedSourceDir)
32 or die("Cannot create $versionedSourceDir: $!");
35 $this->CvsCo(cvsroot => $mozillaCvsroot,
36 tag => $productTag . '_RELEASE',
37 modules => ['mozilla/client.mk',
38 catfile('mozilla', $appName, 'config')],
39 workDir => $versionedSourceDir,
40 logFile => catfile($logDir, 'source.log')
43 $this->Shell(
44 cmd => 'make',
45 cmdArgs => ['-f', 'client.mk', 'checkout',
46 'MOZ_CO_PROJECT=' . $appName . ',xulrunner'],
47 dir => catfile($versionedSourceDir, 'mozilla'),
48 logFile => catfile($logDir, 'source.log'),
51 # change all CVS/Root files to anonymous CVSROOT
52 File::Find::find(\&CvsChrootCallback, catfile($versionedSourceDir,
53 'mozilla'));
55 # remove leftover mozconfig files
56 unlink(glob(catfile($versionedSourceDir, 'mozilla', '.mozconfig*')));
58 my $tarFile = $product . '-' . $version . '-' . 'source' . '.tar.bz2';
60 $this->Shell(
61 cmd => 'tar',
62 cmdArgs => ['-cjf', $tarFile, 'mozilla'],
63 dir => catfile($versionedSourceDir),
64 logFile => catfile($logDir, 'source.log'),
67 chmod(0644, glob("$versionedSourceDir/$tarFile"));
70 sub Verify {
71 my $this = shift;
73 my $config = new Bootstrap::Config();
74 my $logDir = $config->Get(sysvar => 'logDir');
76 my $logFile = catfile($logDir, 'source.log');
78 $this->CheckLog(
79 log => $logFile,
80 checkFor => '^checkout finish',
83 $this->CheckLog(
84 log => $logFile,
85 notAllowed => '^tar',
89 sub Push {
90 my $this = shift;
92 my $config = new Bootstrap::Config();
93 my $product = $config->Get(var => 'product');
94 my $version = $config->GetVersion(longName => 0);
95 my $rc = $config->Get(var => 'rc');
96 my $logDir = $config->Get(sysvar => 'logDir');
97 my $sourceDir = $config->Get(var => 'sourceDir');
98 my $stagingUser = $config->Get(var => 'stagingUser');
99 my $stagingServer = $config->Get(var => 'stagingServer');
101 my $candidateDir = $config->GetFtpCandidateDir(bitsUnsigned => 0);
103 my $versionedSourceDir = catfile($sourceDir, $product . '-' . $version);
105 $this->CreateCandidatesDir();
107 $this->Shell(
108 cmd => 'rsync',
109 cmdArgs => ['-av', '-e', 'ssh', catfile('batch-source', 'rc' . $rc,
110 $product . '-' . $version . '-source.tar.bz2'),
111 $stagingUser . '@' . $stagingServer . ':' . $candidateDir],
112 logFile => catfile($logDir, 'source.log'),
113 dir => catfile($versionedSourceDir),
117 sub Announce {
118 my $this = shift;
120 my $config = new Bootstrap::Config();
121 my $product = $config->Get(var => 'product');
122 my $version = $config->GetVersion(longName => 0);
124 $this->SendAnnouncement(
125 subject => "$product $version source step finished",
126 message => "$product $version source archive was copied to the candidates dir.",
130 # Change the CVS/Root file to be the anonymous CVS Root
131 sub CvsChrootCallback {
132 my $config = new Bootstrap::Config();
133 my $anonCvsroot = $config->Get(var => 'anonCvsroot');
135 my $dirent = $File::Find::name;
136 if ((-f $dirent) and ($dirent =~ /.*CVS\/Root$/)) {
137 open(FILE, "> $dirent");
138 print FILE "$anonCvsroot\n";
139 close(FILE);