xref: /aosp_15_r20/prebuilts/misc/common/androidx-test/update-from-gmaven.py (revision 847dbab7980efcc7f5706bb9c6d844b91a680afd)
1*847dbab7SAndroid Build Coastguard Worker#!/usr/bin/python3
2*847dbab7SAndroid Build Coastguard Worker
3*847dbab7SAndroid Build Coastguard Worker# Helper script for updating androidx.test prebuilts from maven
4*847dbab7SAndroid Build Coastguard Worker#
5*847dbab7SAndroid Build Coastguard Worker# Usage:
6*847dbab7SAndroid Build Coastguard Worker#   a. Initialize android environment eg . build/envsetup.sh; lunch <target>
7*847dbab7SAndroid Build Coastguard Worker#   b. Update the version numbers in this file
8*847dbab7SAndroid Build Coastguard Worker#   c. ./prebuilts/misc/androidx-test/update-from-gmaven.py
9*847dbab7SAndroid Build Coastguard Worker#
10*847dbab7SAndroid Build Coastguard Worker# The script will then:
11*847dbab7SAndroid Build Coastguard Worker#   1. Remove the previous artifacts
12*847dbab7SAndroid Build Coastguard Worker#   2. Download the aars and poms into a file structure mirroring their maven
13*847dbab7SAndroid Build Coastguard Worker#      path
14*847dbab7SAndroid Build Coastguard Worker#   3. Extract the AndroidManifest from the aars into the manifests folder
15*847dbab7SAndroid Build Coastguard Worker#   4. Run pom2bp to generate the Android.bp
16*847dbab7SAndroid Build Coastguard Worker
17*847dbab7SAndroid Build Coastguard Workerimport os
18*847dbab7SAndroid Build Coastguard Workerimport subprocess
19*847dbab7SAndroid Build Coastguard Workerimport sys
20*847dbab7SAndroid Build Coastguard Worker
21*847dbab7SAndroid Build Coastguard WorkermonitorVersion="1.7.0"
22*847dbab7SAndroid Build Coastguard WorkerrunnerVersion="1.6.0"
23*847dbab7SAndroid Build Coastguard WorkerrulesVersion="1.6.0"
24*847dbab7SAndroid Build Coastguard WorkerespressoVersion="3.6.0"
25*847dbab7SAndroid Build Coastguard WorkercoreVersion="1.6.0"
26*847dbab7SAndroid Build Coastguard WorkerextJUnitVersion="1.2.0"
27*847dbab7SAndroid Build Coastguard WorkerextTruthVersion="1.6.0"
28*847dbab7SAndroid Build Coastguard WorkerorchestratorVersion="1.5.0"
29*847dbab7SAndroid Build Coastguard WorkerservicesVersion="1.5.0"
30*847dbab7SAndroid Build Coastguard WorkerjankTestHelperVersion="1.0.1"
31*847dbab7SAndroid Build Coastguard Worker
32*847dbab7SAndroid Build Coastguard WorkermavenToBpPatternMap = {
33*847dbab7SAndroid Build Coastguard Worker    "androidx.test:" : "androidx.test.",
34*847dbab7SAndroid Build Coastguard Worker    "androidx.test.ext:": "androidx.test.ext.",
35*847dbab7SAndroid Build Coastguard Worker    "androidx.test.espresso:espresso-":"androidx.test.espresso.",
36*847dbab7SAndroid Build Coastguard Worker    "androidx.test.janktesthelper:janktesthelper":"androidx.test.janktesthelper",
37*847dbab7SAndroid Build Coastguard Worker    "androidx.test.services:storage":"androidx.test.services.storage",
38*847dbab7SAndroid Build Coastguard Worker    "androidx.test.services:test-services":"androidx.test.services.test-services",
39*847dbab7SAndroid Build Coastguard Worker    "androidx.tracing:tracing":"androidx.tracing_tracing",
40*847dbab7SAndroid Build Coastguard Worker    "androidx.concurrent:concurrent-futures":"androidx.concurrent_concurrent-futures",
41*847dbab7SAndroid Build Coastguard Worker    "com.google.guava:listenablefuture":"guava-listenablefuture-prebuilt-jar",
42*847dbab7SAndroid Build Coastguard Worker    }
43*847dbab7SAndroid Build Coastguard Worker
44*847dbab7SAndroid Build Coastguard WorkerextraLibs = {
45*847dbab7SAndroid Build Coastguard Worker    "androidx.test.rules" : "android.test.base",
46*847dbab7SAndroid Build Coastguard Worker    }
47*847dbab7SAndroid Build Coastguard Worker
48*847dbab7SAndroid Build Coastguard WorkerprependLicenseTemplate = """
49*847dbab7SAndroid Build Coastguard Workerpackage {{
50*847dbab7SAndroid Build Coastguard Worker    default_applicable_licenses: ["Android-Apache-2.0"],
51*847dbab7SAndroid Build Coastguard Worker}}
52*847dbab7SAndroid Build Coastguard Worker
53*847dbab7SAndroid Build Coastguard Workerfilegroup {{
54*847dbab7SAndroid Build Coastguard Worker    name: "test-services.apk",
55*847dbab7SAndroid Build Coastguard Worker    srcs:
56*847dbab7SAndroid Build Coastguard Worker    ["androidx/test/services/test-services/{servicesVersion}/test-services-{servicesVersion}.apk",],
57*847dbab7SAndroid Build Coastguard Worker    path: "androidx/test/services/test-services/{servicesVersion}",
58*847dbab7SAndroid Build Coastguard Worker    visibility: [
59*847dbab7SAndroid Build Coastguard Worker        "//tools/tradefederation/core:__pkg__",
60*847dbab7SAndroid Build Coastguard Worker    ],
61*847dbab7SAndroid Build Coastguard Worker}}
62*847dbab7SAndroid Build Coastguard Worker"""
63*847dbab7SAndroid Build Coastguard Worker
64*847dbab7SAndroid Build Coastguard Workerdef cmd(args):
65*847dbab7SAndroid Build Coastguard Worker   print(args)
66*847dbab7SAndroid Build Coastguard Worker   out = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
67*847dbab7SAndroid Build Coastguard Worker   if (out.returncode != 0):
68*847dbab7SAndroid Build Coastguard Worker      print(out.stderr.decode("utf-8"))
69*847dbab7SAndroid Build Coastguard Worker      sys.exit(out.returncode)
70*847dbab7SAndroid Build Coastguard Worker   out_string = out.stdout.decode("utf-8")
71*847dbab7SAndroid Build Coastguard Worker   print(out_string)
72*847dbab7SAndroid Build Coastguard Worker   return out_string
73*847dbab7SAndroid Build Coastguard Worker
74*847dbab7SAndroid Build Coastguard Workerdef chdir(path):
75*847dbab7SAndroid Build Coastguard Worker   print("cd %s" % path)
76*847dbab7SAndroid Build Coastguard Worker   os.chdir(path)
77*847dbab7SAndroid Build Coastguard Worker
78*847dbab7SAndroid Build Coastguard Workerdef getAndroidRoot():
79*847dbab7SAndroid Build Coastguard Worker   if os.path.isdir(".repo/projects"):
80*847dbab7SAndroid Build Coastguard Worker      return os.getcwd()
81*847dbab7SAndroid Build Coastguard Worker   elif 'TOP' in os.environ:
82*847dbab7SAndroid Build Coastguard Worker      return os.environ['TOP']
83*847dbab7SAndroid Build Coastguard Worker   else:
84*847dbab7SAndroid Build Coastguard Worker      print("Error: Run from android source root or set TOP envvar")
85*847dbab7SAndroid Build Coastguard Worker      sys.exit(-1)
86*847dbab7SAndroid Build Coastguard Worker
87*847dbab7SAndroid Build Coastguard Workerdef downloadArtifact(groupId, artifactId, version):
88*847dbab7SAndroid Build Coastguard Worker   """Downloads an aar, sources.jar and pom from google maven"""
89*847dbab7SAndroid Build Coastguard Worker   groupPath = groupId.replace('.', '/')
90*847dbab7SAndroid Build Coastguard Worker   artifactDirPath = os.path.join(groupPath, artifactId, version)
91*847dbab7SAndroid Build Coastguard Worker   artifactPath = os.path.join(artifactDirPath, "%s-%s" % (artifactId, version))
92*847dbab7SAndroid Build Coastguard Worker   cmd("mkdir -p " + artifactDirPath)
93*847dbab7SAndroid Build Coastguard Worker   # download aar
94*847dbab7SAndroid Build Coastguard Worker   cmd("wget -O %s.aar https://dl.google.com/dl/android/maven2/%s.aar" % (artifactPath, artifactPath))
95*847dbab7SAndroid Build Coastguard Worker
96*847dbab7SAndroid Build Coastguard Worker   # extract AndroidManifest.xml from aar, into path expected by pom2bp
97*847dbab7SAndroid Build Coastguard Worker   manifestDir = getManifestPath("%s:%s" % (groupId,artifactId))
98*847dbab7SAndroid Build Coastguard Worker   cmd("mkdir -p " + manifestDir)
99*847dbab7SAndroid Build Coastguard Worker   cmd("unzip -o %s.aar AndroidManifest.xml -d %s" % (artifactPath, manifestDir))
100*847dbab7SAndroid Build Coastguard Worker
101*847dbab7SAndroid Build Coastguard Worker   # download pom
102*847dbab7SAndroid Build Coastguard Worker   cmd("wget -O %s.pom https://dl.google.com/dl/android/maven2/%s.pom" % (artifactPath, artifactPath))
103*847dbab7SAndroid Build Coastguard Worker
104*847dbab7SAndroid Build Coastguard Worker   # download sources.jar
105*847dbab7SAndroid Build Coastguard Worker   cmd("wget -O %s-sources.jar https://dl.google.com/dl/android/maven2/%s-sources.jar" % (artifactPath, artifactPath))
106*847dbab7SAndroid Build Coastguard Worker
107*847dbab7SAndroid Build Coastguard Workerdef downloadApk(groupId, artifactId, version):
108*847dbab7SAndroid Build Coastguard Worker   """Downloads an apk from google maven"""
109*847dbab7SAndroid Build Coastguard Worker   groupPath = groupId.replace('.', '/')
110*847dbab7SAndroid Build Coastguard Worker   artifactDirPath = os.path.join(groupPath, artifactId, version)
111*847dbab7SAndroid Build Coastguard Worker   artifactPath = os.path.join(artifactDirPath, "%s-%s" % (artifactId, version))
112*847dbab7SAndroid Build Coastguard Worker   cmd("mkdir -p " + artifactDirPath)
113*847dbab7SAndroid Build Coastguard Worker   # download apk
114*847dbab7SAndroid Build Coastguard Worker   cmd("wget -O %s.apk https://dl.google.com/dl/android/maven2/%s.apk" % (artifactPath, artifactPath))
115*847dbab7SAndroid Build Coastguard Worker   # download pom
116*847dbab7SAndroid Build Coastguard Worker   cmd("wget -O %s.pom https://dl.google.com/dl/android/maven2/%s.pom" % (artifactPath, artifactPath))
117*847dbab7SAndroid Build Coastguard Worker
118*847dbab7SAndroid Build Coastguard Workerdef getManifestPath(mavenArtifactName):
119*847dbab7SAndroid Build Coastguard Worker  """Get the path to the aar's manifest as generated by pom2bp."""
120*847dbab7SAndroid Build Coastguard Worker  manifestPath = mavenArtifactName
121*847dbab7SAndroid Build Coastguard Worker  for searchPattern in mavenToBpPatternMap:
122*847dbab7SAndroid Build Coastguard Worker    manifestPath = manifestPath.replace(searchPattern, mavenToBpPatternMap[searchPattern])
123*847dbab7SAndroid Build Coastguard Worker  return "manifests/%s" % manifestPath
124*847dbab7SAndroid Build Coastguard Worker
125*847dbab7SAndroid Build Coastguard Workerdef updatePrependLicense():
126*847dbab7SAndroid Build Coastguard Worker  with open("prepend-license.txt", "w") as f:
127*847dbab7SAndroid Build Coastguard Worker    f.write(prependLicenseTemplate.format(servicesVersion = servicesVersion))
128*847dbab7SAndroid Build Coastguard Worker
129*847dbab7SAndroid Build Coastguard Worker
130*847dbab7SAndroid Build Coastguard WorkerprebuiltDir = os.path.join(getAndroidRoot(), "prebuilts/misc/common/androidx-test")
131*847dbab7SAndroid Build Coastguard Workerchdir(prebuiltDir)
132*847dbab7SAndroid Build Coastguard Worker
133*847dbab7SAndroid Build Coastguard Workercmd("rm -rf androidx/test")
134*847dbab7SAndroid Build Coastguard Workercmd("rm -rf manifests")
135*847dbab7SAndroid Build Coastguard Worker
136*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test", "core", coreVersion)
137*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-accessibility", espressoVersion)
138*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-core", espressoVersion)
139*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-contrib", espressoVersion)
140*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-idling-resource", espressoVersion)
141*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-intents", espressoVersion)
142*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-idling-resource", espressoVersion)
143*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.espresso", "espresso-web", espressoVersion)
144*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test", "monitor", monitorVersion)
145*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test", "rules", rulesVersion)
146*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test", "runner", runnerVersion)
147*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.ext", "junit", extJUnitVersion)
148*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.ext", "truth", extTruthVersion)
149*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.janktesthelper", "janktesthelper", jankTestHelperVersion)
150*847dbab7SAndroid Build Coastguard WorkerdownloadArtifact("androidx.test.services", "storage", servicesVersion)
151*847dbab7SAndroid Build Coastguard WorkerdownloadApk("androidx.test.services", "test-services", servicesVersion)
152*847dbab7SAndroid Build Coastguard WorkerdownloadApk("androidx.test", "orchestrator", orchestratorVersion)
153*847dbab7SAndroid Build Coastguard Worker
154*847dbab7SAndroid Build Coastguard Worker
155*847dbab7SAndroid Build Coastguard WorkeratxRewriteStr = ""
156*847dbab7SAndroid Build Coastguard Workerfor name in mavenToBpPatternMap:
157*847dbab7SAndroid Build Coastguard Worker  atxRewriteStr += "-rewrite %s=%s " % (name, mavenToBpPatternMap[name])
158*847dbab7SAndroid Build Coastguard Workerfor name in extraLibs:
159*847dbab7SAndroid Build Coastguard Worker  atxRewriteStr += "-extra-libs %s=%s " % (name, extraLibs[name])
160*847dbab7SAndroid Build Coastguard Worker
161*847dbab7SAndroid Build Coastguard WorkerupdatePrependLicense()
162*847dbab7SAndroid Build Coastguard Worker
163*847dbab7SAndroid Build Coastguard Workercmd("pom2bp " + atxRewriteStr +
164*847dbab7SAndroid Build Coastguard Worker    # map external maven dependencies to Android module names
165*847dbab7SAndroid Build Coastguard Worker    "-rewrite com.google.truth:truth=truth " +
166*847dbab7SAndroid Build Coastguard Worker    "-rewrite net.sf.kxml:kxml2=kxml2-android " +
167*847dbab7SAndroid Build Coastguard Worker    "-rewrite androidx.lifecycle:lifecycle-common=androidx.lifecycle_lifecycle-common " +
168*847dbab7SAndroid Build Coastguard Worker    "-rewrite androidx.annotation:annotation=androidx.annotation_annotation " +
169*847dbab7SAndroid Build Coastguard Worker    "-rewrite org.hamcrest:hamcrest-integration=hamcrest " +
170*847dbab7SAndroid Build Coastguard Worker    "-rewrite org.hamcrest:hamcrest-core=hamcrest " +
171*847dbab7SAndroid Build Coastguard Worker    "-rewrite javax.inject:javax.inject=jsr330 " +
172*847dbab7SAndroid Build Coastguard Worker    "-rewrite com.google.android.material:material=com.google.android.material_material " +
173*847dbab7SAndroid Build Coastguard Worker    "-rewrite androidx.drawerlayout:drawerlayout=androidx.drawerlayout_drawerlayout " +
174*847dbab7SAndroid Build Coastguard Worker    "-rewrite androidx.viewpager:viewpager=androidx.viewpager_viewpager " +
175*847dbab7SAndroid Build Coastguard Worker    "-rewrite androidx.recyclerview:recyclerview=androidx.recyclerview_recyclerview " +
176*847dbab7SAndroid Build Coastguard Worker    "-rewrite androidx.core:core=androidx.core_core " +
177*847dbab7SAndroid Build Coastguard Worker    "-rewrite androidx.legacy:legacy-support-core-utils=androidx.legacy_legacy-support-core-utils " +
178*847dbab7SAndroid Build Coastguard Worker    "-rewrite androidx.appcompat:appcompat=androidx.appcompat_appcompat " +
179*847dbab7SAndroid Build Coastguard Worker    "-sdk-version current " +
180*847dbab7SAndroid Build Coastguard Worker    "-static-deps " +
181*847dbab7SAndroid Build Coastguard Worker    "-prepend prepend-license.txt " +
182*847dbab7SAndroid Build Coastguard Worker    ". > Android.bp")
183*847dbab7SAndroid Build Coastguard Worker
184