Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(993)

Unified Diff: tools/bots/editor.py

Issue 16831019: Initial support for mac installers. Currently only on our editor builders on FYI (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/build.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/bots/editor.py
diff --git a/tools/bots/editor.py b/tools/bots/editor.py
index 80d85d4b02cb4c16a87f5961dc74a987bce9d17d..6879b932c8fe66807a31d683167592b376d24e91 100755
--- a/tools/bots/editor.py
+++ b/tools/bots/editor.py
@@ -4,12 +4,22 @@
# BSD-style license that can be found in the LICENSE file.
import os
+import re
import shutil
import sys
import tempfile
import bot
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+sys.path.append(os.path.join(SCRIPT_DIR, '..'))
+import utils
+
+
+GSUTIL = utils.GetBuildbotGSUtilPath()
+GCS_DARTIUM_BUCKET = "gs://dartium-archive/continuous"
+GCS_EDITOR_BUCKET = "gs://continuous-editor-archive"
+
class TempDir(object):
def __enter__(self):
self._temp_dir = tempfile.mkdtemp('eclipse-workspace')
@@ -18,31 +28,95 @@ class TempDir(object):
def __exit__(self, *_):
shutil.rmtree(self._temp_dir, ignore_errors = True)
-def GetEditorExecutable(mode, arch):
+def GetBuildDirectory(mode, arch):
configuration_dir = mode + arch.upper()
- linux_path = os.path.join('out', configuration_dir, 'editor')
- win_path = os.path.join('build', configuration_dir, 'editor')
- mac_path = os.path.join('xcodebuild', configuration_dir, 'editor')
+ build_directory_dict = {
+ 'linux2' : os.path.join('out', configuration_dir),
+ 'darwin' : os.path.join('xcodebuild', configuration_dir),
+ 'win32' : os.path.join('build', configuration_dir),
+ }
+ if sys.platform == 'darwin':
+ # TODO(kustermann,ricow): Maybe we're able to get rid of this in the future.
+ # We use ninja on bots which use out/ (i.e. what linux2 does) instead of
+ # xcodebuild/
+ if (os.path.exists(build_directory_dict['linux2']) and
+ os.path.isdir(build_directory_dict['linux2'])):
+ return build_directory_dict['linux2']
+ return build_directory_dict[sys.platform]
+
+def GetEditorDirectory(mode, arch):
+ return os.path.join(GetBuildDirectory(mode, arch), 'editor')
+
+def GetDartSdkDirectory(mode, arch):
+ return os.path.join(GetBuildDirectory(mode, arch), 'dart-sdk')
+def GetEditorExecutable(mode, arch):
+ editor_dir = GetEditorDirectory(mode, arch)
if sys.platform == 'darwin':
executable = os.path.join('DartEditor.app', 'Contents', 'MacOS',
'DartEditor')
- # TODO(kustermann,ricow): Maybe we're able to get rid of this in the future.
- # We use ninja on bots which use out/ instead of xcodebuild/
- if os.path.exists(linux_path) and os.path.isdir(linux_path):
- return os.path.join(linux_path, executable)
- else:
- return os.path.join(mac_path, executable)
elif sys.platform == 'win32':
- return os.path.join(win_path, 'DartEditor.exe')
+ executable = 'DartEditor.exe'
elif sys.platform == 'linux2':
- return os.path.join(linux_path, 'DartEditor')
+ executable = 'DartEditor'
else:
raise Exception('Unknown platform %s' % sys.platform)
+ return os.path.join(editor_dir, executable)
+def RunProcess(args):
+ print 'Running: %s' % (' '.join(args))
+ sys.stdout.flush()
+ bot.RunProcess(args)
+
+def DownloadDartium(temp_dir, zip_file):
+ """Returns the filename of the unpacked archive"""
+ local_path = os.path.join(temp_dir, zip_file)
+ uri = "%s/%s" % (GCS_DARTIUM_BUCKET, zip_file)
+ RunProcess([GSUTIL, 'cp', uri, local_path])
+ RunProcess(['unzip', local_path, '-d', temp_dir])
+ for filename in os.listdir(temp_dir):
+ match = re.search('^dartium-.*-inc-([0-9]+)\.0$', filename)
+ if match:
+ return os.path.join(temp_dir, match.group(0))
+ raise Exception("Couldn't find dartium archive")
+
+def UploadInstaller(dart_editor_dmg, directory):
+ directory = directory % {'revision' : utils.GetSVNRevision()}
+ uri = '%s/%s' % (GCS_EDITOR_BUCKET, directory)
+ RunProcess([GSUTIL, 'cp', dart_editor_dmg, uri])
+
+def CreateAndUploadMacInstaller(arch):
+ dart_icns = os.path.join(
+ 'editor', 'tools', 'plugins', 'com.google.dart.tools.deploy',
+ 'icons', 'dart.icns')
+ mac_build_bundle_py = os.path.join('tools', 'mac_build_editor_bundle.sh')
+ mac_build_dmg_py = os.path.join('tools', 'mac_build_editor_dmg.sh')
+ editor_dir = GetEditorDirectory('Release', arch)
+ dart_sdk = GetDartSdkDirectory('Release', arch)
+ with TempDir() as temp_dir:
+ # Get dartium
+ dartium_directory = DownloadDartium(temp_dir, 'dartium-mac.zip')
+ dartium_bundle_dir = os.path.join(dartium_directory,
+ 'Chromium.app')
+
+ # Build the editor bundle
+ darteditor_bundle_dir = os.path.join(temp_dir, 'DartEditor.app')
+ args = [mac_build_bundle_py, darteditor_bundle_dir, editor_dir,
+ dart_sdk, dartium_bundle_dir, dart_icns]
+ RunProcess(args)
+
+ # Build the dmg installer from the editor bundle
+ dart_editor_dmg = os.path.join(temp_dir, 'DartEditor.dmg')
+ args = [mac_build_dmg_py, dart_editor_dmg, darteditor_bundle_dir,
+ dart_icns, 'Dart Editor']
+ RunProcess(args)
+
+ # Upload the dmg installer
+ UploadInstaller(dart_editor_dmg, 'dart-editor-mac-%(revision)s.dmg')
def main():
build_py = os.path.join('tools', 'build.py')
+
architectures = ['ia32', 'x64']
test_architectures = ['x64']
if sys.platform == 'win32':
@@ -52,19 +126,24 @@ def main():
for arch in architectures:
with bot.BuildStep('Build Editor %s' % arch):
args = [sys.executable, build_py,
- '-mrelease', '--arch=%s' % arch, 'editor']
- print 'Running: %s' % (' '.join(args))
- sys.stdout.flush()
- bot.RunProcess(args)
+ '-mrelease', '--arch=%s' % arch, 'editor', 'create_sdk']
+ RunProcess(args)
for arch in test_architectures:
editor_executable = GetEditorExecutable('Release', arch)
with bot.BuildStep('Test Editor %s' % arch):
with TempDir() as temp_dir:
args = [editor_executable, '--test', '--auto-exit', '-data', temp_dir]
- print 'Running: %s' % (' '.join(args))
- sys.stdout.flush()
- bot.RunProcess(args)
+ RunProcess(args)
+
+ # TODO: Permissions need to be clarified
+ for arch in test_architectures:
+ with bot.BuildStep('Build Installer %s' % arch):
+ if sys.platform == 'darwin':
+ CreateAndUploadMacInstaller(arch)
+ else:
+ print ("We currently don't build installers for sys.platform=%s"
+ % sys.platform)
return 0
if __name__ == '__main__':
« no previous file with comments | « no previous file | tools/build.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698