Index: editor/build/build.py |
diff --git a/editor/build/build.py b/editor/build/build.py |
index 025eb41bba3cf784a742b6eada3fe78060eb4989..1a32040ff6e2955be3d469246a6fec2e384c2957 100755 |
--- a/editor/build/build.py |
+++ b/editor/build/build.py |
@@ -1,6 +1,6 @@ |
#!/usr/bin/env python |
# |
-# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+# Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
# for details. All rights reserved. Use of this source code is governed by a |
# BSD-style license that can be found in the LICENSE file. |
@@ -128,6 +128,14 @@ def DartArchiveUploadVersionFile(version_file): |
DartArchiveFile(version_file, namer.version_filepath(revision), |
create_md5sum=False) |
+def DartArchiveUploadInstaller( |
+ arch, installer_file, extension, release_type=bot_utils.ReleaseType.RAW): |
+ namer = bot_utils.GCSNamer(CHANNEL, release_type) |
+ for revision in [REVISION, 'latest']: |
+ gsu_path = namer.editor_installer_zipfilepath( |
+ revision, SYSTEM, arch, extension) |
+ DartArchiveFile(installer_file, gsu_path, create_md5sum=False) |
+ |
class AntWrapper(object): |
"""A wrapper for ant build invocations""" |
@@ -261,6 +269,9 @@ def BuildOptions(): |
result.add_option('--dest', |
help='Output Directory.', |
action='store') |
+ result.add_option('--build-installer', |
+ help='Fetch editor, build installer and archive it.', |
+ action='store_true', default=False) |
return result |
def main(): |
@@ -311,16 +322,6 @@ def main(): |
sdk_zip = None |
try: |
- ant_property_file = tempfile.NamedTemporaryFile(suffix='.property', |
- prefix='AntProperties', |
- delete=False) |
- ant_property_file.close() |
- ant = AntWrapper(ant_property_file.name, os.path.join(antpath, 'bin'), |
- bzip2libpath) |
- |
- ant.RunAnt(os.getcwd(), '', '', '', '', |
- '', '', buildos, ['-diagnostics']) |
- |
parser = BuildOptions() |
(options, args) = parser.parse_args() |
# Determine which targets to build. By default we build the "all" target. |
@@ -369,14 +370,6 @@ def main(): |
buildout = os.path.abspath(options.out) |
print 'buildout = {0}'.format(buildout) |
- if not os.path.exists(buildout): |
- os.makedirs(buildout) |
- |
- # clean out old build artifacts |
- for f in os.listdir(buildout): |
- if ('dartsdk-' in f) or ('darteditor-' in f) or ('dart-editor-' in f): |
- os.remove(join(buildout, f)) |
- |
# Get user name. If it does not start with chrome then deploy to the test |
# bucket; otherwise deploy to the continuous bucket. |
username = os.environ.get('USER') |
@@ -387,10 +380,16 @@ def main(): |
print 'Could not find username' |
return 6 |
+ build_skip_tests = os.environ.get('DART_SKIP_RUNNING_TESTS') |
+ sdk_environment = os.environ |
+ if sdk_environment.has_key('JAVA_HOME'): |
+ print 'JAVA_HOME = {0}'.format(str(sdk_environment['JAVA_HOME'])) |
+ |
# dart-editor[-trunk], dart-editor-(win/mac/linux)[-trunk/be/dev/stable] |
builder_name = str(options.name) |
- EDITOR_REGEXP = (r'^dart-editor(-(?P<system>(win|mac|linux)))?' + |
+ EDITOR_REGEXP = (r'^dart-editor(-(?P<installer>(installer)))?' |
+ '(-(?P<system>(win|mac|linux)))?' + |
'(-(?P<channel>(trunk|be|dev|stable)))?$') |
match = re.match(EDITOR_REGEXP, builder_name) |
if not match: |
@@ -399,120 +398,197 @@ def main(): |
CHANNEL = match.groupdict()['channel'] or 'be' |
SYSTEM = match.groupdict()['system'] |
+ BUILD_INSTALLER = bool(match.groupdict()['installer']) |
TRUNK_BUILD = CHANNEL == 'trunk' |
PLUGINS_BUILD = SYSTEM is None |
REVISION = revision |
- build_skip_tests = os.environ.get('DART_SKIP_RUNNING_TESTS') |
- sdk_environment = os.environ |
+ # Make sure the buildername and the options agree |
+ assert BUILD_INSTALLER == options.build_installer |
+ |
if username.startswith('chrome'): |
if TRUNK_BUILD: |
- to_bucket = 'gs://dart-editor-archive-trunk' |
+ bucket = 'gs://dart-editor-archive-trunk' |
else: |
- to_bucket = 'gs://dart-editor-archive-continuous' |
+ bucket = 'gs://dart-editor-archive-continuous' |
running_on_buildbot = True |
else: |
- to_bucket = 'gs://dart-editor-archive-testing' |
+ bucket = 'gs://dart-editor-archive-testing' |
running_on_buildbot = False |
sdk_environment['DART_LOCAL_BUILD'] = 'dart-editor-archive-testing' |
- GSU_PATH_REV = '%s/%s' % (to_bucket, REVISION) |
- GSU_PATH_LATEST = '%s/%s' % (to_bucket, 'latest') |
+ GSU_PATH_REV = '%s/%s' % (bucket, REVISION) |
+ GSU_PATH_LATEST = '%s/%s' % (bucket, 'latest') |
GSU_API_DOCS_PATH = '%s/%s' % (GSU_API_DOCS_BUCKET, REVISION) |
homegsutil = join(DART_PATH, 'third_party', 'gsutil', 'gsutil') |
gsu = gsutil.GsUtil(False, homegsutil, |
running_on_buildbot=running_on_buildbot) |
- InstallDartium(buildroot, buildout, buildos, gsu) |
- if sdk_environment.has_key('JAVA_HOME'): |
- print 'JAVA_HOME = {0}'.format(str(sdk_environment['JAVA_HOME'])) |
- |
- if not PLUGINS_BUILD: |
- StartBuildStep('create_sdk') |
- EnsureDirectoryExists(buildout) |
- try: |
- sdk_zip = CreateSDK(buildout) |
- except: |
- BuildStepFailure() |
- |
- if builder_name.startswith('dart-editor-linux'): |
- StartBuildStep('api_docs') |
- try: |
- CreateApiDocs(buildout) |
- except: |
- BuildStepFailure() |
- |
- StartBuildStep(builder_name) |
- |
- if PLUGINS_BUILD: |
- status = BuildUpdateSite(ant, revision, builder_name, buildroot, buildout, |
- editorpath, buildos) |
- return status |
- |
- with utils.TempDir('ExtraArtifacts') as extra_artifacts: |
- #tell the ant script where to write the sdk zip file so it can |
- #be expanded later |
- status = ant.RunAnt('.', 'build_rcp.xml', revision, builder_name, |
- buildroot, buildout, editorpath, buildos, |
- sdk_zip=sdk_zip, |
- running_on_bot=running_on_buildbot, |
- extra_artifacts=extra_artifacts) |
- #the ant script writes a property file in a known location so |
- #we can read it. |
- properties = ReadPropertyFile(buildos, ant_property_file.name) |
- |
- if not properties: |
- raise Exception('no data was found in file {%s}' |
- % ant_property_file.name) |
- if status: |
- if properties['build.runtime']: |
- PrintErrorLog(properties['build.runtime']) |
- return status |
- |
- #For the dart-editor build, return at this point. |
- #We don't need to install the sdk+dartium, run tests, or copy to google |
- #storage. |
- if not buildos: |
- print 'skipping sdk and dartium steps for dart-editor build' |
- return 0 |
- |
- #This is an override for local testing |
- force_run_install = os.environ.get('FORCE_RUN_INSTALL') |
- |
- if force_run_install or (not PLUGINS_BUILD): |
- InstallSdk(buildroot, buildout, buildos, buildout) |
- InstallDartium(buildroot, buildout, buildos, gsu) |
- |
- if status: |
+ def build_installer(): |
+ def old_location_pair(arch, extension): |
+ """Returns a tuple (zip_file, installer_file) of google cloud storage |
+ locations.""" |
+ os_rename = {'win': 'win32', 'mac': 'macos', 'linux': 'linux'} |
+ system = os_rename[SYSTEM] |
+ return ( |
+ ("%s/darteditor-%s-%s.zip" % (GSU_PATH_REV, system, arch)), |
+ ("%s/darteditor-installer-%s-%s.%s" |
+ % (GSU_PATH_REV, system, arch, extension))) |
+ |
+ def create_mac_installer(arch): |
+ with utils.TempDir('build_editor_installer') as temp_dir: |
+ with utils.ChangedWorkingDirectory(temp_dir): |
+ (gsu_editor_zip, gsu_editor_dmg) = old_location_pair(arch, 'dmg') |
+ # Fetch the editor zip file from the old location. |
+ if gsu.Copy(gsu_editor_zip, 'editor.zip', False): |
+ raise Exception("gsutil command failed, aborting.") |
+ |
+ # Unzip the editor (which contains a directory named 'dart'). |
+ bot_utils.run(['unzip', 'editor.zip']) |
+ assert os.path.exists('dart') and os.path.isdir('dart') |
+ |
+ # Build the dmg installer |
+ dmg_installer = os.path.join(temp_dir,'darteditor-installer.dmg') |
+ dart_folder_icon = os.path.join(DART_PATH, |
+ 'editor/tools/plugins/com.google.dart.tools.ui/' + |
+ 'icons/dart_about_140_160.png') |
+ dmg_builder = os.path.join(DART_PATH, 'tools', |
+ 'mac_build_editor_dmg.sh') |
+ bot_utils.run([dmg_builder, dmg_installer, 'dart', |
+ dart_folder_icon, "Dart Distribution"]) |
+ assert os.path.isfile(dmg_installer) |
+ |
+ # Archive to old bucket |
+ # TODO(kustermann/ricow): Remove all the old archiving code, |
+ # once everything points to the new location. |
+ if gsu.Copy(dmg_installer, gsu_editor_dmg): |
+ raise Exception("gsutil command failed, aborting.") |
+ |
+ # Archive to new bucket |
+ # NOTE: This is a little bit hackisch, we fetch the editor from |
+ # the old bucket and archive the dmg to the new bucket here. |
+ DartArchiveUploadInstaller(arch, dmg_installer, 'dmg', |
+ release_type=bot_utils.ReleaseType.SIGNED) |
+ |
+ if SYSTEM == 'mac': |
+ for arch in ['32', '64']: |
+ create_mac_installer(arch) |
+ else: |
+ raise Exception( |
+ "We currently cannot build installers for %s" % SYSTEM) |
+ def build_editor(sdk_zip): |
+ ant_property_file = tempfile.NamedTemporaryFile(suffix='.property', |
+ prefix='AntProperties', |
+ delete=False) |
+ ant_property_file.close() |
+ ant = AntWrapper(ant_property_file.name, os.path.join(antpath, 'bin'), |
+ bzip2libpath) |
+ |
+ ant.RunAnt(os.getcwd(), '', '', '', '', |
+ '', '', buildos, ['-diagnostics']) |
+ |
+ if not os.path.exists(buildout): |
+ os.makedirs(buildout) |
+ |
+ # clean out old build artifacts |
+ for f in os.listdir(buildout): |
+ if ('dartsdk-' in f) or ('darteditor-' in f) or ('dart-editor-' in f): |
+ os.remove(join(buildout, f)) |
+ |
+ InstallDartium(buildroot, buildout, buildos, gsu) |
+ |
+ if not PLUGINS_BUILD: |
+ StartBuildStep('create_sdk') |
+ EnsureDirectoryExists(buildout) |
+ try: |
+ sdk_zip = CreateSDK(buildout) |
+ except: |
+ BuildStepFailure() |
+ |
+ |
+ if builder_name.startswith('dart-editor-linux'): |
+ StartBuildStep('api_docs') |
+ try: |
+ CreateApiDocs(buildout) |
+ except: |
+ BuildStepFailure() |
+ |
+ StartBuildStep(builder_name) |
+ |
+ if PLUGINS_BUILD: |
+ status = BuildUpdateSite(ant, revision, builder_name, buildroot, |
+ buildout, editorpath, buildos) |
return status |
- if not build_skip_tests: |
- RunEditorTests(buildout, buildos) |
- |
- if buildos: |
- StartBuildStep('upload_artifacts') |
- |
- _InstallArtifacts(buildout, buildos, extra_artifacts) |
- |
- # dart-editor-linux.gtk.x86.zip --> darteditor-linux-32.zip |
- RenameRcpZipFiles(buildout) |
+ with utils.TempDir('ExtraArtifacts') as extra_artifacts: |
+ # Tell the ant script where to write the sdk zip file so it can |
+ # be expanded later |
+ status = ant.RunAnt('.', 'build_rcp.xml', revision, builder_name, |
+ buildroot, buildout, editorpath, buildos, |
+ sdk_zip=sdk_zip, |
+ running_on_bot=running_on_buildbot, |
+ extra_artifacts=extra_artifacts) |
+ # The ant script writes a property file in a known location so |
+ # we can read it. |
+ properties = ReadPropertyFile(buildos, ant_property_file.name) |
+ |
+ if not properties: |
+ raise Exception('no data was found in file {%s}' |
+ % ant_property_file.name) |
+ if status: |
+ if properties['build.runtime']: |
+ PrintErrorLog(properties['build.runtime']) |
+ return status |
+ |
+ # For the dart-editor build, return at this point. |
+ # We don't need to install the sdk+dartium, run tests, or copy to google |
+ # storage. |
+ if not buildos: |
+ print 'skipping sdk and dartium steps for dart-editor build' |
+ return 0 |
+ |
+ # This is an override for local testing |
+ force_run_install = os.environ.get('FORCE_RUN_INSTALL') |
+ |
+ if force_run_install or (not PLUGINS_BUILD): |
+ InstallSdk(buildroot, buildout, buildos, buildout) |
+ InstallDartium(buildroot, buildout, buildos, gsu) |
+ |
+ if status: |
+ return status |
+ |
+ if not build_skip_tests: |
+ RunEditorTests(buildout, buildos) |
+ |
+ if buildos: |
+ StartBuildStep('upload_artifacts') |
+ |
+ _InstallArtifacts(buildout, buildos, extra_artifacts) |
+ |
+ # dart-editor-linux.gtk.x86.zip --> darteditor-linux-32.zip |
+ RenameRcpZipFiles(buildout) |
+ |
+ PostProcessEditorBuilds(buildout) |
+ |
+ if running_on_buildbot: |
+ version_file = _FindVersionFile(buildout) |
+ if version_file: |
+ UploadFile(version_file, False) |
+ DartArchiveUploadVersionFile(version_file) |
+ |
+ found_zips = _FindRcpZipFiles(buildout) |
+ for zipfile in found_zips: |
+ UploadFile(zipfile) |
+ DartArchiveUploadEditorZipFile(zipfile) |
- PostProcessEditorBuilds(buildout) |
- |
- if running_on_buildbot: |
- version_file = _FindVersionFile(buildout) |
- if version_file: |
- UploadFile(version_file, False) |
- DartArchiveUploadVersionFile(version_file) |
- |
- found_zips = _FindRcpZipFiles(buildout) |
- for zipfile in found_zips: |
- UploadFile(zipfile) |
- DartArchiveUploadEditorZipFile(zipfile) |
+ return 0 |
- return 0 |
+ if BUILD_INSTALLER: |
+ build_installer() |
+ else: |
+ build_editor(sdk_zip) |
finally: |
if ant_property_file is not None: |
print 'cleaning up temp file {0}'.format(ant_property_file.name) |
@@ -698,7 +774,8 @@ def InstallDartiumFromDartArchive(buildroot, buildout, buildos, gsu): |
# Always download as local_name.zip |
tmp_zip_file = os.path.join(tmp_dir, "%s.zip" % local_name) |
if not os.path.exists(tmp_zip_file): |
- gsu.Copy(dartiumFile, tmp_zip_file, False) |
+ if gsu.Copy(dartiumFile, tmp_zip_file, False): |
+ raise Exception("gsutil command failed, aborting.") |
# Dartium is unzipped into unzip_dir/dartium-*/ |
dartium_zip = ziputils.ZipUtil(tmp_zip_file, buildos) |
dartium_zip.UnZip(unzip_dir) |
@@ -776,7 +853,8 @@ def InstallDartiumFromOldDartiumArchive(buildroot, buildout, buildos, gsu): |
tmp_zip_file = os.path.join(tmp_dir, basename) |
if not os.path.exists(tmp_zip_file): |
- gsu.Copy(dartiumFile, tmp_zip_file, False) |
+ if gsu.Copy(dartiumFile, tmp_zip_file, False): |
+ raise Exception("gsutil command failed, aborting.") |
# Upload dartium zip to make sure we have consistent dartium downloads |
UploadFile(tmp_zip_file) |