Title: [112781] trunk/Tools
Revision
112781
Author
rn...@webkit.org
Date
2012-03-30 23:50:09 -0700 (Fri, 30 Mar 2012)

Log Message

Chromium bots should upload archived built files
https://bugs.webkit.org/show_bug.cgi?id=82666

Reviewed by Tony Chang.

* BuildSlaveSupport/build.webkit.org-config/config.json:
* BuildSlaveSupport/built-product-archive:
(main):
(determineWebKitBuildDirectory): Instead of hard-coding WebKitBuild as the build outout directory,
call out to webkit-build-directory.
(removeDirectoryIfExists): Extracted.
(copyBuildFiles): Added to avoid archiving useless intermedinate files.
(createZipManually): Used in Chromium Windows where we don't execute python scripts inside cygwin.
(createZipManually.addToArchive):
(createZip): Extracted. Calls out to appropraite command line scripts or createZipManually.
(archiveBuiltProduct): Add support for Chromium port.
* Scripts/webkit-build-directory: Add support for --platform options.

Modified Paths

Diff

Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/config.json (112780 => 112781)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/config.json	2012-03-31 06:10:30 UTC (rev 112780)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/config.json	2012-03-31 06:50:09 UTC (rev 112781)
@@ -227,6 +227,7 @@
                     {
                       "name": "Chromium Win Release", "type": "Build", "builddir": "chromium-win-release",
                       "platform": "chromium-win", "configuration": "release", "architectures": ["i386"],
+                      "upload": true,
                       "slavenames": ["google-windows-1"]
                     },
                     {
@@ -242,6 +243,7 @@
                     {
                       "name": "Chromium Mac Release", "type": "Build", "builddir": "chromium-mac-release",
                       "platform": "chromium-mac", "configuration": "release", "architectures": ["i386"],
+                      "upload": true,
                       "slavenames": ["google-mac-1", "google-mac-3"]
                     },
                     {
@@ -257,6 +259,7 @@
                     {
                       "name": "Chromium Linux Release", "type": "Build", "builddir": "chromium-linux-release",
                       "platform": "chromium-linux", "configuration": "release", "architectures": ["i386"],
+                      "upload": true,
                       "slavenames": ["google-linux-1"]
                     },
                     {

Modified: trunk/Tools/BuildSlaveSupport/built-product-archive (112780 => 112781)


--- trunk/Tools/BuildSlaveSupport/built-product-archive	2012-03-31 06:10:30 UTC (rev 112780)
+++ trunk/Tools/BuildSlaveSupport/built-product-archive	2012-03-31 06:50:09 UTC (rev 112781)
@@ -1,6 +1,7 @@
 #!/usr/bin/python
 
 # Copyright (C) 2009 Apple Inc.  All rights reserved.
+# Copyright (C) 2012 Google Inc. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -23,10 +24,16 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import optparse, os, shutil, subprocess, sys
+import optparse
+import os
+import shutil
+import subprocess
+import sys
+import zipfile
 
-buildDirectory = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "WebKitBuild"))
+_buildDirectory = None
 
+
 def main():
     parser = optparse.OptionParser("usage: %prog [options] [action]")
     parser.add_option("--platform", dest="platform")
@@ -44,52 +51,96 @@
         parser.error("Action is required")
         return 1
 
+    if not determineWebKitBuildDirectory(options.platform, options.configuration):
+        print >> sys.stderr, "Could not determine build directory"
+        return 1
+
     if action == 'archive':
         return archiveBuiltProduct(options.configuration, options.platform)
     else:
         return extractBuiltProduct(options.configuration, options.platform)
 
 
-def archiveBuiltProduct(configuration, platform):
-    assert platform in ('mac', 'win', 'qt', 'gtk', 'efl')
+def determineWebKitBuildDirectory(platform, configuration):
+    global _buildDirectory
+    _buildDirectory = subprocess.Popen([os.path.join(os.path.dirname(__file__), "..", "Scripts", "webkit-build-directory"),
+        "--" + platform, "--" + configuration, '--top-level'], stdout=subprocess.PIPE).communicate()[0].strip()
+    return _buildDirectory
 
-    archiveFile = os.path.join(buildDirectory, configuration + ".zip")
 
+def removeDirectoryIfExists(thinDirectory):
+    if os.path.isdir(thinDirectory):
+        shutil.rmtree(thinDirectory)
+
+
+def copyBuildFiles(source, destination):
+    shutil.copytree(source, destination,
+        ignore=shutil.ignore_patterns('.svn', '*.a', '*.d', '*.dSYM', '*.o', '*.ilk', '*.lib', '*.obj', '*.pdb'))
+
+
+def createZipManually(directoryToZip, archiveFile):
+    archiveZip = zipfile.ZipFile(archiveFile, "w")
+
+    for path, dirNames, fileNames in os.walk(directoryToZip):
+        relativePath = os.path.relpath(path, directoryToZip)
+        for dirName in dirNames:
+            archiveZip.write(os.path.join(path, dirName), os.path.join(relativePath, dirName))
+
+    archiveZip.close()
+
+
+def createZip(directoryToZip, configuration):
+    archiveDir = os.path.join(os.path.dirname(__file__), "..", "..", "WebKitBuild")
+
+    # Chromium bots may not have this directory
+    if not os.path.isdir(archiveDir):
+        os.mkdir(archiveDir)
+
+    archiveFile = os.path.join(archiveDir, configuration + ".zip")
+
     try:
         os.unlink(archiveFile)
     except OSError, e:
         if e.errno != 2:
             raise
 
-    configurationBuildDirectory = os.path.join(buildDirectory, configuration.title())
+    createZipManually(directoryToZip, archiveFile)
+    return 0
 
+    if sys.platform == 'darwin':
+        return subprocess.call(["ditto", "-c", "-k", "--keepParent", "--sequesterRsrc", directoryToZip, archiveFile])
+    elif sys.platform == 'cygwin':
+        return subprocess.call(["zip", "-r", archiveFile, "bin"], cwd=directoryToZip)
+    elif sys.platform == 'win32':
+        createZipManually(directoryToZip, archiveFile)
+        return 0
+    elif sys.platform.startswith('linux'):
+        return subprocess.call(["zip", "-y", "-r", archiveFile, "."], cwd=directoryToZip)
+
+
+def archiveBuiltProduct(configuration, platform):
+    assert platform in ('mac', 'win', 'qt', 'gtk', 'efl', 'chromium')
+
+    configurationBuildDirectory = os.path.join(_buildDirectory, configuration.title())
+
     if platform == 'mac':
-        return subprocess.call(["ditto", "-c", "-k", "--keepParent", "--sequesterRsrc", configurationBuildDirectory, archiveFile])
+        return createZip(configurationBuildDirectory, configuration)
     elif platform == 'win':
         binDirectory = os.path.join(configurationBuildDirectory, "bin")
         thinDirectory = os.path.join(configurationBuildDirectory, "thin")
         thinBinDirectory = os.path.join(thinDirectory, "bin")
 
-        if os.path.isdir(thinDirectory):
-            shutil.rmtree(thinDirectory)
-        os.mkdir(thinDirectory)
-
-        if subprocess.call(["cp", "-R", binDirectory, thinBinDirectory]):
+        removeDirectoryIfExists(thinDirectory)
+        copyBuildFiles(binDirectory, thinBinDirectory)
+        if createZip(thinDirectory, configuration):
             return 1
 
-        if subprocess.call("rm -f %s" % os.path.join(thinBinDirectory, "*.ilk"), shell=True):
-            return 1
-
-        if subprocess.call(["zip", "-r", archiveFile, "bin"], cwd=thinDirectory):
-            return 1
-
         shutil.rmtree(thinDirectory)
 
     elif platform == 'qt' or platform == 'gtk' or platform == 'efl':
         thinDirectory = os.path.join(configurationBuildDirectory, "thin")
 
-        if os.path.isdir(thinDirectory):
-            shutil.rmtree(thinDirectory)
+        removeDirectoryIfExists(thinDirectory)
         os.mkdir(thinDirectory)
 
         if platform == 'qt' or platform == 'efl':
@@ -109,20 +160,29 @@
                 if name.endswith(".o"):
                     os.remove(os.path.join(root, name))
 
-        if subprocess.call(["zip", "-y", "-r", archiveFile, "."], cwd=thinDirectory):
+        if createZip(thinDirectory, configuration):
             return 1
 
+    elif platform == 'chromium':
+        thinDirectory = os.path.join(configurationBuildDirectory, "thin")
+
+        removeDirectoryIfExists(thinDirectory)
+        copyBuildFiles(configurationBuildDirectory, thinDirectory)
+        if createZip(thinDirectory, configuration):
+            return 1
+        
+
 def extractBuiltProduct(configuration, platform):
     assert platform in ('mac', 'win', 'qt', 'gtk', 'efl')
 
-    archiveFile = os.path.join(buildDirectory, configuration + ".zip")
-    configurationBuildDirectory = os.path.join(buildDirectory, configuration.title())
+    archiveFile = os.path.join(_buildDirectory, configuration + ".zip")
+    configurationBuildDirectory = os.path.join(_buildDirectory, configuration.title())
 
     if platform == 'mac':
         if os.path.isdir(configurationBuildDirectory):
             shutil.rmtree(configurationBuildDirectory)
 
-        if subprocess.call(["ditto", "-x", "-k", archiveFile, buildDirectory]):
+        if subprocess.call(["ditto", "-x", "-k", archiveFile, _buildDirectory]):
             return 1
         os.unlink(archiveFile)
 
@@ -146,7 +206,7 @@
         if os.path.isdir(configurationBuildDirectory):
             shutil.rmtree(configurationBuildDirectory)
 
-        if subprocess.call(["unzip", "-o", archiveFile, "-d", configurationBuildDirectory], cwd=buildDirectory):
+        if subprocess.call(["unzip", "-o", archiveFile, "-d", configurationBuildDirectory], cwd=_buildDirectory):
             return 1
         os.unlink(archiveFile)
 

Modified: trunk/Tools/ChangeLog (112780 => 112781)


--- trunk/Tools/ChangeLog	2012-03-31 06:10:30 UTC (rev 112780)
+++ trunk/Tools/ChangeLog	2012-03-31 06:50:09 UTC (rev 112781)
@@ -1,3 +1,23 @@
+2012-03-30  Ryosuke Niwa  <rn...@webkit.org>
+
+        Chromium bots should upload archived built files
+        https://bugs.webkit.org/show_bug.cgi?id=82666
+
+        Reviewed by Tony Chang.
+
+        * BuildSlaveSupport/build.webkit.org-config/config.json:
+        * BuildSlaveSupport/built-product-archive:
+        (main):
+        (determineWebKitBuildDirectory): Instead of hard-coding WebKitBuild as the build outout directory,
+        call out to webkit-build-directory.
+        (removeDirectoryIfExists): Extracted.
+        (copyBuildFiles): Added to avoid archiving useless intermedinate files.
+        (createZipManually): Used in Chromium Windows where we don't execute python scripts inside cygwin.
+        (createZipManually.addToArchive):
+        (createZip): Extracted. Calls out to appropraite command line scripts or createZipManually.
+        (archiveBuiltProduct): Add support for Chromium port.
+        * Scripts/webkit-build-directory: Add support for --platform options.
+
 2012-03-30  Dan Bernstein  <m...@apple.com>
 
         Reverted r112767, because it caused many vertical text tests to fail.

Modified: trunk/Tools/Scripts/webkit-build-directory (112780 => 112781)


--- trunk/Tools/Scripts/webkit-build-directory	2012-03-31 06:10:30 UTC (rev 112780)
+++ trunk/Tools/Scripts/webkit-build-directory	2012-03-31 06:50:09 UTC (rev 112781)
@@ -42,15 +42,26 @@
 my $programName = basename($0);
 my $usage = <<EOF;
 Usage: $programName [options]
-  --configuration  Show the build directory for a specific configuration (e.g. Debug, Release.  Defaults to the active configuration set by set-webkit-configuration)
-  -h|--help        Show this help message
-  --top-level      Show the top-level build directory
+  --configuration       Show the build directory for a specific configuration (e.g. Debug, Release.  Defaults to the active configuration set by set-webkit-configuration)
+  -h|--help             Show this help message
+  --top-level           Show the top-level build directory
 
+  --blackberry          Find the build directory for the BlackBerry port on Mac/Linux
+  --chromium            Find the build directory for the Chromium port on Mac/Win/Linux
+  --chromium-android    Find the build directory for the Chromium port on Android
+  --efl                 Find the build directory for the EFL port
+  --gtk                 Find the build directory for the GTK+ port
+  --qt                  Find the build directory for the Qt port
+  --wincairo            Find the build directory for using Cairo (rather than CoreGraphics) on Windows
+  --wince               Find the build directory for the WinCE port
+
 Either --configuration or --top-level is required.
 EOF
 
 setConfiguration(); # Figure out from the command line if we're --debug or --release or the default.
 
+# FIXME: Check if extra flags are valid or not.
+Getopt::Long::Configure('pass_through'); # Let --blackberry, etc... be handled by webkitdirs
 my $getOptionsResult = GetOptions(
     'configuration' => \$showConfigurationDirectory,
     'top-level' => \$showTopLevelDirectory,
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to