releasing/makecbr/MakeCBR.pl
changeset 607 378360dbbdba
parent 602 3145852acc89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/MakeCBR.pl	Wed Jun 30 11:35:58 2010 +0800
@@ -0,0 +1,153 @@
+#!/bin/perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Automated Component Based Releasing system front end
+# 
+#
+
+use strict;
+use Getopt::Long;
+use Cwd;
+use FindBin;
+
+use lib $FindBin::Bin;
+
+use CStageRunner;
+use CConfig;
+
+my @GTTechViewPrepareStages=("CCreateDrive","CGetPrevRel","CCheckMrpUpdates","CDelta", "CCheckEnv");
+my @GTTechViewReleaseStages=("CReleaseEnv","CStoreMrpState");
+my @GTstages=("CRemoveNonGT", "CInstallGTConflicts", "CPrepGTRelease", "CCheckEnv", "CReleaseEnv");
+my @finishStages=("CCleanUp");
+
+my $help = q/
+  makecbr.pl -b build_id -c config_file -v release_version [-j max_processes]
+    [-i int_version] [-p prev_version] [-l log_file] [-d debug_output] [-repair]
+   * where:
+  build_id is a unique build identifier
+  config_file is the filename of the configuration file
+  release_version is the version to be assigned to any updated components
+   * Optionally:
+  max_processes is the maximum number of parallel processes allowed
+  int_version is the internal version string to use for publishing components
+  prev_version is the version to assume as the previous baseline, to override
+    automatic determination
+  log_file is a file to log all output to
+  debug_output is a file to write intermediate stage output to in case of an
+    error
+   * -repair assumes a failure in GT_TechView and resumes from the MakeEnv step.
+/;
+
+my($build_id, $config_file, $log_file, $parallel, $release_ver, $debug_file, $help_flag, $prev_ver, $repair, $int_ver);
+
+GetOptions (
+   'b=s'    => \$build_id,
+   'c=s'    => \$config_file,
+   'l=s'    => \$log_file,
+   'v=s'    => \$release_ver,
+   'p=s'    => \$prev_ver,
+   'd=s'    => \$debug_file,
+   '+h'     => \$help_flag,
+   'repair' => \$repair,
+   'i=s'    => \$int_ver,
+   'j=i'    => \$parallel
+);
+
+if (defined($help_flag))
+	{
+	print $help;
+	exit;
+	}
+
+if (!defined($config_file))
+	{
+	die "A configuration file must be specified (using the -c option)\n";
+	}
+
+if (!defined($parallel)) {
+   $parallel = 0;
+}
+
+my $options = New CConfig();
+if (defined($log_file))
+	{
+	$options->SetLog($log_file) or exit;
+	}
+
+if (defined($debug_file))
+	{
+	# Ensure path isn't relative
+
+	if ($debug_file !~ /^[A-Za-z]:/)
+		{
+		if ($debug_file =~ /^[^\/\\]/)
+			{
+			# Path is relative
+			$debug_file = getcwd()."\\".$debug_file;
+			}
+		else
+			{
+			# Path is only missing drive letter
+			my $drive = getcwd();
+			$drive =~ s/^([A-Za-z]):.*$/$1/ or $options->Die("ERROR: getcwd() did not return drive letter, rather '$drive'");
+			$debug_file = $drive.":".$debug_file;
+			}
+		}
+	$debug_file =~ s/\//\\/g; # Make all slashes backslashes
+	}
+
+$options->Reload($config_file) or $options->Die("ERROR: Couldn't load config file '$config_file'");
+
+$options->Set("Build identifier",$build_id) or $options->Die("ERROR: Build identifier '$build_id' is invalid");
+$options->Set("Release version",$release_ver) or $options->Die("ERROR: Release version '$release_ver' is invalid");
+
+if (defined($int_ver))
+    {
+    $options->Set("Internal version",$int_ver) or $options->Die("ERROR: Internal version '$int_ver' is invalid");
+    }
+else
+    {
+    $options->Set("Internal version",$release_ver);
+    }
+
+if (defined($prev_ver))
+	{
+	$options->Set("Last baseline version",$prev_ver) or $options->Die("ERROR: Previous baseline version '$prev_ver' is invalid");
+	}
+
+if (defined($parallel)) {
+   $options->Set('Max Parallel Tasks', $parallel) or $options->Die("ERROR: Max parallel processes '$parallel' is invalid");
+}
+
+my @stages = ();
+if (defined($repair))
+	{
+	push @stages, "CConfigureRepair";
+	}
+else
+	{
+	push @stages, @GTTechViewPrepareStages;
+	}
+    
+push @stages, (@GTTechViewReleaseStages, @GTstages, @finishStages);
+
+my $stageRunner = New CStageRunner(\@stages, $options);
+if (!$stageRunner->Run())
+	{
+	if (defined($debug_file))
+		{
+		$options->Save($debug_file);
+		}
+	$options->Die("");
+	}