blob: 55db5b6368251ea9a0da497d093e9b954c1a9ee0 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright (c) 2022, the R8 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.
import argparse
from enum import Enum
import os
from os.path import join
import shutil
import subprocess
import sys
import utils
import create_maven_release
class Configuration(Enum):
jdk8 = 'jdk8'
jdk11_legacy = 'jdk11-legacy'
def __str__(self):
return self.value
def parse_options():
parser = argparse.ArgumentParser(
description='Local desugared library repository for desugared library configurations')
parser.add_argument('--repo-root', '--repo_root',
default='/tmp/repo',
metavar=('<path>'),
help='Location for Maven repository.')
parser.add_argument('--clear-repo', '--clear_repo',
default=False,
action='store_true',
help='Clear the Maven repository so it only has one version present')
parser.add_argument('--configuration', default='jdk8', type=Configuration, choices=list(Configuration))
parser.add_argument('--desugar-jdk-libs-checkout', '--desugar_jdk_libs_checkout',
default=None,
metavar=('<path>'),
help='Use existing checkout of github.com/google/desugar_jdk_libs.')
args = parser.parse_args()
return args
def jar_or_pom_file(unzip_dir, artifact, version, extension):
return join(
unzip_dir,
'com',
'android',
'tools',
artifact,
version,
artifact + '-' + version + '.' + extension)
def jar_file(unzip_dir, artifact, version):
return jar_or_pom_file(unzip_dir, artifact, version, 'jar')
def pom_file(unzip_dir, artifact, version):
return jar_or_pom_file(unzip_dir, artifact, version, 'pom')
def main():
args = parse_options()
if args.clear_repo:
shutil.rmtree(args.repo_root, ignore_errors=True)
utils.makedirs_if_needed(args.repo_root)
configuration = (utils.DESUGAR_CONFIGURATION
if args.configuration is Configuration.jdk8
else utils.DESUGAR_CONFIGURATION_JDK11_LEGACY)
implementation = (utils.DESUGAR_IMPLEMENTATION
if args.configuration is Configuration.jdk8
else utils.DESUGAR_IMPLEMENTATION_JDK11)
version_file = ('VERSION.txt'
if args.configuration is Configuration.jdk8 else
'VERSION_JDK11.txt')
with utils.TempDir() as tmp_dir:
version = utils.desugar_configuration_version(configuration)
# Checkout desugar_jdk_libs from GitHub
use_existing_checkout = args.desugar_jdk_libs_checkout != None
checkout_dir = (args.desugar_jdk_libs_checkout
if use_existing_checkout
else join(tmp_dir, 'desugar_jdk_libs'))
if (not use_existing_checkout):
utils.RunCmd(['git', 'clone', 'https://github.com/google/desugar_jdk_libs.git', checkout_dir])
with utils.ChangedWorkingDirectory(checkout_dir):
with open(version_file) as version_file:
version_file_lines = version_file.readlines()
for line in version_file_lines:
if not line.startswith('#'):
desugar_jdk_libs_version = line.strip()
if (version != desugar_jdk_libs_version):
raise Exception(
"Version mismatch. Configuration has version '"
+ version
+ "', and desugar_jdk_libs has version '"
+ desugar_jdk_libs_version
+ "'")
# Build desugared library configuration.
print("Building desugared library configuration " + version)
maven_zip = join(tmp_dir, 'desugar_configuration.zip')
create_maven_release.generate_desugar_configuration_maven_zip(
maven_zip,
configuration,
implementation)
unzip_dir = join(tmp_dir, 'desugar_jdk_libs_configuration_unzipped')
cmd = ['unzip', '-q', maven_zip, '-d', unzip_dir]
utils.RunCmd(cmd)
cmd = [
'mvn',
'deploy:deploy-file',
'-Durl=file:' + args.repo_root,
'-DrepositoryId=someName',
'-Dfile=' + jar_file(unzip_dir, 'desugar_jdk_libs_configuration', version),
'-DpomFile=' + pom_file(unzip_dir, 'desugar_jdk_libs_configuration', version)]
utils.RunCmd(cmd)
# Build desugared library.
print("Building desugared library " + version)
with utils.ChangedWorkingDirectory(checkout_dir):
utils.RunCmd([
'bazel',
'--bazelrc=/dev/null',
'build',
'--spawn_strategy=local',
'--verbose_failures',
(':maven_release'
if args.configuration is Configuration.jdk8
else ':maven_release_jdk11')])
unzip_dir = join(tmp_dir, 'desugar_jdk_libs_unzipped')
cmd = [
'unzip',
'-q',
join(checkout_dir,
'bazel-bin',
('desugar_jdk_libs.zip'
if args.configuration is Configuration.jdk8
else 'desugar_jdk_libs_jdk11.zip')),
'-d',
unzip_dir]
utils.RunCmd(cmd)
cmd = [
'mvn',
'deploy:deploy-file',
'-Durl=file:' + args.repo_root,
'-DrepositoryId=someName',
'-Dfile=' + jar_file(unzip_dir, 'desugar_jdk_libs', version),
'-DpomFile=' + pom_file(unzip_dir, 'desugar_jdk_libs', version)]
utils.RunCmd(cmd)
print()
print("Artifacts:")
print(" com.android.tools:desugar_jdk_libs_configuration:" + version)
print(" com.android.tools:desugar_jdk_libs:" + version)
print()
print("deployed to Maven repository at " + args.repo_root + ".")
print()
print("Add")
print()
print(" maven {")
print(" url uri('file://" + args.repo_root + "')")
print(" }")
print()
print("to dependencyResolutionManagement.repositories in settings.gradle, and use")
print('the "changing" property of the coreLibraryDesugaring dependency:')
print()
print(" coreLibraryDesugaring('com.android.tools:desugar_jdk_libs:" + version + "') {")
print(" changing = true")
print(" }")
print()
print('If not using the !changing" propertyRemember to run gradle with '
+ " --refresh-dependencies (./gradlew --refresh-dependencies ...) "
+ "to ensure the cache is not used when the same version is published."
+ "multiple times.")
if __name__ == '__main__':
sys.exit(main())