blob: 7c63e0ca4b038de39be1a6567fdb3ba983622e22 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2019 The Dart project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import datetime
import os
import requests
import subprocess
def env_var(var):
try:
return os.environ[var]
except KeyError:
return ''
FLUTTER_HOME = env_var('FLUTTER_HOME')
ENGINE_HOME = env_var('ENGINE_HOME')
DART_SDK_HOME = env_var('DART_SDK_HOME')
NO_COLOR = env_var('TERM') == 'dumb'
ERROR_ROLL_SUCCESS = 0
ERROR_GCLIENT_SYNC_FAILED = 1
ERROR_BUILD_FAILED = 2
ERROR_PKG_FLUTTER_FAILED = 3
ERROR_FLUTTER_GALLERY_FAILED = 4
ERROR_MISSING_ROOTS = 5
ERROR_LICENSE_SCRIPT_FAILED = 6
ERROR_NO_SUITABLE_COMMIT = 7
ERROR_OLD_COMMIT_PROVIDED = 8
ERROR_FLUTTER_DOCTOR_FAILED = 9
class DartAutorollerException(Exception):
pass
def c_green():
if NO_COLOR:
return ''
return '\033[92m'
def c_yellow():
if NO_COLOR:
return ''
return '\033[93m'
def c_red():
if NO_COLOR:
return ''
return '\033[91m'
def c_end():
if NO_COLOR:
return ''
return '\033[0m'
STATUS_LABEL = c_green() + '[STATUS, {}] ' + c_end()
WARNING_LABEL = c_yellow() + '[WARNING, {}] ' + c_end()
ERROR_LABEL = c_red() + '[ERROR, {}] ' + c_end()
def engine_home():
return ENGINE_HOME
def set_engine_home(engine_home):
global ENGINE_HOME
ENGINE_HOME = engine_home
def flutter_home():
return FLUTTER_HOME
def set_flutter_home(flutter_home):
global FLUTTER_HOME
FLUTTER_HOME = flutter_home
def dart_sdk_home():
return DART_SDK_HOME
def set_dart_sdk_home(dart_sdk_home):
global DART_SDK_HOME
DART_SDK_HOME = dart_sdk_home
def get_timestamp():
return datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')
def print_status(msg):
print(STATUS_LABEL.format(get_timestamp()) + msg)
def print_warning(msg):
print(WARNING_LABEL.format(get_timestamp()) + msg)
def print_error(msg):
print(ERROR_LABEL.format(get_timestamp()) + msg)
def engine_golden_licenses_path():
return os.path.join(ENGINE_HOME, 'flutter', 'ci', 'licenses_golden')
def engine_license_script_path():
return os.path.join(ENGINE_HOME, 'flutter', 'ci', 'licenses.sh')
def engine_license_script_dart_path():
return os.path.join(engine_license_script_package_path(), 'lib', 'main.dart')
def engine_license_script_package_path():
return os.path.join(ENGINE_HOME, 'flutter', 'tools', 'licenses')
def engine_license_script_output_path():
return os.path.join(ENGINE_HOME, 'out', 'licenses')
def engine_flutter_path():
return os.path.join(ENGINE_HOME, 'flutter')
def flutter_deps_path():
return os.path.join(ENGINE_HOME, 'flutter', 'DEPS')
def flutter_gallery_path():
return os.path.join(FLUTTER_HOME, 'examples', 'flutter_gallery')
def license_script_output_path():
return os.path.join(ENGINE_HOME, 'out', 'license_script_output')
def package_flutter_path():
return os.path.join(FLUTTER_HOME, 'packages', 'flutter')
def sky_license_file_path():
return os.path.join(ENGINE_HOME, 'flutter', 'sky', 'packages', 'sky_engine', 'LICENSE')
def update_dart_deps_path():
return os.path.join(ENGINE_HOME, 'tools', 'dart', 'create_updated_flutter_deps.py')
# Returns True if `current` is a more recent commit than `potential_ancestor` in
# the git repository at `repo_path`.
def is_ancestor_commit(potential_ancestor, current, repo_path):
return (subprocess.Popen(['git',
'merge-base',
'--is-ancestor',
potential_ancestor,
current], cwd=repo_path).wait() == 0)