build/scripts/automation/TriggerBuild.pl (15 lines of code) (raw):

use warnings; use strict; use Getopt::Long; use File::Path; # Parase arguments passed to the script. GetOptions( 'branchname=s' => \my $branchname, 'incremental=s' => \my $incremental, 'srcpath=s' => \my $srcpath, 'config=s' => \my $config, ); # Usage sub Usage { my $message = shift; print "\n\n$message"; print <<TOC; Usage ===== $0 -b <branchname> -i <yes|no> -s <sourcepath> TOC exit 1; } # Print usage when invalid arguments are passed. &Usage("Please provide branchname as an argument.\n") unless defined $branchname; &Usage("Value of incremental switch can be either yes or no.\n") unless $incremental =~ /^(yes|no)$/i; &Usage("Please provide source path as an argument.\n") unless defined $srcpath; &Usage("Value of config switch can be either release or debug.\n") unless $config =~ /^(release|debug)$/i; unless (-e $srcpath and -d $srcpath) { print "$srcpath directory does not exist. Please provide an existing source path.\n"; exit 1; } # Print values passed to all arguments passed. my $blddir = "${srcpath}\\${branchname}"; print "branchname value: $branchname\n"; print "incremental value: $incremental\n"; print "srcpath value: $srcpath\n"; print "blddir value: $blddir\n"; print "config value: $config\n"; # Declare global variables. my $pwspath = "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"; my $appdatatempapth = "C:\\Users\\mabldact\\AppData\\Local\\Temp"; # Lot of cab files are accumulating here and so removing all these sub RemoveAppDataTempPath { if ( -d "$appdatatempapth") { unless (rmtree "$appdatatempapth") { print "Failed to remove $appdatatempapth.\n"; exit 1; } } } sub CheckoutOrUpdateCode { # In case of incremental build, change to source code directory, update source code and switch to the branch specified. if (lc($incremental) eq "yes") { chdir "$blddir\\InMage-Azure-SiteRecovery"; system("git pull"); if ($? == 0) { print "Updated git repo successfuly.\n"; SwitchBranch(); } else { print "Failed to update git repo.\n"; exit 1; } }else{ # In case of clean build remove build directory, create it afresh and change to build directory. if ( -d "$blddir") { system("rmdir $blddir /s /q"); if ($? != 0) { print "Failed to remove $blddir.\n"; exit 1; } } unless (mkdir "$blddir") { print "Failed to make $blddir.\n"; exit 1; } unless (chdir "$blddir") { print "Failed to switch to $blddir.\n"; exit 1; } # Clone git repo and switch to the branch specified. system("git clone https://msazure.visualstudio.com/DefaultCollection/One/_git/InMage-Azure-SiteRecovery"); if ($? == 0) { print "Cloned git repo successfuly.\n"; SwitchBranch(); } else { print "Failed to clone git repo.\n"; exit 1; } } } sub SwitchBranch { chdir "$blddir\\InMage-Azure-SiteRecovery"; system("git checkout $branchname"); if ($? == 0) { print "Switched to $branchname successfuly.\n"; } else { print "Failed to switch to $branchname.\n"; exit 1; } } sub InvokeBuilds { chdir "${blddir}\\InMage-Azure-SiteRecovery\\build\\scripts\\automation"; system("${pwspath}", "-command", "${blddir}\\InMage-Azure-SiteRecovery\\build\\scripts\\automation\\InvokeBuild.ps1", "${branchname}", "${incremental}", "${blddir}\\InMage-Azure-SiteRecovery", "${config}"); } sub LogoutAllUsers { print "DEBUG: in LogoutAllUsers()\n"; my $sessions= `query session`; print $sessions; my @sessionlines = split /\n/, $sessions; foreach my $sessionline (@sessionlines) { if ($sessionline =~ m/Disc/) { $sessionline =~ s/^\s+//; my @disctokens = split /\s+/, $sessionline; # ignore session zero if ($disctokens[1] eq '0') { next; } # ignore console if ($sessionline =~ m/console/) { next; } print "$sessionline\n"; print "logoff $disctokens[1]\n"; system("logoff $disctokens[1]"); next; } if ($sessionline !~ m/rdp/) { next; } if ($sessionline =~ m/Listen/) { next; } $sessionline =~ s/\s+//; my @tokens = split /\s+/, $sessionline; print "$sessionline\n"; print "logoff $tokens[2]\n"; system("logoff $tokens[2]"); } } sub main { print "DEBUG: in main()\n"; RemoveAppDataTempPath(); LogoutAllUsers(); CheckoutOrUpdateCode(); InvokeBuilds() } # ----------------------------------------------------------------------- # Entry point in the program # ----------------------------------------------------------------------- &main();