blob: e53b0c9896fd2212dc8492b363ef7d2252a46994 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2015 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.
"""Prepares pub packages for upload."""
# NOTE: Requires the following build artifacts:
# *) out/Config/gen/dart-pkg
# *) out/Config/apks/
# By default Config is 'android_Release'
import argparse
import os
import shutil
import tempfile
def remove_empty_dirs(root_dir):
for root, dirs, _ in os.walk(root_dir):
for name in dirs:
fname = os.path.join(root, name)
if not os.listdir(fname):
os.removedirs(fname)
def copy_package(src_dir, dst_dir, ignore=None):
# Remove existing destination directory.
shutil.rmtree(dst_dir, True)
shutil.copytree(src_dir, dst_dir, symlinks=False, ignore=ignore)
def install_mojo_license_and_authors_files(src_root, dst_dir):
shutil.copy(os.path.join(src_root, 'LICENSE'), dst_dir)
shutil.copy(os.path.join(src_root, 'AUTHORS'), dst_dir)
def main():
parser = argparse.ArgumentParser(
description='Prepare pub packages for upload')
parser.add_argument('--config',
type=str,
default='android_Release')
parser.add_argument('--src-root',
type=str,
default='.')
parser.add_argument('--packages',
default=['mojo', 'mojom', 'mojo_services'])
parser.add_argument('--out-dir',
default=None)
parser.add_argument('build_dir',
type=str)
args = parser.parse_args()
rel_build_dir = os.path.join(args.build_dir, args.config)
build_dir = os.path.abspath(rel_build_dir)
sdk_dir = os.path.abspath(args.src_root)
print('Using SDK in %s' % sdk_dir)
print('Using build in %s' % build_dir)
temp_dir = args.out_dir
if temp_dir:
try:
shutil.rmtree(temp_dir)
except OSError:
pass
os.makedirs(temp_dir)
else:
# Create a temporary directory to copy files into.
temp_dir = tempfile.mkdtemp(prefix='pub_packages-')
print('Packages ready to be uploaded in %s' % temp_dir)
# Copy packages
dart_pkg_dir = os.path.join(build_dir, 'gen', 'dart-pkg')
for package in args.packages:
print('Preparing package %s' % package)
src_dir = os.path.join(dart_pkg_dir, package)
dst_dir = os.path.join(temp_dir, package)
ignore = None
# Special case 'mojom' package to not copy generated mojom.dart files.
if package == 'mojom':
ignore = shutil.ignore_patterns('*.mojom.dart')
copy_package(src_dir, dst_dir, ignore)
# Special case 'mojom' package to remove empty directories.
if package == 'mojom':
remove_empty_dirs(dst_dir)
install_mojo_license_and_authors_files(sdk_dir, dst_dir)
if __name__ == '__main__':
main()