aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-04-12 13:55:13 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-04-12 13:55:13 +0000
commit24ecf9f7f236d58b1d99cc65c722986ff357c5a5 (patch)
tree06dc6aefc5afb43f1e5905294ca43040eb8b0601
parentad33652c0687ee8218d551b10d04dffe2b583ec7 (diff)
parent1332595b84e5d13688288210b090fbb3a114e23e (diff)
downloadcommon-android12-mainline-wifi-release.tar.gz
Snap for 8441503 from 1332595b84e5d13688288210b090fbb3a114e23e to mainline-wifi-releaseandroid-mainline-12.0.0_r126aml_wif_311811030android12-mainline-wifi-release
Change-Id: I2de1dd9be3cc47898947c6d89ec3e82878bad11e
-rwxr-xr-xbuild/mainline_modules_sdks.py9
-rw-r--r--build/mainline_modules_sdks_test.py18
-rwxr-xr-xtools/finalize_sdk.py85
3 files changed, 84 insertions, 28 deletions
diff --git a/build/mainline_modules_sdks.py b/build/mainline_modules_sdks.py
index 97f7a70b..626dee03 100755
--- a/build/mainline_modules_sdks.py
+++ b/build/mainline_modules_sdks.py
@@ -303,6 +303,8 @@ class SnapshotBuilder:
r_snapshot_dir = os.path.join(snapshot_dir, "for-R-build")
shutil.rmtree(r_snapshot_dir, ignore_errors=True)
+ build_number_file = os.path.join(self.out_dir, "soong/build_number.txt")
+
for module in modules:
apex = module.apex
dest_dir = os.path.join(r_snapshot_dir, apex)
@@ -323,6 +325,7 @@ class SnapshotBuilder:
bp.write(f"// {self.tool_path}\n")
bp.write(COPYRIGHT_BOILERPLATE)
aosp_apex = google_to_aosp_name(apex)
+
for library in module.for_r_build.sdk_libraries:
module_name = library.name
shared_library = str(library.shared_library).lower()
@@ -365,6 +368,12 @@ java_sdk_library_import {{
}}
""")
+ # Copy the build_number.txt file into the snapshot.
+ snapshot_build_number_file = os.path.join(
+ dest_dir, "snapshot-creation-build-number.txt")
+ shutil.copy(build_number_file, snapshot_build_number_file)
+
+ # Now zip up the files into a snapshot zip file.
base_file = os.path.join(r_snapshot_dir, sdk_name + "-current")
shutil.make_archive(base_file, "zip", dest_dir)
diff --git a/build/mainline_modules_sdks_test.py b/build/mainline_modules_sdks_test.py
index 6b77e14d..6d06303c 100644
--- a/build/mainline_modules_sdks_test.py
+++ b/build/mainline_modules_sdks_test.py
@@ -15,6 +15,7 @@
# limitations under the License.
"""Unit tests for mainline_modules_sdks.py."""
import dataclasses
+import pathlib
import re
import typing
from pathlib import Path
@@ -112,6 +113,10 @@ class TestProduceDist(unittest.TestCase):
return files
def test_unbundled_modules(self):
+ # Create the out/soong/build_number.txt file that is copied into the
+ # snapshots.
+ self.create_build_number_file()
+
modules = [
MAINLINE_MODULES_BY_APEX["com.android.art"],
MAINLINE_MODULES_BY_APEX["com.android.ipsec"],
@@ -175,11 +180,13 @@ class TestProduceDist(unittest.TestCase):
"com.android.ipsec/sdk_library/public/android.net.ipsec.ike-stubs.jar",
"com.android.ipsec/sdk_library/public/android.net.ipsec.ike.srcjar",
"com.android.ipsec/sdk_library/public/android.net.ipsec.ike.txt",
+ "com.android.ipsec/snapshot-creation-build-number.txt",
google_wifi_android_bp,
"com.google.android.wifi/sdk_library/public/framework-wifi-removed.txt",
"com.google.android.wifi/sdk_library/public/framework-wifi-stubs.jar",
"com.google.android.wifi/sdk_library/public/framework-wifi.srcjar",
"com.google.android.wifi/sdk_library/public/framework-wifi.txt",
+ "com.google.android.wifi/snapshot-creation-build-number.txt",
"ipsec-module-sdk-current.zip",
"wifi-module-sdk-current.zip",
], sorted(self.list_files_in_dir(r_snaphot_dir)))
@@ -263,7 +270,18 @@ class TestProduceDist(unittest.TestCase):
],
sorted(self.list_files_in_dir(self.tmp_dist_dir)))
+ def create_build_number_file(self):
+ soong_dir = os.path.join(self.tmp_out_dir, "soong")
+ os.makedirs(soong_dir, exist_ok=True)
+ build_number_file = os.path.join(soong_dir, "build_number.txt")
+ with open(build_number_file, "w", encoding="utf8") as f:
+ f.write("build-number")
+
def test_snapshot_build_order(self):
+ # Create the out/soong/build_number.txt file that is copied into the
+ # snapshots.
+ self.create_build_number_file()
+
subprocess_runner = unittest.mock.Mock(mm.SubprocessRunner)
snapshot_builder = FakeSnapshotBuilder(
tool_path="path/to/mainline_modules_sdks.sh",
diff --git a/tools/finalize_sdk.py b/tools/finalize_sdk.py
index c862d892..84fd762e 100755
--- a/tools/finalize_sdk.py
+++ b/tools/finalize_sdk.py
@@ -1,19 +1,27 @@
#!/usr/bin/python3
import argparse
+import glob
import os
import re
+import shutil
import subprocess
import sys
import tempfile
import zipfile
from collections import defaultdict
+from pathlib import Path
# See go/fetch_artifact for details on this script.
FETCH_ARTIFACT = '/google/data/ro/projects/android/fetch_artifact'
-BUILD_TARGET = 'mainline_modules-userdebug'
-ARTIFACT_PATTERN = 'mainline-sdks/*-%d.zip'
+COMPAT_REPO = Path('prebuilts/sdk')
+# This build target is used when fetching from a train build (TXXXXXXXX)
+BUILD_TARGET_TRAIN = 'train_build'
+# This build target is used when fetching from a non-train build (XXXXXXXX)
+BUILD_TARGET_CONTINUOUS = 'mainline_modules-user'
+# The glob of sdk artifacts to fetch
+ARTIFACT_PATTERN = 'mainline-sdks/current/{module_name}/sdk/*.zip'
COMMIT_TEMPLATE = """Finalize artifacts for extension SDK %d
Import from build id %s.
@@ -29,14 +37,14 @@ def fail(*args, **kwargs):
sys.exit(1)
def fetch_artifacts(target, build_id, artifact_path):
- tmpdir = tempfile.TemporaryDirectory().name
- os.mkdir(tmpdir)
+ tmpdir = Path(tempfile.TemporaryDirectory().name)
+ tmpdir.mkdir()
print('Fetching %s from %s ...' % (artifact_path, target))
fetch_cmd = [FETCH_ARTIFACT]
fetch_cmd.extend(['--bid', str(build_id)])
fetch_cmd.extend(['--target', target])
fetch_cmd.append(artifact_path)
- fetch_cmd.append(tmpdir)
+ fetch_cmd.append(str(tmpdir))
print("Running: " + ' '.join(fetch_cmd))
try:
subprocess.check_output(fetch_cmd, stderr=subprocess.STDOUT)
@@ -47,8 +55,8 @@ def fetch_artifacts(target, build_id, artifact_path):
def repo_for_sdk(filename):
module = filename.split('-')[0]
target_dir = ''
- if module == 'media': return 'prebuilts/module_sdk/Media'
- if module == 'tethering': return 'prebuilts/module_sdk/Connectivity'
+ if module == 'media': return Path('prebuilts/module_sdk/Media')
+ if module == 'tethering': return Path('prebuilts/module_sdk/Connectivity')
for dir in os.listdir('prebuilts/module_sdk/'):
if module.lower() in dir.lower():
if target_dir:
@@ -57,7 +65,7 @@ def repo_for_sdk(filename):
if not target_dir:
fail('Could not find a target dir for %s' % filename)
- return 'prebuilts/module_sdk/%s' % target_dir
+ return Path('prebuilts/module_sdk/%s' % target_dir)
def dir_for_sdk(filename, version):
base = str(version)
@@ -74,35 +82,56 @@ parser = argparse.ArgumentParser(description=('Finalize an extension SDK with pr
parser.add_argument('-f', '--finalize_sdk', type=int, required=True, help='The numbered SDK to finalize.')
parser.add_argument('-b', '--bug', type=int, required=True, help='The bug number to add to the commit message.')
parser.add_argument('-a', '--amend_last_commit', action="store_true", help='Amend current HEAD commits instead of making new commits.')
+parser.add_argument('-m', '--modules', action='append', help='Modules to include. Can be provided multiple times, or not at all for all modules.')
parser.add_argument('bid', help='Build server build ID')
args = parser.parse_args()
+build_target = BUILD_TARGET_TRAIN if args.bid[0] == 'T' else BUILD_TARGET_CONTINUOUS
branch_name = 'finalize-%d' % args.finalize_sdk
-cmdline = " ".join(filter(lambda x: x not in ['-a', '--amend_last_commit'], sys.argv))
+cmdline = " ".join([x for x in sys.argv if x not in ['-a', '--amend_last_commit']])
commit_message = COMMIT_TEMPLATE % (args.finalize_sdk, args.bid, cmdline, args.bug)
-
-tmpdir = fetch_artifacts(BUILD_TARGET, args.bid, ARTIFACT_PATTERN % args.finalize_sdk)
-
-created_dirs = defaultdict(list)
-
-for f in os.listdir(tmpdir):
- repo = repo_for_sdk(f)
- dir = dir_for_sdk(f, args.finalize_sdk)
- target_dir = os.path.join(repo, dir)
- if os.path.isfile(target_dir):
- print('Removing existing dir %s' % target_dir)
- shutil.rmtree(target_dir)
- with zipfile.ZipFile(os.path.join(tmpdir, f)) as zipFile:
- zipFile.extractall(target_dir)
-
- print('Created %s' % target_dir)
- created_dirs[repo].append(dir)
+module_names = args.modules
+if not module_names:
+ module_names = ['*']
+
+compat_dir = COMPAT_REPO.joinpath('extensions/%d' % args.finalize_sdk)
+if compat_dir.is_dir():
+ print('Removing existing dir %s' % compat_dir)
+ shutil.rmtree(compat_dir)
+
+created_dirs = defaultdict(set)
+for m in module_names:
+ tmpdir = fetch_artifacts(build_target, args.bid, ARTIFACT_PATTERN.format(module_name=m))
+ for f in tmpdir.iterdir():
+ repo = repo_for_sdk(f.name)
+ dir = dir_for_sdk(f.name, args.finalize_sdk)
+ target_dir = repo.joinpath(dir)
+ if target_dir.is_dir():
+ print('Removing existing dir %s' % target_dir)
+ shutil.rmtree(target_dir)
+ with zipfile.ZipFile(tmpdir.joinpath(f)) as zipFile:
+ zipFile.extractall(target_dir)
+
+ # Just capture the artifacts, not the bp files of finalized versions
+ os.remove(target_dir.joinpath('Android.bp'))
+
+ print('Created %s' % target_dir)
+ created_dirs[repo].add(dir)
+
+ # Copy api txt files to compat tracking dir
+ txt_files = [Path(p) for p in glob.glob(os.path.join(target_dir, 'sdk_library/*/*.txt'))]
+ for txt_file in txt_files:
+ api_type = txt_file.parts[-2]
+ dest_dir = compat_dir.joinpath(api_type, 'api')
+ os.makedirs(dest_dir, exist_ok = True)
+ shutil.copy(txt_file, dest_dir)
+ created_dirs[COMPAT_REPO].add(dest_dir.relative_to(COMPAT_REPO))
subprocess.check_output(['repo', 'start', branch_name] + list(created_dirs.keys()))
print('Running git commit')
for repo in created_dirs:
- git = ['git', '-C', repo]
- subprocess.check_output(git + ['add'] + created_dirs[repo])
+ git = ['git', '-C', str(repo)]
+ subprocess.check_output(git + ['add'] + list(created_dirs[repo]))
if args.amend_last_commit:
change_id = '\n' + re.search(r'Change-Id: [^\\n]+', str(subprocess.check_output(git + ['log', '-1']))).group(0)
subprocess.check_output(git + ['commit', '--amend', '-m', commit_message + change_id])