Create metadata json file for each module am: 653f881161
Original change: https://android-review.googlesource.com/c/platform/packages/modules/common/+/2304275 Change-Id: Ibe5e456ddab06776ebd075811cfb7037074b5f07 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -288,6 +288,12 @@ def sdk_snapshot_api_diff_file(snapshots_dir, sdk_name):
|
|||||||
return os.path.join(snapshots_dir, f"{sdk_name}-{SDK_VERSION}-api-diff.txt")
|
return os.path.join(snapshots_dir, f"{sdk_name}-{SDK_VERSION}-api-diff.txt")
|
||||||
|
|
||||||
|
|
||||||
|
def sdk_snapshot_gantry_metadata_json_file(snapshots_dir, sdk_name):
|
||||||
|
"""Get the path to the sdk snapshot gantry metadata json file."""
|
||||||
|
return os.path.join(snapshots_dir,
|
||||||
|
f"{sdk_name}-{SDK_VERSION}-gantry-metadata.json")
|
||||||
|
|
||||||
|
|
||||||
# The default time to use in zip entries. Ideally, this should be the same as is
|
# The default time to use in zip entries. Ideally, this should be the same as is
|
||||||
# used by soong_zip and ziptime but there is no strict need for that to be the
|
# used by soong_zip and ziptime but there is no strict need for that to be the
|
||||||
# case. What matters is this is a fixed time so that the contents of zip files
|
# case. What matters is this is a fixed time so that the contents of zip files
|
||||||
@@ -541,8 +547,10 @@ java_sdk_library_import {{
|
|||||||
capture_output=True).stdout.decode("utf-8")
|
capture_output=True).stdout.decode("utf-8")
|
||||||
file_object.write(diff)
|
file_object.write(diff)
|
||||||
|
|
||||||
def create_snapshot_api_diff(self, sdk, target_dict, snapshots_dir):
|
def create_snapshot_gantry_metadata_and_api_diff(self, sdk, target_dict,
|
||||||
"""Creates api diff files for each module sdk.
|
snapshots_dir,
|
||||||
|
module_extension_version):
|
||||||
|
"""Creates gantry metadata and api diff files for each module sdk.
|
||||||
|
|
||||||
For each module sdk, the scope targets are obtained for each java sdk
|
For each module sdk, the scope targets are obtained for each java sdk
|
||||||
library and the api diff files are generated by performing a diff
|
library and the api diff files are generated by performing a diff
|
||||||
@@ -551,6 +559,8 @@ java_sdk_library_import {{
|
|||||||
sdk_info_file = sdk_snapshot_info_file(snapshots_dir, sdk)
|
sdk_info_file = sdk_snapshot_info_file(snapshots_dir, sdk)
|
||||||
sdk_zip_file = sdk_snapshot_zip_file(snapshots_dir, sdk)
|
sdk_zip_file = sdk_snapshot_zip_file(snapshots_dir, sdk)
|
||||||
sdk_api_diff_file = sdk_snapshot_api_diff_file(snapshots_dir, sdk)
|
sdk_api_diff_file = sdk_snapshot_api_diff_file(snapshots_dir, sdk)
|
||||||
|
|
||||||
|
gantry_metadata_dict = {}
|
||||||
with open(
|
with open(
|
||||||
sdk_api_diff_file, "w",
|
sdk_api_diff_file, "w",
|
||||||
encoding="utf8") as sdk_api_diff_file_object:
|
encoding="utf8") as sdk_api_diff_file_object:
|
||||||
@@ -569,14 +579,39 @@ java_sdk_library_import {{
|
|||||||
sdk_zip_file, removed_api,
|
sdk_zip_file, removed_api,
|
||||||
latest_removed_api, snapshots_dir)
|
latest_removed_api, snapshots_dir)
|
||||||
|
|
||||||
def build_snapshot_api_diff(self, modules, target_dict, snapshots_dir):
|
gantry_metadata_dict["api_diff_file"] = sdk_api_diff_file.rsplit(
|
||||||
"""For each module sdk, create the api diff file."""
|
"/", 1)[-1]
|
||||||
|
gantry_metadata_dict["api_diff_file_size"] = os.path.getsize(
|
||||||
|
sdk_api_diff_file)
|
||||||
|
gantry_metadata_dict[
|
||||||
|
"module_extension_version"] = module_extension_version
|
||||||
|
sdk_metadata_json_file = sdk_snapshot_gantry_metadata_json_file(
|
||||||
|
snapshots_dir, sdk)
|
||||||
|
|
||||||
|
gantry_metadata_json_object = json.dumps(gantry_metadata_dict, indent=4)
|
||||||
|
with open(sdk_metadata_json_file,
|
||||||
|
"w") as gantry_metadata_json_file_object:
|
||||||
|
gantry_metadata_json_file_object.write(gantry_metadata_json_object)
|
||||||
|
|
||||||
|
def get_module_extension_version(self):
|
||||||
|
return int(
|
||||||
|
subprocess.run([
|
||||||
|
"build/soong/soong_ui.bash", "--dumpvar-mode",
|
||||||
|
"PLATFORM_SDK_EXTENSION_VERSION"
|
||||||
|
],
|
||||||
|
capture_output=True).stdout.decode("utf-8").strip())
|
||||||
|
|
||||||
|
def build_snapshot_gantry_metadata_and_api_diff(self, modules, target_dict,
|
||||||
|
snapshots_dir):
|
||||||
|
"""For each module sdk, create the metadata and api diff file."""
|
||||||
|
module_extension_version = self.get_module_extension_version()
|
||||||
for module in modules:
|
for module in modules:
|
||||||
for sdk in module.sdks:
|
for sdk in module.sdks:
|
||||||
sdk_type = sdk_type_from_name(sdk)
|
sdk_type = sdk_type_from_name(sdk)
|
||||||
if not sdk_type.providesApis:
|
if not sdk_type.providesApis:
|
||||||
continue
|
continue
|
||||||
self.create_snapshot_api_diff(sdk, target_dict, snapshots_dir)
|
self.create_snapshot_gantry_metadata_and_api_diff(
|
||||||
|
sdk, target_dict, snapshots_dir, module_extension_version)
|
||||||
|
|
||||||
|
|
||||||
# The sdk version to build
|
# The sdk version to build
|
||||||
@@ -1152,7 +1187,7 @@ class SdkDistProducer:
|
|||||||
if build_release == LATEST:
|
if build_release == LATEST:
|
||||||
target_dict = self.snapshot_builder.build_sdk_scope_targets(
|
target_dict = self.snapshot_builder.build_sdk_scope_targets(
|
||||||
build_release, modules)
|
build_release, modules)
|
||||||
self.snapshot_builder.build_snapshot_api_diff(
|
self.snapshot_builder.build_snapshot_gantry_metadata_and_api_diff(
|
||||||
modules, target_dict, snapshots_dir)
|
modules, target_dict, snapshots_dir)
|
||||||
self.populate_unbundled_dist(build_release, modules, snapshots_dir)
|
self.populate_unbundled_dist(build_release, modules, snapshots_dir)
|
||||||
return snapshots_dir
|
return snapshots_dir
|
||||||
@@ -1164,18 +1199,26 @@ class SdkDistProducer:
|
|||||||
build_release, modules)
|
build_release, modules)
|
||||||
self.populate_bundled_dist(build_release, modules, snapshots_dir)
|
self.populate_bundled_dist(build_release, modules, snapshots_dir)
|
||||||
|
|
||||||
def dist_sdk_snapshot_api_diff(self, sdk_dist_dir, sdk, module,
|
def dist_sdk_snapshot_gantry_metadata_and_api_diff(self, sdk_dist_dir, sdk,
|
||||||
snapshots_dir):
|
module, snapshots_dir):
|
||||||
"""Copy the sdk snapshot api diff file to a dist directory."""
|
"""Copy the sdk snapshot api diff file to a dist directory."""
|
||||||
sdk_type = sdk_type_from_name(sdk)
|
sdk_type = sdk_type_from_name(sdk)
|
||||||
if not sdk_type.providesApis:
|
if not sdk_type.providesApis:
|
||||||
return
|
return
|
||||||
|
|
||||||
sdk_dist_subdir = os.path.join(sdk_dist_dir, module.apex, "sdk")
|
sdk_dist_module_subdir = os.path.join(sdk_dist_dir, module.apex)
|
||||||
|
sdk_dist_subdir = os.path.join(sdk_dist_module_subdir, "sdk")
|
||||||
os.makedirs(sdk_dist_subdir, exist_ok=True)
|
os.makedirs(sdk_dist_subdir, exist_ok=True)
|
||||||
sdk_api_diff_path = sdk_snapshot_api_diff_file(snapshots_dir, sdk)
|
sdk_api_diff_path = sdk_snapshot_api_diff_file(snapshots_dir, sdk)
|
||||||
shutil.copy(sdk_api_diff_path, sdk_dist_subdir)
|
shutil.copy(sdk_api_diff_path, sdk_dist_subdir)
|
||||||
|
|
||||||
|
sdk_gantry_metadata_json_path = sdk_snapshot_gantry_metadata_json_file(
|
||||||
|
snapshots_dir, sdk)
|
||||||
|
sdk_dist_gantry_metadata_json_path = os.path.join(
|
||||||
|
sdk_dist_module_subdir, "gantry-metadata.json")
|
||||||
|
shutil.copy(sdk_gantry_metadata_json_path,
|
||||||
|
sdk_dist_gantry_metadata_json_path)
|
||||||
|
|
||||||
def populate_unbundled_dist(self, build_release, modules, snapshots_dir):
|
def populate_unbundled_dist(self, build_release, modules, snapshots_dir):
|
||||||
build_release_dist_dir = os.path.join(self.mainline_sdks_dir,
|
build_release_dist_dir = os.path.join(self.mainline_sdks_dir,
|
||||||
build_release.sub_dir)
|
build_release.sub_dir)
|
||||||
@@ -1183,8 +1226,8 @@ class SdkDistProducer:
|
|||||||
for sdk in module.sdks:
|
for sdk in module.sdks:
|
||||||
sdk_dist_dir = os.path.join(build_release_dist_dir, SDK_VERSION)
|
sdk_dist_dir = os.path.join(build_release_dist_dir, SDK_VERSION)
|
||||||
if build_release == LATEST:
|
if build_release == LATEST:
|
||||||
self.dist_sdk_snapshot_api_diff(sdk_dist_dir, sdk, module,
|
self.dist_sdk_snapshot_gantry_metadata_and_api_diff(
|
||||||
snapshots_dir)
|
sdk_dist_dir, sdk, module, snapshots_dir)
|
||||||
self.populate_dist_snapshot(build_release, module, sdk,
|
self.populate_dist_snapshot(build_release, module, sdk,
|
||||||
sdk_dist_dir, snapshots_dir)
|
sdk_dist_dir, snapshots_dir)
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import shutil
|
|||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
import unittest
|
||||||
import zipfile
|
import zipfile
|
||||||
|
import json
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import mainline_modules_sdks as mm
|
import mainline_modules_sdks as mm
|
||||||
@@ -108,6 +109,10 @@ class FakeSnapshotBuilder(mm.SnapshotBuilder):
|
|||||||
# For rest of the modules, generate an empty .info file.
|
# For rest of the modules, generate an empty .info file.
|
||||||
self.write_data_to_file(sdk_info_file, "[]")
|
self.write_data_to_file(sdk_info_file, "[]")
|
||||||
|
|
||||||
|
def get_module_extension_version(self):
|
||||||
|
# Return any integer value indicating the module extension version for testing.
|
||||||
|
return 5
|
||||||
|
|
||||||
def build_sdk_scope_targets(self, build_release, modules):
|
def build_sdk_scope_targets(self, build_release, modules):
|
||||||
target_paths = []
|
target_paths = []
|
||||||
target_dict = {}
|
target_dict = {}
|
||||||
@@ -199,14 +204,18 @@ class TestProduceDist(unittest.TestCase):
|
|||||||
"mainline-sdks/for-S-build/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip",
|
"mainline-sdks/for-S-build/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip",
|
||||||
"mainline-sdks/for-S-build/current/com.android.tethering/sdk/tethering-module-sdk-current.zip",
|
"mainline-sdks/for-S-build/current/com.android.tethering/sdk/tethering-module-sdk-current.zip",
|
||||||
"mainline-sdks/for-S-build/current/com.google.android.wifi/sdk/wifi-module-sdk-current.zip",
|
"mainline-sdks/for-S-build/current/com.google.android.wifi/sdk/wifi-module-sdk-current.zip",
|
||||||
|
"mainline-sdks/for-latest-build/current/com.android.art/gantry-metadata.json",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.art/host-exports/art-module-host-exports-current.zip",
|
"mainline-sdks/for-latest-build/current/com.android.art/host-exports/art-module-host-exports-current.zip",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.art/sdk/art-module-sdk-current-api-diff.txt",
|
"mainline-sdks/for-latest-build/current/com.android.art/sdk/art-module-sdk-current-api-diff.txt",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.art/sdk/art-module-sdk-current.zip",
|
"mainline-sdks/for-latest-build/current/com.android.art/sdk/art-module-sdk-current.zip",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.art/test-exports/art-module-test-exports-current.zip",
|
"mainline-sdks/for-latest-build/current/com.android.art/test-exports/art-module-test-exports-current.zip",
|
||||||
|
"mainline-sdks/for-latest-build/current/com.android.ipsec/gantry-metadata.json",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.ipsec/sdk/ipsec-module-sdk-current-api-diff.txt",
|
"mainline-sdks/for-latest-build/current/com.android.ipsec/sdk/ipsec-module-sdk-current-api-diff.txt",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip",
|
"mainline-sdks/for-latest-build/current/com.android.ipsec/sdk/ipsec-module-sdk-current.zip",
|
||||||
|
"mainline-sdks/for-latest-build/current/com.android.tethering/gantry-metadata.json",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.tethering/sdk/tethering-module-sdk-current-api-diff.txt",
|
"mainline-sdks/for-latest-build/current/com.android.tethering/sdk/tethering-module-sdk-current-api-diff.txt",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.tethering/sdk/tethering-module-sdk-current.zip",
|
"mainline-sdks/for-latest-build/current/com.android.tethering/sdk/tethering-module-sdk-current.zip",
|
||||||
|
"mainline-sdks/for-latest-build/current/com.google.android.wifi/gantry-metadata.json",
|
||||||
"mainline-sdks/for-latest-build/current/com.google.android.wifi/sdk/wifi-module-sdk-current-api-diff.txt",
|
"mainline-sdks/for-latest-build/current/com.google.android.wifi/sdk/wifi-module-sdk-current-api-diff.txt",
|
||||||
"mainline-sdks/for-latest-build/current/com.google.android.wifi/sdk/wifi-module-sdk-current.zip",
|
"mainline-sdks/for-latest-build/current/com.google.android.wifi/sdk/wifi-module-sdk-current.zip",
|
||||||
],
|
],
|
||||||
@@ -295,6 +304,7 @@ class TestProduceDist(unittest.TestCase):
|
|||||||
"bundled-mainline-sdks/platform-mainline/sdk/platform-mainline-sdk-current.zip",
|
"bundled-mainline-sdks/platform-mainline/sdk/platform-mainline-sdk-current.zip",
|
||||||
"bundled-mainline-sdks/platform-mainline/test-exports/platform-mainline-test-exports-current.zip",
|
"bundled-mainline-sdks/platform-mainline/test-exports/platform-mainline-test-exports-current.zip",
|
||||||
# Unbundled (normal) modules.
|
# Unbundled (normal) modules.
|
||||||
|
"mainline-sdks/for-latest-build/current/com.android.art/gantry-metadata.json",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.art/host-exports/art-module-host-exports-current.zip",
|
"mainline-sdks/for-latest-build/current/com.android.art/host-exports/art-module-host-exports-current.zip",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.art/sdk/art-module-sdk-current-api-diff.txt",
|
"mainline-sdks/for-latest-build/current/com.android.art/sdk/art-module-sdk-current-api-diff.txt",
|
||||||
"mainline-sdks/for-latest-build/current/com.android.art/sdk/art-module-sdk-current.zip",
|
"mainline-sdks/for-latest-build/current/com.android.art/sdk/art-module-sdk-current.zip",
|
||||||
@@ -311,6 +321,29 @@ class TestProduceDist(unittest.TestCase):
|
|||||||
0,
|
0,
|
||||||
msg="Api diff file should not be empty for the art module")
|
msg="Api diff file should not be empty for the art module")
|
||||||
|
|
||||||
|
art_gantry_metadata_json_file = os.path.join(
|
||||||
|
self.tmp_dist_dir,
|
||||||
|
"mainline-sdks/for-latest-build/current/com.android.art/gantry-metadata.json"
|
||||||
|
)
|
||||||
|
|
||||||
|
with open(art_gantry_metadata_json_file, "r",
|
||||||
|
encoding="utf8") as gantry_metadata_json_file_object:
|
||||||
|
json_data = json.load(gantry_metadata_json_file_object)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
json_data["api_diff_file"],
|
||||||
|
"art-module-sdk-current-api-diff.txt",
|
||||||
|
msg="Incorrect api-diff file name.")
|
||||||
|
self.assertEqual(
|
||||||
|
json_data["api_diff_file_size"],
|
||||||
|
267,
|
||||||
|
msg="Incorrect api-diff file size.")
|
||||||
|
self.assertEqual(
|
||||||
|
json_data["module_extension_version"],
|
||||||
|
5,
|
||||||
|
msg="The module extension version does not match the expected value."
|
||||||
|
)
|
||||||
|
|
||||||
def create_build_number_file(self):
|
def create_build_number_file(self):
|
||||||
soong_dir = os.path.join(self.tmp_out_dir, "soong")
|
soong_dir = os.path.join(self.tmp_out_dir, "soong")
|
||||||
os.makedirs(soong_dir, exist_ok=True)
|
os.makedirs(soong_dir, exist_ok=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user