#!/usr/bin/env python3 # 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)