From 5c67e6a46001d397f3b744ec3badd130f75085d3 Mon Sep 17 00:00:00 2001 From: Asher Baker Date: Sat, 4 May 2013 16:45:51 +0100 Subject: [PATCH] Updated build scipts. --- AMBuildScript | 2 +- buildbot/Versioning | 2 +- buildbot/bootstrap.pl | 58 ------------- buildbot/helpers.pm | 94 --------------------- buildbot/package.pl | 82 ------------------ buildbot/startbuild.pl | 35 -------- buildbot/product.version => product.version | 0 upload.py | 71 ++++++++++++++++ 8 files changed, 73 insertions(+), 271 deletions(-) delete mode 100644 buildbot/bootstrap.pl delete mode 100644 buildbot/helpers.pm delete mode 100644 buildbot/package.pl delete mode 100644 buildbot/startbuild.pl rename buildbot/product.version => product.version (100%) create mode 100644 upload.py diff --git a/AMBuildScript b/AMBuildScript index 9aff2b6..89295db 100644 --- a/AMBuildScript +++ b/AMBuildScript @@ -217,7 +217,7 @@ class SM: # For OS X dylib versioning import re - productFile = open(os.path.join(AMBuild.sourceFolder, 'buildbot', 'product.version'), 'r') + productFile = open(os.path.join(AMBuild.sourceFolder, 'product.version'), 'r') productContents = productFile.read() productFile.close() m = re.match('(\d+)\.(\d+)\.(\d+).*', productContents) diff --git a/buildbot/Versioning b/buildbot/Versioning index d8c7bfc..c5c731b 100644 --- a/buildbot/Versioning +++ b/buildbot/Versioning @@ -24,7 +24,7 @@ def PerformReversioning(): return False cache.CacheVariable('cset', cset) - productFile = open(os.path.join(AMBuild.sourceFolder, 'buildbot', 'product.version'), 'r') + productFile = open(os.path.join(AMBuild.sourceFolder, 'product.version'), 'r') productContents = productFile.read() productFile.close() m = re.match('(\d+)\.(\d+)\.(\d+)(.*)', productContents) diff --git a/buildbot/bootstrap.pl b/buildbot/bootstrap.pl deleted file mode 100644 index f2d3d74..0000000 --- a/buildbot/bootstrap.pl +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/perl -# vim: set ts=2 sw=2 tw=99 noet: - -use strict; -use Cwd; -use File::Basename; -use File::Path; - -my ($myself, $path) = fileparse($0); -chdir($path); - -require 'helpers.pm'; - -#Go back above build dir -chdir(Build::PathFormat('../..')); - -#Get the source path. -our ($root) = getcwd(); - -rmtree('OUTPUT'); -mkdir('OUTPUT') or die("Failed to create output folder: $!\n"); -chdir('OUTPUT'); -my ($result); -print "Attempting to reconfigure...\n"; - -#update and configure shiz -if ($^O eq "linux") { - $ENV{'SOURCEMOD14'} = '/home/builds/common/sourcemod-1.4'; - $ENV{'MMSOURCE19'} = '/home/builds/common/mmsource-1.9'; - - $ENV{'HL2SDKOBVALVE'} = '/home/builds/common/hl2sdk-ob-valve'; - $ENV{'HL2SDKCSS'} = '/home/builds/common/hl2sdk-css'; -} elsif ($^O eq "darwin") { - $ENV{'SOURCEMOD14'} = '/Users/builds/slaves/common/sourcemod-1.4'; - $ENV{'MMSOURCE19'} = '/Users/builds/slaves/common/mmsource-1.9'; - - $ENV{'HL2SDKOBVALVE'} = '/Users/builds/slaves/common/hl2sdk-ob-valve'; - $ENV{'HL2SDKCSS'} = '/Users/builds/slaves/common/hl2sdk-css'; -} else { - $ENV{'SOURCEMOD14'} = 'C:/Scripts/common/sourcemod-1.4'; - $ENV{'MMSOURCE19'} = 'C:/Scripts/common/mmsource-1.9'; - - #$ENV{'HL2SDKOBVALVE'} = 'H:/hl2sdk-ob-valve'; - #$ENV{'HL2SDKCSS'} = 'H:/hl2sdk-css'; -} - -#configure AMBuild -if ($^O eq "linux") { - $result = `CC=gcc CXX=gcc python3 ../build/configure.py --enable-optimize`; -} elsif ($^O eq "darwin") { - $result = `CC=clang CXX=clang python3 ../build/configure.py --enable-optimize`; -} else { - $result = `C:\\Python31\\Python.exe ..\\build\\configure.py --enable-optimize`; -} -print "$result\n"; -if ($? != 0) { - die('Could not configure!'); -} diff --git a/buildbot/helpers.pm b/buildbot/helpers.pm deleted file mode 100644 index 7dcb24d..0000000 --- a/buildbot/helpers.pm +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Cwd; - -package Build; - -sub HgRevNum -{ - my ($path) = (@_); - my ($cd, $text, $rev); - - $cd = Cwd::cwd(); - chdir($path); - $text = `hg identify -n`; - chdir($cd); - - chomp $text; - if ($text =~ /^(\d+)/) - { - return $1; - } - - return 0; -} - -sub ProductVersion -{ - my ($file) = (@_); - my ($version); - open(FILE, $file) or die "Could not open $file: $!\n"; - $version = ; - close(FILE); - chomp $version; - return $version; -} - -sub Delete -{ - my ($str)=(@_); - if ($^O =~ /MSWin/) - { - Command("del /S /F /Q \"$str\""); - Command("rmdir /S /Q \"$str\""); - } else { - Command("rm -rf $str"); - } - return !(-e $str); -} - -sub Copy -{ - my ($src,$dest)=(@_); - if ($^O =~ /MSWin/) - { - Command("copy \"$src\" \"$dest\" /y"); - } else { - Command("cp \"$src\" \"$dest\""); - } - return (-e $dest); -} - -sub Move -{ - my ($src,$dest)=(@_); - if ($^O =~ /MSWin/) - { - Command("move \"$src\" \"$dest\""); - } else { - Command("mv \"$src\" \"$dest\""); - } - return (-e $dest); -} - -sub Command -{ - my($cmd)=(@_); - print "$cmd\n"; - return `$cmd`; -} - -sub PathFormat -{ - my ($str)=(@_); - if ($^O =~ /MSWin/) - { - $str =~ s#/#\\#g; - } else { - $str =~ s#\\#/#g; - } - return $str; -} - -return 1; diff --git a/buildbot/package.pl b/buildbot/package.pl deleted file mode 100644 index 7011122..0000000 --- a/buildbot/package.pl +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Cwd; -use File::Basename; -use Net::FTP; - -my ($ftp_host, $ftp_user, $ftp_pass, $ftp_path); - -$ftp_host = $ARGV[0]; -$ftp_user = $ARGV[1]; -$ftp_pass = $ARGV[2]; -$ftp_path = $ARGV[3]; - -my ($myself, $path) = fileparse($0); -chdir($path); - -require 'helpers.pm'; - -my ($version); -$version = Build::ProductVersion(Build::PathFormat('product.version')); -$version .= '-hg' . Build::HgRevNum('.'); - -# Append OS to package version -if ($^O eq "darwin") -{ - $version .= '-mac'; -} -elsif ($^O =~ /MSWin/) -{ - $version .= '-windows'; -} -else -{ - $version .= '-' . $^O; -} - -#Switch to the output folder. -chdir(Build::PathFormat('../../OUTPUT/package')); - -my ($filename); -$filename = 'connect-' . $version; -if ($^O eq "linux") -{ - $filename .= '.tar.gz'; - print "tar zcvf $filename addons\n"; - system("tar zcvf $filename addons"); -} -else -{ - $filename .= '.zip'; - print "zip -r $filename addons\n"; - system("zip -r $filename addons"); -} - -#my ($major,$minor) = ($version =~ /^(\d+)\.(\d+)/); -#$ftp_path .= "/$major.$minor"; - -my ($ftp); - -$ftp = Net::FTP->new($ftp_host, Debug => 0) - or die "Cannot connect to host $ftp_host : $@"; - -$ftp->login($ftp_user, $ftp_pass) - or die "Cannot connect to host $ftp_host as $ftp_user : " . $ftp->message . "\n"; - -if ($ftp_path ne '') -{ - $ftp->cwd($ftp_path) - or die "Cannot change to folder $ftp_path : " . $ftp->message . "\n"; -} - -$ftp->binary(); -$ftp->put($filename) - or die "Cannot drop file $filename ($ftp_path) : " . $ftp->message . "\n"; - -$ftp->close(); - -print "File sent to drop site as $filename -- build succeeded.\n"; - -exit(0); - diff --git a/buildbot/startbuild.pl b/buildbot/startbuild.pl deleted file mode 100644 index 72b2f39..0000000 --- a/buildbot/startbuild.pl +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/perl -# vim: set ts=2 sw=2 tw=99 noet: - -use File::Basename; - -my ($myself, $path) = fileparse($0); -chdir($path); - -require 'helpers.pm'; - -chdir('../../OUTPUT'); - -$ENV{'BREAKPAD_SYMBOL_SERVER'} = 'http://crash.limetech.org/submit-symbols'; - -if ($^O eq "linux") { - $ENV{'PATH'} .= ':/home/builds/common/'; -} elsif ($^O eq "darwin") { - $ENV{'PATH'} .= ':/Users/builds/slaves/common/'; -} - -if ($^O eq "linux" || $^O eq "darwin") { - system("python3 build.py 2>&1"); -} else { - system("C:\\Python31\\python.exe build.py 2>&1"); -} - -if ($? != 0) -{ - die "Build failed: $!\n"; -} -else -{ - exit(0); -} - diff --git a/buildbot/product.version b/product.version similarity index 100% rename from buildbot/product.version rename to product.version diff --git a/upload.py b/upload.py new file mode 100644 index 0000000..ec51b3d --- /dev/null +++ b/upload.py @@ -0,0 +1,71 @@ +import re, os, sys +import subprocess + +import zipfile +import ftplib + +platform = 'unknown' +if sys.platform.startswith('linux'): + platform = 'linux' +elif sys.platform.startswith('win32'): + platform = 'windows' +elif sys.platform.startswith('darwin'): + platform = 'mac' + +def HGVersion(): + p = subprocess.Popen(['hg', 'identify', '-n'], stdout = subprocess.PIPE, stderr = subprocess.PIPE) + (stdout, stderr) = p.communicate() + stdout = stdout.decode('UTF-8') + + return stdout.rstrip('+\r\n') + +def ReleaseVersion(): + productFile = open('product.version', 'r') + productContents = productFile.read() + productFile.close() + + m = re.match('(\d+)\.(\d+)\.(\d+)(.*)', productContents) + if m == None: + raise Exception('Could not detremine product version') + + major, minor, release, tag = m.groups() + return '.'.join([major, minor, release]) + +filename = '-'.join(['connect', ReleaseVersion(), 'hg' + HGVersion(), platform]) + +debug_build = os.environ.get('is_debug_build', False) == "1" + +if debug_build: + filename += '-debug' + +filename += '.zip' + +zip = zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED) + +for base, dirs, files in os.walk('package'): + for file in files: + fn = os.path.join(base, file) + fns = fn[(len('package') + 1):] + + zip.write(fn, fns) + +print("%-33s %-10s %21s %12s" % ("File Name", "CRC32", "Modified ", "Size")) +for zinfo in zip.infolist(): + date = "%d-%02d-%02d %02d:%02d:%02d" % zinfo.date_time[:6] + print("%-33s %-10d %21s %12d" % (zinfo.filename, zinfo.CRC, date, zinfo.file_size)) + +zip.close() + +if 'ftp_hostname' in os.environ: + print('') + + ftp = ftplib.FTP(os.environ['ftp_hostname'], os.environ['ftp_username'], os.environ['ftp_password']) + print('Connected to server, uploading build...') + ftp.cwd(os.environ['ftp_directory']) + print(ftp.storbinary('STOR ' + filename, open(filename, 'rb'))) + ftp.quit() + + print('Uploaded as \'' + filename + '\'') + + os.unlink(filename) +