Index: dartium_tools/buildbot_annotated_steps.py |
diff --git a/dartium_tools/buildbot_annotated_steps.py b/dartium_tools/buildbot_annotated_steps.py |
deleted file mode 100755 |
index ed090c0415e63c5be43abb0fcb600ec514764b1b..0000000000000000000000000000000000000000 |
--- a/dartium_tools/buildbot_annotated_steps.py |
+++ /dev/null |
@@ -1,374 +0,0 @@ |
-#!/usr/bin/python |
- |
-# Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""Chromium buildbot steps |
- |
-Run the Dart layout tests. |
-""" |
- |
-import os |
-import platform |
-import re |
-import shutil |
-import socket |
-import subprocess |
-import sys |
-import imp |
- |
-BUILDER_NAME = 'BUILDBOT_BUILDERNAME' |
-REVISION = 'BUILDBOT_REVISION' |
-BUILDER_PATTERN = (r'^dartium-(mac|lucid64|lucid32|win)' |
- r'-(full|inc|debug)(-ninja)?(-(be|dev|stable|integration))?$') |
- |
-if platform.system() == 'Windows': |
- GSUTIL = 'e:/b/build/scripts/slave/gsutil.bat' |
-else: |
- GSUTIL = '/b/build/scripts/slave/gsutil' |
-ACL = 'public-read' |
-GS_SITE = 'gs://' |
-GS_URL = 'https://sandbox.google.com/storage/' |
-GS_DIR = 'dartium-archive' |
-LATEST = 'latest' |
-CONTINUOUS = 'continuous' |
- |
-REVISION_FILE = 'chrome/browser/ui/webui/dartvm_revision.h' |
- |
-# Add dartium tools and build/util to python path. |
-SRC_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
-TOOLS_PATH = os.path.join(SRC_PATH, 'dartium_tools') |
-DART_PATH = os.path.join(SRC_PATH, 'dart') |
-BUILD_UTIL_PATH = os.path.join(SRC_PATH, 'build/util') |
-# We limit testing on drt since it takes a long time to run |
-DRT_FILTER = 'html' |
- |
- |
-sys.path.extend([TOOLS_PATH, BUILD_UTIL_PATH]) |
-import archive |
-import utils |
- |
-bot_utils = imp.load_source('bot_utils', |
- os.path.join(DART_PATH, 'tools', 'bots', 'bot_utils.py')) |
- |
-def DartArchiveFile(local_path, remote_path, create_md5sum=False): |
- # Copy it to the new unified gs://dart-archive bucket |
- # TODO(kustermann/ricow): Remove all the old archiving code, once everything |
- # points to the new location |
- gsutil = bot_utils.GSUtil() |
- gsutil.upload(local_path, remote_path, public=True) |
- if create_md5sum: |
- # 'local_path' may have a different filename than 'remote_path'. So we need |
- # to make sure the *.md5sum file contains the correct name. |
- assert '/' in remote_path and not remote_path.endswith('/') |
- mangled_filename = remote_path[remote_path.rfind('/') + 1:] |
- local_md5sum = bot_utils.CreateChecksumFile(local_path, mangled_filename) |
- gsutil.upload(local_md5sum, remote_path + '.md5sum', public=True) |
- |
-def UploadDartiumVariant(revision, name, channel, arch, mode, zip_file): |
- name = name.replace('drt', 'content_shell') |
- system = sys.platform |
- |
- namer = bot_utils.GCSNamer(channel, bot_utils.ReleaseType.RAW) |
- remote_path = namer.dartium_variant_zipfilepath(revision, name, system, arch, |
- mode) |
- DartArchiveFile(zip_file, remote_path, create_md5sum=True) |
- return remote_path |
- |
-def ExecuteCommand(cmd): |
- """Execute a command in a subprocess. |
- """ |
- print 'Executing: ' + ' '.join(cmd) |
- try: |
- pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
- (output, error) = pipe.communicate() |
- if pipe.returncode != 0: |
- print 'Execution failed: ' + str(error) |
- return (pipe.returncode, output) |
- except: |
- import traceback |
- print 'Execution raised exception:', traceback.format_exc() |
- return (-1, '') |
- |
- |
-# TODO: Instead of returning a tuple we should make a class with these fields. |
-def GetBuildInfo(): |
- """Returns a tuple (name, dart_revision, version, mode, arch, channel, |
- is_full) where: |
- - name: A name for the build - the buildbot host if a buildbot. |
- - dart_revision: The dart revision. |
- - version: A version string corresponding to this build. |
- - mode: 'Debug' or 'Release' |
- - arch: target architecture |
- - channel: the channel this build is happening on |
- - is_full: True if this is a full build. |
- """ |
- os.chdir(SRC_PATH) |
- |
- name = None |
- version = None |
- mode = 'Release' |
- |
- # Populate via builder environment variables. |
- name = os.environ[BUILDER_NAME] |
- |
- # We need to chdir() to src/dart in order to get the correct revision number. |
- with utils.ChangedWorkingDirectory(DART_PATH): |
- dart_tools_utils = imp.load_source('dart_tools_utils', |
- os.path.join('tools', 'utils.py')) |
- dart_revision = dart_tools_utils.GetSVNRevision() |
- |
- version = dart_revision + '.0' |
- is_incremental = '-inc' in name |
- is_win_ninja = 'win-inc-ninja' in name |
- is_full = False |
- |
- pattern = re.match(BUILDER_PATTERN, name) |
- assert pattern |
- arch = 'x64' if pattern.group(1) == 'lucid64' else 'ia32' |
- if pattern.group(2) == 'debug': |
- mode = 'Debug' |
- is_full = pattern.group(2) == 'full' |
- channel = pattern.group(5) |
- if not channel: |
- channel = 'be' |
- |
- # Fall back if not on builder. |
- if not name: |
- name = socket.gethostname().split('.')[0] |
- |
- return (name, dart_revision, version, mode, arch, channel, is_full, |
- is_incremental, is_win_ninja) |
- |
- |
-def RunDartTests(mode, component, suite, arch, checked, test_filter=None, |
- is_win_ninja=False): |
- """Runs the Dart WebKit Layout tests. |
- """ |
- cmd = [sys.executable] |
- script = os.path.join(TOOLS_PATH, 'test.py') |
- cmd.append(script) |
- cmd.append('--buildbot') |
- cmd.append('--mode=' + mode) |
- cmd.append('--component=' + component) |
- cmd.append('--suite=' + suite) |
- cmd.append('--arch=' + arch) |
- cmd.append('--' + checked) |
- cmd.append('--no-show-results') |
- |
- if is_win_ninja: |
- cmd.append('--win-ninja-build') |
- |
- if test_filter: |
- cmd.append('--test-filter=' + test_filter) |
- |
- status = subprocess.call(cmd) |
- if status != 0: |
- print '@@@STEP_FAILURE@@@' |
- return status |
- |
- |
-def UploadDartTestsResults(layout_test_results_dir, name, version, |
- component, checked): |
- """Uploads test results to google storage. |
- """ |
- print ('@@@BUILD_STEP archive %s_layout_%s_tests results@@@' % |
- (component, checked)) |
- dir_name = os.path.dirname(layout_test_results_dir) |
- base_name = os.path.basename(layout_test_results_dir) |
- cwd = os.getcwd() |
- os.chdir(dir_name) |
- |
- archive_name = 'layout_test_results.zip' |
- archive.ZipDir(archive_name, base_name) |
- |
- target = '/'.join([GS_DIR, 'layout-test-results', name, component + '-' + |
- checked + '-' + version + '.zip']) |
- status = UploadArchive(os.path.abspath(archive_name), GS_SITE + target) |
- os.remove(archive_name) |
- if status == 0: |
- print ('@@@STEP_LINK@download@' + GS_URL + target + '@@@') |
- else: |
- print '@@@STEP_FAILURE@@@' |
- os.chdir(cwd) |
- |
- |
-def ListArchives(pattern): |
- """List the contents in Google storage matching the file pattern. |
- """ |
- cmd = [GSUTIL, 'ls', pattern] |
- (status, output) = ExecuteCommand(cmd) |
- if status != 0: |
- return [] |
- return output.split(os.linesep) |
- |
- |
-def RemoveArchives(archives): |
- """Remove the list of archives in Google storage. |
- """ |
- for archive in archives: |
- if archive.find(GS_SITE) == 0: |
- cmd = [GSUTIL, 'rm', archive.rstrip()] |
- (status, _) = ExecuteCommand(cmd) |
- if status != 0: |
- return status |
- return 0 |
- |
- |
-def UploadArchive(source, target): |
- """Upload an archive zip file to Google storage. |
- """ |
- |
- # Upload file. |
- cmd = [GSUTIL, 'cp', source, target] |
- (status, output) = ExecuteCommand(cmd) |
- if status != 0: |
- return status |
- print 'Uploaded: ' + output |
- |
- # Set ACL. |
- if ACL is not None: |
- cmd = [GSUTIL, 'setacl', ACL, target] |
- (status, output) = ExecuteCommand(cmd) |
- return status |
- |
- |
-def main(): |
- (dartium_bucket, dart_revision, version, mode, arch, channel, |
- is_full, is_incremental, is_win_ninja) = GetBuildInfo() |
- drt_bucket = dartium_bucket.replace('dartium', 'drt') |
- chromedriver_bucket = dartium_bucket.replace('dartium', 'chromedriver') |
- |
- def archiveAndUpload(archive_latest=False): |
- print '@@@BUILD_STEP dartium_generate_archive@@@' |
- cwd = os.getcwd() |
- dartium_archive = dartium_bucket + '-' + version |
- drt_archive = drt_bucket + '-' + version |
- chromedriver_archive = chromedriver_bucket + '-' + version |
- dartium_zip, drt_zip, chromedriver_zip = \ |
- archive.Archive(SRC_PATH, mode, dartium_archive, |
- drt_archive, chromedriver_archive, |
- is_win_ninja=is_win_ninja) |
- status = upload('dartium', dartium_bucket, os.path.abspath(dartium_zip), |
- archive_latest=archive_latest) |
- if status == 0: |
- status = upload('drt', drt_bucket, os.path.abspath(drt_zip), |
- archive_latest=archive_latest) |
- if status == 0: |
- status = upload('chromedriver', chromedriver_bucket, |
- os.path.abspath(chromedriver_zip), |
- archive_latest=archive_latest) |
- os.chdir(cwd) |
- if status != 0: |
- print '@@@STEP_FAILURE@@@' |
- return status |
- |
- def upload(module, bucket, zip_file, archive_latest=False): |
- status = 0 |
- |
- # We archive to the new location on all builders except for -inc builders. |
- if not is_incremental: |
- print '@@@BUILD_STEP %s_upload_archive_new @@@' % module |
- # We archive the full builds to gs://dart-archive/ |
- revision = 'latest' if archive_latest else dart_revision |
- remote_path = UploadDartiumVariant(revision, module, channel, arch, |
- mode.lower(), zip_file) |
- print '@@@STEP_LINK@download@' + remote_path + '@@@' |
- |
- # We archive to the old locations only for bleeding_edge builders |
- if channel == 'be': |
- _, filename = os.path.split(zip_file) |
- if not archive_latest: |
- target = '/'.join([GS_DIR, bucket, filename]) |
- print '@@@BUILD_STEP %s_upload_archive@@@' % module |
- status = UploadArchive(zip_file, GS_SITE + target) |
- print '@@@STEP_LINK@download@' + GS_URL + target + '@@@' |
- else: |
- print '@@@BUILD_STEP %s_upload_latest@@@' % module |
- # Clear latest for this build type. |
- old = '/'.join([GS_DIR, LATEST, bucket + '-*']) |
- old_archives = ListArchives(GS_SITE + old) |
- |
- # Upload the new latest and remove unnecessary old ones. |
- target = GS_SITE + '/'.join([GS_DIR, LATEST, filename]) |
- status = UploadArchive(zip_file, target) |
- if status == 0: |
- RemoveArchives( |
- [iarch for iarch in old_archives if iarch != target]) |
- else: |
- print 'Upload failed' |
- |
- # Upload unversioned name to continuous site for incremental |
- # builds. |
- if '-inc' in bucket: |
- continuous_name = bucket[:bucket.find('-inc')] |
- target = GS_SITE + '/'.join([GS_DIR, CONTINUOUS, |
- continuous_name + '.zip']) |
- status = UploadArchive(zip_file, target) |
- |
- print ('@@@BUILD_STEP %s_upload_archive is over (status = %s)@@@' % |
- (module, status)) |
- |
- return status |
- |
- def test(component, suite, checked, test_filter=None): |
- """Test a particular component (e.g., dartium or frog). |
- """ |
- print '@@@BUILD_STEP %s_%s_%s_tests@@@' % (component, suite, checked) |
- sys.stdout.flush() |
- layout_test_results_dir = os.path.join(SRC_PATH, 'webkit', mode, |
- 'layout-test-results') |
- shutil.rmtree(layout_test_results_dir, ignore_errors=True) |
- status = RunDartTests(mode, component, suite, arch, checked, |
- test_filter=test_filter, is_win_ninja=is_win_ninja) |
- |
- if suite == 'layout' and status != 0: |
- UploadDartTestsResults(layout_test_results_dir, dartium_bucket, version, |
- component, checked) |
- return status |
- |
- result = 0 |
- |
- # Archive to the revision bucket unless integration build |
- if channel != 'integration': |
- result = archiveAndUpload(archive_latest=False) |
- |
- # On dev/stable we archive to the latest bucket as well |
- if channel != 'be': |
- result = archiveAndUpload(archive_latest=True) or result |
- |
- # Run layout tests |
- if mode == 'Release' or platform.system() != 'Darwin': |
- result = test('drt', 'layout', 'unchecked') or result |
- result = test('drt', 'layout', 'checked') or result |
- |
- # Run dartium tests |
- result = test('dartium', 'core', 'unchecked') or result |
- result = test('dartium', 'core', 'checked') or result |
- |
- # Run ContentShell tests |
- # NOTE: We don't run ContentShell tests on dartium-*-inc builders to keep |
- # cycle times down. |
- if not is_incremental: |
- # If we run all checked tests on dartium, we restrict the number of |
- # unchecked tests on drt to DRT_FILTER |
- result = test('drt', 'core', 'unchecked', test_filter=DRT_FILTER) or result |
- result = test('drt', 'core', 'checked') or result |
- |
- # On the 'be' channel, we only archive to the latest bucket if all tests ran |
- # successfull. |
- if result == 0 and channel == 'be': |
- result = archiveAndUpload(archive_latest=True) or result |
- |
- # BIG HACK |
- # Normal ninja clobbering does not work due to symlinks/python on windows |
- # Full clobbering before building does not work since it will destroy |
- # the ninja build files |
- # So we basically clobber at the end here |
- if is_full and platform.system() == 'Windows': |
- print '@@@BUILD_STEP Dartium hackish clobber@@@' |
- shutil.rmtree(os.path.join(SRC_PATH, 'out'), ignore_errors=True) |
- |
-if __name__ == '__main__': |
- sys.exit(main()) |