From 3ac3dd4d0f508341d0e7f229368e57c867946e6f Mon Sep 17 00:00:00 2001 From: Brett Chabot Date: Mon, 24 Feb 2025 12:49:39 -0800 Subject: [PATCH 1/6] Replace use of @bazel_tools//tools/jdk:jar with custom utility. bazel 7.5 no longer exposes direct access to the 'jar' executable. Use of it was suboptimal anyway, since its use is cryptic and by default can produce a jar that contains files with timestamps, hampering build reproducibility. Instead, this commit creates a simple standalone java_binary that can create a jar. Also remove unused maven_artifact:override_license_file PiperOrigin-RevId: 730560976 --- build_extensions/axt_android_local_test.bzl | 23 ++------- build_extensions/create_jar.bzl | 38 ++++++++++++++ .../java/androidx/test/tools/jarcreator/BUILD | 23 +++++++++ .../test/tools/jarcreator/JarCreator.kt | 51 +++++++++++++++++++ .../androidx/test/tools/jarcreator/Main.java | 24 +++++++++ .../androidx/test/tools/jarcreator/BUILD | 11 ++++ .../test/tools/jarcreator/JarCreatorTest.kt | 45 ++++++++++++++++ build_extensions/maven/maven_artifact.bzl | 32 ------------ 8 files changed, 195 insertions(+), 52 deletions(-) create mode 100644 build_extensions/create_jar.bzl create mode 100644 build_extensions/jar_creator/java/androidx/test/tools/jarcreator/BUILD create mode 100644 build_extensions/jar_creator/java/androidx/test/tools/jarcreator/JarCreator.kt create mode 100644 build_extensions/jar_creator/java/androidx/test/tools/jarcreator/Main.java create mode 100644 build_extensions/jar_creator/javatests/androidx/test/tools/jarcreator/BUILD create mode 100644 build_extensions/jar_creator/javatests/androidx/test/tools/jarcreator/JarCreatorTest.kt diff --git a/build_extensions/axt_android_local_test.bzl b/build_extensions/axt_android_local_test.bzl index 9cef617ff..7d2af922d 100644 --- a/build_extensions/axt_android_local_test.bzl +++ b/build_extensions/axt_android_local_test.bzl @@ -1,17 +1,7 @@ """A rule wrapper for generating android_local_test .""" load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") - -_CONFIG_JAR_COMMAND = """ -set -e -JAR="$(location @bazel_tools//tools/jdk:jar)" -SRC="$<" -[[ "$$(basename "$${SRC}")" = 'robolectric.properties' ]] || { - echo 'Must be named: robolectric.properties'; - exit 1; -} -$${JAR} -cf "$@" -C "$$(dirname "$${SRC}")" "$$(basename "$${SRC}")" -""" +load("//build_extensions:create_jar.bzl", "create_jar") def axt_android_local_test(name, srcs = [], deps = [], manifest = "//build_extensions:AndroidManifest_robolectric.xml", tags = ["robolectric"], **kwargs): """A wrapper around android_local_test that provides sensible defaults for androidx.test. @@ -72,21 +62,14 @@ def _robolectric_config(name, src): name: a string, the name of the rule src: a label, the properties file to package """ - native.genrule( + create_jar( name = name + "_gen", srcs = [src], - outs = ["%s.jar" % name], - message = "Generating Robolectric config...", - cmd = _CONFIG_JAR_COMMAND, - tools = [ - "@bazel_tools//tools/jdk:jar", - ], - visibility = ["//visibility:private"], ) native.java_import( name = name, constraints = ["android"], - jars = [name + "_gen"], + jars = [name + "_gen.jar"], ) def _is_kotlin(srcs): diff --git a/build_extensions/create_jar.bzl b/build_extensions/create_jar.bzl new file mode 100644 index 000000000..bcb8fe519 --- /dev/null +++ b/build_extensions/create_jar.bzl @@ -0,0 +1,38 @@ +"""Build rule to create a single jar from given files of any type.""" + +def _create_jar_impl(ctx): + """ + Construct a single jar from given files of any type. + """ + + input_paths = [] + for target in ctx.attr.srcs: + input_paths.extend(target.files.to_list()) + + args = ctx.actions.args() + args.add(ctx.outputs.output) + args.add_all(input_paths) + + ctx.actions.run( + inputs = input_paths, + outputs = [ctx.outputs.output], + executable = ctx.executable._create_jar_java, + arguments = [args], + mnemonic = "CreateJAR", + ) + +create_jar = rule( + attrs = { + "srcs": attr.label_list(allow_files = True), + "_create_jar_java": attr.label( + executable = True, + cfg = "exec", + allow_files = True, + default = Label("//build_extensions/jar_creator/java/androidx/test/tools/jarcreator:jarcreator"), + ), + }, + outputs = { + "output": "%{name}.jar", + }, + implementation = _create_jar_impl, +) diff --git a/build_extensions/jar_creator/java/androidx/test/tools/jarcreator/BUILD b/build_extensions/jar_creator/java/androidx/test/tools/jarcreator/BUILD new file mode 100644 index 000000000..b685ccf9e --- /dev/null +++ b/build_extensions/jar_creator/java/androidx/test/tools/jarcreator/BUILD @@ -0,0 +1,23 @@ +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") + +package( + default_visibility = [ + "//:__subpackages__", + ], +) + +kt_jvm_library( + name = "jarcreator_lib", + srcs = glob([ + "*.kt", + ]), +) + +java_binary( + name = "jarcreator", + srcs = ["Main.java"], + main_class = "androidx.test.tools.jarcreator.Main", + deps = [ + ":jarcreator_lib", + ], +) diff --git a/build_extensions/jar_creator/java/androidx/test/tools/jarcreator/JarCreator.kt b/build_extensions/jar_creator/java/androidx/test/tools/jarcreator/JarCreator.kt new file mode 100644 index 000000000..fabe6cdbf --- /dev/null +++ b/build_extensions/jar_creator/java/androidx/test/tools/jarcreator/JarCreator.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package androidx.test.tools.jarcreator + +import java.io.BufferedInputStream +import java.io.File +import java.io.FileInputStream +import java.io.FileOutputStream +import java.io.InputStream +import java.util.jar.JarEntry +import java.util.jar.JarOutputStream + +/** + * This is a simple utility that creates a jar file of input files. + * + * Unlike other solutions like invoking jar command directly or using bazel's + * java_common.pack_sources, this will create a jar without timestamp and with files in the root + * directory of the jar. + */ +fun createJar(args: Array) { + require(args.size >= 2) { "Must provide a least two files: " } + + val outputFile = args[0] + val jarOutputStream = JarOutputStream(FileOutputStream(outputFile, false)) + jarOutputStream.use { + for (i in 1 until args.size) { + val inputFile = File(args[i]) + val inputStream = BufferedInputStream(FileInputStream(inputFile)) + inputStream.use { addToJar(jarOutputStream, inputStream, inputFile) } + } + } +} + +private fun addToJar(jarOutputStream: JarOutputStream, inputStream: InputStream, inputFile: File) { + val entry = JarEntry(inputFile.name) + jarOutputStream.putNextEntry(entry) + inputStream.transferTo(jarOutputStream) +} diff --git a/build_extensions/jar_creator/java/androidx/test/tools/jarcreator/Main.java b/build_extensions/jar_creator/java/androidx/test/tools/jarcreator/Main.java new file mode 100644 index 000000000..0cb0bf699 --- /dev/null +++ b/build_extensions/jar_creator/java/androidx/test/tools/jarcreator/Main.java @@ -0,0 +1,24 @@ +/* + * Copyright 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package androidx.test.tools.jarcreator; + +public class Main { + private Main() {} + + public static void main(String[] args) { + JarCreatorKt.createJar(args); + } +} diff --git a/build_extensions/jar_creator/javatests/androidx/test/tools/jarcreator/BUILD b/build_extensions/jar_creator/javatests/androidx/test/tools/jarcreator/BUILD new file mode 100644 index 000000000..2225df551 --- /dev/null +++ b/build_extensions/jar_creator/javatests/androidx/test/tools/jarcreator/BUILD @@ -0,0 +1,11 @@ +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_test") + +kt_jvm_test( + name = "JarCreatorTest", + srcs = ["JarCreatorTest.kt"], + deps = [ + "//build_extensions/jar_creator/java/androidx/test/tools/jarcreator:jarcreator_lib", + "@maven//:com_google_truth_truth", + "@maven//:junit_junit", + ], +) diff --git a/build_extensions/jar_creator/javatests/androidx/test/tools/jarcreator/JarCreatorTest.kt b/build_extensions/jar_creator/javatests/androidx/test/tools/jarcreator/JarCreatorTest.kt new file mode 100644 index 000000000..4cce604d0 --- /dev/null +++ b/build_extensions/jar_creator/javatests/androidx/test/tools/jarcreator/JarCreatorTest.kt @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package androidx.test.tools.jarcreator + +import com.google.common.truth.Truth.assertThat +import java.io.File +import java.util.jar.JarFile +import org.junit.Assert.assertThrows +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 + +@RunWith(JUnit4::class) +class JarCreatorTest { + + @Test + fun invalidInput() { + assertThrows(java.lang.IllegalArgumentException::class.java) { createJar(emptyArray()) } + } + + @Test + fun combineJars() { + val outFile = File.createTempFile("createJarOut", ".jar") + val fileToInclude = File.createTempFile("include", ".txt") + + createJar(arrayOf(outFile.absolutePath, fileToInclude.absolutePath)) + + val contents = JarFile(outFile.absolutePath).stream().map { it.name } + assertThat(contents).containsExactly(fileToInclude.name) + } +} diff --git a/build_extensions/maven/maven_artifact.bzl b/build_extensions/maven/maven_artifact.bzl index 6a38f74f4..77596f902 100644 --- a/build_extensions/maven/maven_artifact.bzl +++ b/build_extensions/maven/maven_artifact.bzl @@ -179,32 +179,6 @@ def _rename_artifact(ctx, tpl_string, src_file, packaging_type, artifact_id, ver ) return artifact -def _override_license_file(ctx, src_file): - """Append a LICENSE file into the src if exists""" - artifact_with_license = ctx.actions.declare_file("%s-with-LICENSE.%s" % (src_file.basename, src_file.extension)) - commands = [] - commands.append("cp %s %s" % (src_file.path, artifact_with_license.path)) - - # Append a given LICENSE file to the root directory. - commands.append("%s -uf %s -C %s %s" % ( - ctx.executable._jar.path, - artifact_with_license.path, - ctx.file.license_file.dirname, - ctx.file.license_file.basename, - )) - - # Remove the LICENSE files in META_INF. - # (Ignore zip error: Nothing to do) - commands.append("(zip -dq %s META-INF/LICENSE META-INF/LICENSE.txt || true)" % (artifact_with_license.path)) - - ctx.actions.run_shell( - inputs = [src_file, ctx.file.license_file, ctx.executable._jar], - outputs = [artifact_with_license], - command = "&&".join(commands), - tools = [ctx.executable._jar], - ) - return artifact_with_license - def _maven_artifact_impl(ctx): """Generates maven repository for a single artifact.""" @@ -277,12 +251,6 @@ maven_artifact = rule( mandatory = False, doc = "Map of maven dependency to a csv list of excluded dependencies. eg {\"com.google.foo:foo\":\"com.google.bar:bar,com.google.bar:bar-none\"}", ), - "_jar": attr.label( - default = Label("@bazel_tools//tools/jdk:jar"), - executable = True, - allow_files = True, - cfg = "exec", - ), "_maven_artifact_sh": attr.label( default = Label("//build_extensions/maven:maven_artifact_sh"), executable = True, From 4815032b3306e0b6f3fbdaf640025deaee81d2ba Mon Sep 17 00:00:00 2001 From: Brett Chabot Date: Tue, 25 Feb 2025 00:25:22 +0000 Subject: [PATCH 2/6] WIP upgrade bazel --- .bazelversion | 2 +- MODULE.bazel | 230 ++++++++++++++++ WORKSPACE | 289 +------------------- build_extensions/axt_android_local_test.bzl | 4 +- build_extensions/maven/maven_artifact.bzl | 32 --- 5 files changed, 238 insertions(+), 319 deletions(-) create mode 100644 MODULE.bazel diff --git a/.bazelversion b/.bazelversion index f22d756da..18bb4182d 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -6.5.0 +7.5.0 diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 000000000..590ea7c19 --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,230 @@ +# These need needs to be consistent with their counterparts in build_extensions/axt_deps_versions.bzl. +#KOTLIN_VERSION = "1.8.20" +#KOTLINX_COROUTINES_VERSION = "1.7.1" +#GRPC_VERSION = "1.54.1" +# Get from https://github.com/JetBrains/kotlin/releases/ +#KOTLINC_RELEASE_SHA = "10df74c3c6e2eafd4c7a5572352d37cbe41774996e42de627023cb4c82b50ae4" + +bazel_dep(name = "rules_java", version = "8.6.0") +bazel_dep(name = "rules_jvm_external", version = "6.6") +bazel_dep(name = "rules_android", version = "0.6.0", repo_name = "build_bazel_rules_android") +bazel_dep(name = "rules_kotlin", version = "1.9.6", repo_name = "io_bazel_rules_kotlin") +#bazel_dep(name = "protobuf", version = "28.3", repo_name = "com_google_protobuf") +#bazel_dep(name = "io_grpc_grpc_java", version = "1.54.1") +#needed? +#bazel_dep(name = "rules_python", version = "0.37.1") + +# maven dependencies +maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") + +maven.install( + name = "maven", + artifacts = [ + "androidx.annotation:annotation:1.7.0-beta01", +# "androidx.annotation:annotation-experimental:jar:1.1.0", +# "androidx.appcompat:appcompat:1.3.1", +# "androidx.concurrent:concurrent-futures:1.1.0", +# "androidx.concurrent:concurrent-futures-ktx:1.1.0", +# "androidx.core:core:1.6.0", +# "androidx.cursoradapter:cursoradapter:1.0.0", +# "androidx.drawerlayout:drawerlayout:1.1.1", +# "androidx.fragment:fragment:1.3.6", +# "androidx.legacy:legacy-support-core-ui:1.0.0", +# "androidx.legacy:legacy-support-core-utils:1.0.0", +# "androidx.legacy:legacy-support-v4:1.0.0", +# "androidx.lifecycle:lifecycle-common:2.3.1", +# "androidx.multidex:multidex:2.0.0", +# "androidx.recyclerview:recyclerview:1.2.1", + "androidx.tracing:tracing:1.1.0", +# "androidx.test.uiautomator:uiautomator:2.2.0", +# "androidx.viewpager:viewpager:1.0.0", +# "androidx.window:window:1.1.0", +# "androidx.window:window-java:1.1.0", +# "androidx.window:window-core:1.1.0", +# "aopalliance:aopalliance:1.0", +# "com.android.tools.lint:lint-api:30.1.0", +# "com.android.tools.lint:lint-checks:30.1.0", +# "com.beust:jcommander:1.72", +# maven.artifact( +# artifact = "accessibility-test-framework", +# exclusions = [ +# # exclude the org.checkerframework dependency since that require +# # java8 compatibility. See b/176926990 +# maven.exclusion( +# artifact = "checker", +# group = "org.checkerframework", +# ), +# # accessibility-test-framework depends on hamcrest 2.2 which causes 'Using type org.hamcrest.Matcher from an indirect dependency' compile errors +# maven.exclusion( +# artifact = "hamcrest-core", +# group = "org.hamcrest", +# ), +# maven.exclusion( +# artifact = "hamcrest-library", +# group = "org.hamcrest", +# ), +# ], +# group = "com.google.android.apps.common.testing.accessibility.framework", +# version = "3.1.2", +# ), +# "com.google.android.material:material:1.4.0", +# "com.google.auto.value:auto-value:1.5.1", +# "com.google.code.findbugs:jsr305:3.0.2", +# "com.google.code.gson:gson:2.8.5", +# "com.google.dagger:dagger-compiler:2.46", +# "com.google.dagger:dagger-producers:2.46", +# "com.google.dagger:dagger:2.46", +# "com.google.errorprone:error_prone_annotations:2.9.0", +# "com.google.errorprone:javac-shaded:9-dev-r4023-3", +# "com.google.flogger:flogger-system-backend:0.4", +# "com.google.flogger:flogger:0.4", +# "com.google.flogger:google-extensions:0.4", +# "com.google.googlejavaformat:google-java-format:1.4", +# "com.google.guava:guava:30.1.1-android", +# "com.google.guava:listenablefuture:1.0", +# "com.google.inject.extensions:guice-multibindings:4.1.0", +# "com.google.inject:guice:4.1.0", +# "com.google.truth:truth:1.0", +# "com.googlecode.jarjar:jarjar:1.3", +# "com.linkedin.dexmaker:dexmaker-mockito:jar:2.28.1", +# "com.linkedin.dexmaker:dexmaker:2.28.1", +# "org.mockito.kotlin:mockito-kotlin:4.1.0", +# "com.squareup:javapoet:1.9.0", +# "io.grpc:grpc-okhttp:1.54.1", +# "io.grpc:grpc-stub:1.54.1", +# "org.apache.tomcat:annotations-api:6.0.53", +# "javax.annotation:javax.annotation-api:1.3.1", +# "javax.inject:javax.inject:1", +# "joda-time:joda-time:2.10.1", +# "junit:junit:4.13.2", +# "net.bytebuddy:byte-buddy-agent:1.9.10", +# "net.bytebuddy:byte-buddy:1.9.10", +# "net.sf.kxml:kxml2:jar:2.3.0", +# "org.ccil.cowan.tagsoup:tagsoup:1.2.1", +# "org.checkerframework:checker-compat-qual:2.5.5", +# "org.hamcrest:hamcrest-core:1.3", +# "org.hamcrest:hamcrest-library:1.3", +# "org.mockito:mockito-core:2.28.1", +# "org.objenesis:objenesis:2.6", +# "org.pantsbuild:jarjar:1.7.2", +# "org.jetbrains.kotlin:kotlin-stdlib:%s" % KOTLIN_VERSION, +# "org.jetbrains.kotlinx:kotlinx-coroutines-core:%s" % KOTLINX_COROUTINES_VERSION, +# "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:%s" % KOTLINX_COROUTINES_VERSION, +# "org.jetbrains.kotlinx:kotlinx-coroutines-android:%s" % KOTLINX_COROUTINES_VERSION, +# maven.artifact( +# artifact = "robolectric", +# exclusions = [ +# # exclude the com.google.guava dependency since that require +# # java8 compatibility. +# maven.exclusion( +# artifact = "guava", +# group = "com.google.guava", +# ), +# ], +# group = "org.robolectric", +# version = "4.13", +# ), + ], + fetch_sources = True, +# generate_compat_repositories = True, + repositories = [ + "https://maven.google.com", + "https://repo1.maven.org/maven2", + "https://dl.bintray.com/linkedin/maven", + ], +) + +use_repo(maven, "maven") + + +# need to have a isolated version tree for listenablefuture, because otherwise +# listenablefuture will get resolved to 9999.0-empty-to-avoid-conflict-with-guava +maven.install( + name = "maven_listenablefuture", + artifacts = [ + "com.google.guava:listenablefuture:1.0", + ], + repositories = [ + "https://maven.google.com", + "https://repo1.maven.org/maven2", + "https://dl.bintray.com/linkedin/maven", + ], +) +use_repo(maven, "maven_listenablefuture") + + +#android_sdk_repository( +# name = "androidsdk", +# api_level = 35, +# build_tools_version = "35.0.0", +#) +# +#load("//:repo.bzl", "android_test_repositories") +# +#android_test_repositories(with_dev_repositories = True) +# +#load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") +# +#robolectric_repositories() +# +## Kotlin toolchains +# +#rules_kotlin_version = "1.8-RC-12" +#rules_kotlin_sha = "8e5c8ab087e0fa3fbb58e1f6b99d8fe40f75bac44994c3d208eba723284465d6" +# +#http_archive( +# name = "io_bazel_rules_kotlin", +# sha256 = rules_kotlin_sha, +# urls = ["https://github.com/bazelbuild/rules_kotlin/releases/download/v%s/rules_kotlin_release.tgz" % rules_kotlin_version], +#) +# +#load("@io_bazel_rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories", "kotlinc_version") +# +#kotlin_repositories( +# compiler_release = kotlinc_version( +# release = KOTLIN_VERSION, +# sha256 = KOTLINC_RELEASE_SHA, +# ), +#) +# +#load("@io_bazel_rules_kotlin//kotlin:core.bzl", "kt_register_toolchains") +# +#kt_register_toolchains() +# +## Android bazel rules from Dec 22 2022. This is the last commit that supports bazel 6.0.0 +#RULES_ANDROID_COMMIT = "ce37817d8589cac4a7cc20cb4d51fe8ad459dea1" +# +#RULES_ANDROID_SHA = "402b1ed3756028dca11835dad3225689a4040c3b377de798709f9a39b5c6af17" +# +#http_archive( +# name = "rules_android", +# sha256 = RULES_ANDROID_SHA, +# strip_prefix = "rules_android-%s" % RULES_ANDROID_COMMIT, +# url = "https://github.com/bazelbuild/rules_android/archive/%s.zip" % RULES_ANDROID_COMMIT, +#) +# +#load("@rules_android//:prereqs.bzl", "rules_android_prereqs") +# +#rules_android_prereqs() +# +#load("@rules_android//:defs.bzl", "rules_android_workspace") +# +#rules_android_workspace() +# +#register_toolchains( +# "@rules_android//toolchains/android:android_default_toolchain", +# "@rules_android//toolchains/android_sdk:android_sdk_tools", +#) +# +## Updated 2023-02-01 +#http_archive( +# name = "rules_license", +# sha256 = "6157e1e68378532d0241ecd15d3c45f6e5cfd98fc10846045509fb2a7cc9e381", +# urls = [ +# "https://github.com/bazelbuild/rules_license/releases/download/0.0.4/rules_license-0.0.4.tar.gz", +# ], +#) +# +#load("@maven//:compat.bzl", "compat_repositories") +# +#compat_repositories() diff --git a/WORKSPACE b/WORKSPACE index 9e930ec78..79c519cc3 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,291 +1,12 @@ -# TODO(b/114418172): rename to androidx_test. Requires a bazel change -workspace(name = "android_test_support") +############################# +# Load Android Sd +############################# -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") - -http_archive( - name = "rules_java", - url = "https://github.com/bazelbuild/rules_java/releases/download/5.3.5/rules_java-5.3.5.tar.gz", - sha256 = "c73336802d0b4882e40770666ad055212df4ea62cfa6edf9cb0f9d29828a0934", -) - -RULES_JVM_EXTERNAL_TAG = "4.5" - -RULES_JVM_EXTERNAL_SHA = "b17d7388feb9bfa7f2fa09031b32707df529f26c91ab9e5d909eb1676badd9a6" - -# These need needs to be consistent with their counterparts in build_extensions/axt_deps_versions.bzl. -KOTLIN_VERSION = "1.8.20" -KOTLINX_COROUTINES_VERSION = "1.7.1" -GRPC_VERSION = "1.54.1" - -# Get from https://github.com/JetBrains/kotlin/releases/ -KOTLINC_RELEASE_SHA = "10df74c3c6e2eafd4c7a5572352d37cbe41774996e42de627023cb4c82b50ae4" - -http_archive( - name = "rules_jvm_external", - sha256 = RULES_JVM_EXTERNAL_SHA, - strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG, - url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG, -) - -# protobuf defines proto_library, as well as @com_google_protobuf_javalite -http_archive( - name = "com_google_protobuf", - sha256 = "7c3ebd7aaedd86fa5dc479a0fda803f602caaf78d8aff7ce83b89e1b8ae7442a", - strip_prefix = "protobuf-28.3", - urls = ["https://github.com/protocolbuffers/protobuf/releases/download/v28.3/protobuf-28.3.tar.gz"], -) - -load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") -protobuf_deps() - -load("@rules_python//python:repositories.bzl", "py_repositories") -py_repositories() - -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") - -load("@rules_jvm_external//:defs.bzl", "maven_install") -load("@rules_jvm_external//:specs.bzl", "maven") -load( - "//build_extensions:axt_deps_versions.bzl", - "ANDROIDX_ANNOTATION_EXPERIMENTAL_VERSION", - "ANDROIDX_ANNOTATION_VERSION", - "ANDROIDX_COMPAT_VERSION", - "ANDROIDX_CONCURRENT_VERSION", - "ANDROIDX_CORE_VERSION", - "ANDROIDX_CURSOR_ADAPTER_VERSION", - "ANDROIDX_DRAWER_LAYOUT_VERSION", - "ANDROIDX_FRAGMENT_VERSION", - "ANDROIDX_LEGACY_SUPPORT_VERSION", - "ANDROIDX_LIFECYCLE_VERSION", - "ANDROIDX_MULTIDEX_VERSION", - "ANDROIDX_RECYCLERVIEW_VERSION", - "ANDROIDX_TRACING_VERSION", - "ANDROIDX_VIEWPAGER_VERSION", - "ANDROIDX_WINDOW_VERSION", - "GOOGLE_MATERIAL_VERSION", - "GUAVA_LISTENABLEFUTURE_VERSION", - "GUAVA_VERSION", - "JUNIT_VERSION", - "UIAUTOMATOR_VERSION", - "ATF_VERSION" -) - -# gRPC -http_archive( - name = "io_grpc_grpc_java", - sha256 = "98c32df8a878cbca5a6799922d28e9df93a4d5607316e0e3f8269a5886d9e429", - strip_prefix = "grpc-java-%s" % GRPC_VERSION, - url = "https://github.com/grpc/grpc-java/archive/v%s.tar.gz" % GRPC_VERSION, -) - -load("@io_grpc_grpc_java//:repositories.bzl", "grpc_java_repositories") - -grpc_java_repositories() - -maven_install( - name = "maven", - artifacts = [ - "androidx.annotation:annotation:" + ANDROIDX_ANNOTATION_VERSION, - "androidx.annotation:annotation-experimental:jar:" + ANDROIDX_ANNOTATION_EXPERIMENTAL_VERSION, - "androidx.appcompat:appcompat:" + ANDROIDX_COMPAT_VERSION, - "androidx.concurrent:concurrent-futures:" + ANDROIDX_CONCURRENT_VERSION, - "androidx.concurrent:concurrent-futures-ktx:" + ANDROIDX_CONCURRENT_VERSION, - "androidx.core:core:" + ANDROIDX_CORE_VERSION, - "androidx.cursoradapter:cursoradapter:" + ANDROIDX_CURSOR_ADAPTER_VERSION, - "androidx.drawerlayout:drawerlayout:" + ANDROIDX_DRAWER_LAYOUT_VERSION, - "androidx.fragment:fragment:" + ANDROIDX_FRAGMENT_VERSION, - "androidx.legacy:legacy-support-core-ui:" + ANDROIDX_LEGACY_SUPPORT_VERSION, - "androidx.legacy:legacy-support-core-utils:" + ANDROIDX_LEGACY_SUPPORT_VERSION, - "androidx.legacy:legacy-support-v4:" + ANDROIDX_LEGACY_SUPPORT_VERSION, - "androidx.lifecycle:lifecycle-common:" + ANDROIDX_LIFECYCLE_VERSION, - "androidx.multidex:multidex:" + ANDROIDX_MULTIDEX_VERSION, - "androidx.recyclerview:recyclerview:" + ANDROIDX_RECYCLERVIEW_VERSION, - "androidx.tracing:tracing:" + ANDROIDX_TRACING_VERSION, - "androidx.test.uiautomator:uiautomator:" + UIAUTOMATOR_VERSION, - "androidx.viewpager:viewpager:" + ANDROIDX_VIEWPAGER_VERSION, - "androidx.window:window:" + ANDROIDX_WINDOW_VERSION, - "androidx.window:window-java:" + ANDROIDX_WINDOW_VERSION, - "androidx.window:window-core:" + ANDROIDX_WINDOW_VERSION, - "aopalliance:aopalliance:1.0", - "com.android.tools.lint:lint-api:30.1.0", - "com.android.tools.lint:lint-checks:30.1.0", - "com.beust:jcommander:1.72", - maven.artifact( - artifact = "accessibility-test-framework", - exclusions = [ - # exclude the org.checkerframework dependency since that require - # java8 compatibility. See b/176926990 - maven.exclusion( - artifact = "checker", - group = "org.checkerframework", - ), - # accessibility-test-framework depends on hamcrest 2.2 which causes 'Using type org.hamcrest.Matcher from an indirect dependency' compile errors - maven.exclusion( - artifact = "hamcrest-core", - group = "org.hamcrest", - ), - maven.exclusion( - artifact = "hamcrest-library", - group = "org.hamcrest", - ), - ], - group = "com.google.android.apps.common.testing.accessibility.framework", - version = ATF_VERSION, - ), - "com.google.android.material:material:" + GOOGLE_MATERIAL_VERSION, - "com.google.auto.value:auto-value:1.5.1", - "com.google.code.findbugs:jsr305:3.0.2", - "com.google.code.gson:gson:2.8.5", - "com.google.dagger:dagger-compiler:2.46", - "com.google.dagger:dagger-producers:2.46", - "com.google.dagger:dagger:2.46", - "com.google.errorprone:error_prone_annotations:2.9.0", - "com.google.errorprone:javac-shaded:9-dev-r4023-3", - "com.google.flogger:flogger-system-backend:0.4", - "com.google.flogger:flogger:0.4", - "com.google.flogger:google-extensions:0.4", - "com.google.googlejavaformat:google-java-format:1.4", - "com.google.guava:guava:" + GUAVA_VERSION, - "com.google.guava:listenablefuture:" + GUAVA_LISTENABLEFUTURE_VERSION, - "com.google.inject.extensions:guice-multibindings:4.1.0", - "com.google.inject:guice:4.1.0", - "com.google.truth:truth:1.0", - "com.googlecode.jarjar:jarjar:1.3", - "com.linkedin.dexmaker:dexmaker-mockito:jar:2.28.1", - "com.linkedin.dexmaker:dexmaker:2.28.1", - "org.mockito.kotlin:mockito-kotlin:4.1.0", - "com.squareup:javapoet:1.9.0", - "io.grpc:grpc-okhttp:1.54.1", - "io.grpc:grpc-stub:1.54.1", - "org.apache.tomcat:annotations-api:6.0.53", - "javax.annotation:javax.annotation-api:1.3.1", - "javax.inject:javax.inject:1", - "joda-time:joda-time:2.10.1", - "junit:junit:" + JUNIT_VERSION, - "net.bytebuddy:byte-buddy-agent:1.9.10", - "net.bytebuddy:byte-buddy:1.9.10", - "net.sf.kxml:kxml2:jar:2.3.0", - "org.ccil.cowan.tagsoup:tagsoup:1.2.1", - "org.checkerframework:checker-compat-qual:2.5.5", - "org.hamcrest:hamcrest-core:1.3", - "org.hamcrest:hamcrest-library:1.3", - "org.mockito:mockito-core:2.28.1", - "org.objenesis:objenesis:2.6", - "org.pantsbuild:jarjar:1.7.2", - "org.jetbrains.kotlin:kotlin-stdlib:%s" % KOTLIN_VERSION, - "org.jetbrains.kotlinx:kotlinx-coroutines-core:%s" % KOTLINX_COROUTINES_VERSION, - "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:%s" % KOTLINX_COROUTINES_VERSION, - "org.jetbrains.kotlinx:kotlinx-coroutines-android:%s" % KOTLINX_COROUTINES_VERSION, - maven.artifact( - artifact = "robolectric", - exclusions = [ - # exclude the com.google.guava dependency since that require - # java8 compatibility. - maven.exclusion( - artifact = "guava", - group = "com.google.guava", - ), - ], - group = "org.robolectric", - version = "4.13", - ), - ], - fetch_sources = True, - generate_compat_repositories = True, - repositories = [ - "https://maven.google.com", - "https://repo1.maven.org/maven2", - "https://dl.bintray.com/linkedin/maven", - ], -) - -# need to have a isolated version tree for listenablefuture, because otherwise -# listenablefuture will get resolved to 9999.0-empty-to-avoid-conflict-with-guava -maven_install( - name = "maven_listenablefuture", - artifacts = [ - "com.google.guava:listenablefuture:" + GUAVA_LISTENABLEFUTURE_VERSION, - ], - repositories = [ - "https://maven.google.com", - "https://repo1.maven.org/maven2", - "https://dl.bintray.com/linkedin/maven", - ], -) +# This is needed by rules_kotlin. +# TODO(brettchabot): move this to MODULE.bzlmod android_sdk_repository( name = "androidsdk", api_level = 35, build_tools_version = "35.0.0", ) - -load("//:repo.bzl", "android_test_repositories") - -android_test_repositories(with_dev_repositories = True) - -load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") - -robolectric_repositories() - -# Kotlin toolchains - -rules_kotlin_version = "1.8-RC-12" -rules_kotlin_sha = "8e5c8ab087e0fa3fbb58e1f6b99d8fe40f75bac44994c3d208eba723284465d6" - -http_archive( - name = "io_bazel_rules_kotlin", - sha256 = rules_kotlin_sha, - urls = ["https://github.com/bazelbuild/rules_kotlin/releases/download/v%s/rules_kotlin_release.tgz" % rules_kotlin_version], -) - -load("@io_bazel_rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories", "kotlinc_version") - -kotlin_repositories( - compiler_release = kotlinc_version( - release = KOTLIN_VERSION, - sha256 = KOTLINC_RELEASE_SHA, - ), -) - -load("@io_bazel_rules_kotlin//kotlin:core.bzl", "kt_register_toolchains") - -kt_register_toolchains() - -# Android bazel rules from Dec 22 2022. This is the last commit that supports bazel 6.0.0 -RULES_ANDROID_COMMIT = "ce37817d8589cac4a7cc20cb4d51fe8ad459dea1" - -RULES_ANDROID_SHA = "402b1ed3756028dca11835dad3225689a4040c3b377de798709f9a39b5c6af17" - -http_archive( - name = "rules_android", - sha256 = RULES_ANDROID_SHA, - strip_prefix = "rules_android-%s" % RULES_ANDROID_COMMIT, - url = "https://github.com/bazelbuild/rules_android/archive/%s.zip" % RULES_ANDROID_COMMIT, -) - -load("@rules_android//:prereqs.bzl", "rules_android_prereqs") - -rules_android_prereqs() - -load("@rules_android//:defs.bzl", "rules_android_workspace") - -rules_android_workspace() - -register_toolchains( - "@rules_android//toolchains/android:android_default_toolchain", - "@rules_android//toolchains/android_sdk:android_sdk_tools", -) - -# Updated 2023-02-01 -http_archive( - name = "rules_license", - sha256 = "6157e1e68378532d0241ecd15d3c45f6e5cfd98fc10846045509fb2a7cc9e381", - urls = [ - "https://github.com/bazelbuild/rules_license/releases/download/0.0.4/rules_license-0.0.4.tar.gz", - ], -) - -load("@maven//:compat.bzl", "compat_repositories") - -compat_repositories() diff --git a/build_extensions/axt_android_local_test.bzl b/build_extensions/axt_android_local_test.bzl index 9cef617ff..f33b975dc 100644 --- a/build_extensions/axt_android_local_test.bzl +++ b/build_extensions/axt_android_local_test.bzl @@ -4,7 +4,7 @@ load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") _CONFIG_JAR_COMMAND = """ set -e -JAR="$(location @bazel_tools//tools/jdk:jar)" +JAR="$(location @local_jdk//:jar)" SRC="$<" [[ "$$(basename "$${SRC}")" = 'robolectric.properties' ]] || { echo 'Must be named: robolectric.properties'; @@ -79,7 +79,7 @@ def _robolectric_config(name, src): message = "Generating Robolectric config...", cmd = _CONFIG_JAR_COMMAND, tools = [ - "@bazel_tools//tools/jdk:jar", + "@local_jdk//:jar", ], visibility = ["//visibility:private"], ) diff --git a/build_extensions/maven/maven_artifact.bzl b/build_extensions/maven/maven_artifact.bzl index 6a38f74f4..77596f902 100644 --- a/build_extensions/maven/maven_artifact.bzl +++ b/build_extensions/maven/maven_artifact.bzl @@ -179,32 +179,6 @@ def _rename_artifact(ctx, tpl_string, src_file, packaging_type, artifact_id, ver ) return artifact -def _override_license_file(ctx, src_file): - """Append a LICENSE file into the src if exists""" - artifact_with_license = ctx.actions.declare_file("%s-with-LICENSE.%s" % (src_file.basename, src_file.extension)) - commands = [] - commands.append("cp %s %s" % (src_file.path, artifact_with_license.path)) - - # Append a given LICENSE file to the root directory. - commands.append("%s -uf %s -C %s %s" % ( - ctx.executable._jar.path, - artifact_with_license.path, - ctx.file.license_file.dirname, - ctx.file.license_file.basename, - )) - - # Remove the LICENSE files in META_INF. - # (Ignore zip error: Nothing to do) - commands.append("(zip -dq %s META-INF/LICENSE META-INF/LICENSE.txt || true)" % (artifact_with_license.path)) - - ctx.actions.run_shell( - inputs = [src_file, ctx.file.license_file, ctx.executable._jar], - outputs = [artifact_with_license], - command = "&&".join(commands), - tools = [ctx.executable._jar], - ) - return artifact_with_license - def _maven_artifact_impl(ctx): """Generates maven repository for a single artifact.""" @@ -277,12 +251,6 @@ maven_artifact = rule( mandatory = False, doc = "Map of maven dependency to a csv list of excluded dependencies. eg {\"com.google.foo:foo\":\"com.google.bar:bar,com.google.bar:bar-none\"}", ), - "_jar": attr.label( - default = Label("@bazel_tools//tools/jdk:jar"), - executable = True, - allow_files = True, - cfg = "exec", - ), "_maven_artifact_sh": attr.label( default = Label("//build_extensions/maven:maven_artifact_sh"), executable = True, From 5a80466b098000eab7c943a9b36f93e3033ae345 Mon Sep 17 00:00:00 2001 From: Brett Chabot Date: Wed, 19 Mar 2025 18:55:59 +0000 Subject: [PATCH 3/6] Successful maven repo build. In progress: android_locql_test --- MODULE.bazel | 61 +++++++++---------- build_extensions/axt_android_local_test.bzl | 5 +- build_extensions/maven/axt_maven_apk.bzl | 1 + build_extensions/maven/maven_info.bzl | 2 +- build_extensions/maven/maven_registry.bzl | 13 +++- opensource/emulator/proto/BUILD | 2 +- .../test/internal/events/client/BUILD | 2 - .../test/services/shellexecutor/BUILD | 11 +++- 8 files changed, 53 insertions(+), 44 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index aa7b9517a..79b6994b8 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -10,7 +10,7 @@ bazel_dep(name = "rules_jvm_external", version = "6.6") bazel_dep(name = "rules_android", version = "0.6.0", repo_name = "build_bazel_rules_android") bazel_dep(name = "rules_kotlin", version = "1.9.6", repo_name = "io_bazel_rules_kotlin") bazel_dep(name = "protobuf", version = "29.0", repo_name = "com_google_protobuf") -#bazel_dep(name = "io_grpc_grpc_java", version = "1.54.1") +bazel_dep(name = "grpc-java", version = "1.68.1") #needed? #bazel_dep(name = "rules_python", version = "0.37.1") bazel_dep(name = "rules_robolectric", version = "4.14.1.2", repo_name = "robolectric") @@ -24,6 +24,20 @@ single_version_override( # maven dependencies maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") +maven.artifact( + artifact = "accessibility-test-framework", + # exclude the org.checkerframework dependency since that require + # java8 compatibility. See b/176926990 + # accessibility-test-framework depends on hamcrest 2.2 which causes 'Using type org.hamcrest.Matcher from an indirect dependency' compile errors + exclusions = [ + "org.checkerframework:checker", + "org.hamcrest:hamcrest-core", + "org.hamcrest:hamcrest-library", + ], + group = "com.google.android.apps.common.testing.accessibility.framework", + version = "3.1.2", +) + maven.install( name = "maven", artifacts = [ @@ -46,47 +60,26 @@ maven.install( # "androidx.test.uiautomator:uiautomator:2.2.0", # "androidx.viewpager:viewpager:1.0.0", # "androidx.window:window:1.1.0", -# "androidx.window:window-java:1.1.0", -# "androidx.window:window-core:1.1.0", + "androidx.window:window-java:1.1.0", + "androidx.window:window-core:1.1.0", # "aopalliance:aopalliance:1.0", # "com.android.tools.lint:lint-api:30.1.0", # "com.android.tools.lint:lint-checks:30.1.0", # "com.beust:jcommander:1.72", -# maven.artifact( -# artifact = "accessibility-test-framework", -# exclusions = [ -# # exclude the org.checkerframework dependency since that require -# # java8 compatibility. See b/176926990 -# maven.exclusion( -# artifact = "checker", -# group = "org.checkerframework", -# ), -# # accessibility-test-framework depends on hamcrest 2.2 which causes 'Using type org.hamcrest.Matcher from an indirect dependency' compile errors -# maven.exclusion( -# artifact = "hamcrest-core", -# group = "org.hamcrest", -# ), -# maven.exclusion( -# artifact = "hamcrest-library", -# group = "org.hamcrest", -# ), -# ], -# group = "com.google.android.apps.common.testing.accessibility.framework", -# version = "3.1.2", -# ), + # "com.google.android.material:material:1.4.0", # "com.google.auto.value:auto-value:1.5.1", # "com.google.code.findbugs:jsr305:3.0.2", # "com.google.code.gson:gson:2.8.5", -# "com.google.dagger:dagger-compiler:2.46", -# "com.google.dagger:dagger-producers:2.46", -# "com.google.dagger:dagger:2.46", + "com.google.dagger:dagger-compiler:2.46", + "com.google.dagger:dagger-producers:2.46", + "com.google.dagger:dagger:2.46", # "com.google.errorprone:error_prone_annotations:2.9.0", # "com.google.errorprone:javac-shaded:9-dev-r4023-3", # "com.google.flogger:flogger-system-backend:0.4", # "com.google.flogger:flogger:0.4", # "com.google.flogger:google-extensions:0.4", -# "com.google.googlejavaformat:google-java-format:1.4", + "com.google.googlejavaformat:google-java-format:1.4", # "com.google.guava:guava:30.1.1-android", # "com.google.guava:listenablefuture:1.0", # "com.google.inject.extensions:guice-multibindings:4.1.0", @@ -96,9 +89,9 @@ maven.install( # "com.linkedin.dexmaker:dexmaker-mockito:jar:2.28.1", # "com.linkedin.dexmaker:dexmaker:2.28.1", # "org.mockito.kotlin:mockito-kotlin:4.1.0", -# "com.squareup:javapoet:1.9.0", -# "io.grpc:grpc-okhttp:1.54.1", -# "io.grpc:grpc-stub:1.54.1", + "com.squareup:javapoet:1.9.0", + "io.grpc:grpc-okhttp:1.54.1", + "io.grpc:grpc-stub:1.54.1", # "org.apache.tomcat:annotations-api:6.0.53", # "javax.annotation:javax.annotation-api:1.3.1", # "javax.inject:javax.inject:1", @@ -107,7 +100,7 @@ maven.install( # "net.bytebuddy:byte-buddy-agent:1.9.10", # "net.bytebuddy:byte-buddy:1.9.10", # "net.sf.kxml:kxml2:jar:2.3.0", -# "org.ccil.cowan.tagsoup:tagsoup:1.2.1", + "org.ccil.cowan.tagsoup:tagsoup:1.2.1", # "org.checkerframework:checker-compat-qual:2.5.5", # "org.hamcrest:hamcrest-core:1.3", "org.hamcrest:hamcrest-library:1.3", @@ -142,6 +135,8 @@ maven.install( ], ) + + use_repo(maven, "maven") diff --git a/build_extensions/axt_android_local_test.bzl b/build_extensions/axt_android_local_test.bzl index 7d2af922d..2b5ca39e5 100644 --- a/build_extensions/axt_android_local_test.bzl +++ b/build_extensions/axt_android_local_test.bzl @@ -2,6 +2,7 @@ load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") load("//build_extensions:create_jar.bzl", "create_jar") +load("@build_bazel_rules_android//android:rules.bzl", "android_local_test") def axt_android_local_test(name, srcs = [], deps = [], manifest = "//build_extensions:AndroidManifest_robolectric.xml", tags = ["robolectric"], **kwargs): """A wrapper around android_local_test that provides sensible defaults for androidx.test. @@ -41,12 +42,12 @@ def axt_android_local_test(name, srcs = [], deps = [], manifest = "//build_exten exports_manifest = True, manifest = manifest, deps = deps, - testonly = 1, + testonly = True, ) deps = [":%s_kt_lib" % name] srcs = [] - native.android_local_test( + android_local_test( name = name, srcs = srcs, tags = tags, diff --git a/build_extensions/maven/axt_maven_apk.bzl b/build_extensions/maven/axt_maven_apk.bzl index 76838bbe6..549eacecf 100644 --- a/build_extensions/maven/axt_maven_apk.bzl +++ b/build_extensions/maven/axt_maven_apk.bzl @@ -3,6 +3,7 @@ load("@rules_java//java:defs.bzl", "JavaInfo") load("//build_extensions/maven:combine_jars.bzl", "combine_jars") load("//build_extensions/maven:maven_info.bzl", "MavenFilesInfo", "MavenInfo", "collect_maven_apk_info") +load("@build_bazel_rules_android//providers:providers.bzl", "ApkInfo") def _axt_maven_apk_impl(ctx): # produce src jar diff --git a/build_extensions/maven/maven_info.bzl b/build_extensions/maven/maven_info.bzl index d82ecb748..f26849306 100644 --- a/build_extensions/maven/maven_info.bzl +++ b/build_extensions/maven/maven_info.bzl @@ -150,7 +150,7 @@ def _isJavaProtoTarget(all_deps): def _findGrpcJavaProtoJar(target): for jar in target[JavaInfo].transitive_runtime_jars.to_list(): - if "io_grpc_grpc_java/protobuf-lite" in jar.path: + if "grpc-java/protobuf-lite" in jar.path: return jar return None diff --git a/build_extensions/maven/maven_registry.bzl b/build_extensions/maven/maven_registry.bzl index 5778117a9..4931c30f6 100644 --- a/build_extensions/maven/maven_registry.bzl +++ b/build_extensions/maven/maven_registry.bzl @@ -45,11 +45,18 @@ _TARGET_TO_MAVEN_ARTIFACT = { "//services/events/java/": "androidx.test:runner:%s" % RUNNER_VERSION, "//services:test_services": "androidx.test.services:test-services:%s" % SERVICES_VERSION, "//runner/android_test_orchestrator/stubapp:stubapp": "androidx.test:orchestrator:%s" % ORCHESTRATOR_VERSION, + + "@@grpc-java~//okhttp:okhttp": "io.grpc:grpc-okhttp:1.54.1", + "@@grpc-java~//api": "io.grpc:grpc-stub:1.54.1", + "@@grpc-java~//core": "io.grpc:grpc-stub:1.54.1", + "@@grpc-java~//context": "io.grpc:grpc-stub:1.54.1", + "@@grpc-java~//util": "io.grpc:grpc-stub:1.54.1", + "@@grpc-java~//stub": "io.grpc:grpc-stub:1.54.1", } _SHADED_TARGETS = [ "@com_google_protobuf//:protobuf_javalite", - "@com_google_protobuf//java/core:lite", + "@@protobuf~//java/core:lite", "//opensource/proto:any_java_proto_lite", "@com_google_protobuf//:any_proto", "//opensource/dagger:dagger", @@ -110,6 +117,6 @@ def is_shaded_from_label(label): renamed via jarjar. """ - # bazel 6.0.0 mysteriously prefixes a '@' onto //opensource/dagger, so just remove it - string_label = str(label).replace("@//", "//") + # bazel mysteriously prefixes a '@' onto //opensource/dagger, sometimes two, so just remove it + string_label = str(label).replace("@//", "//").replace("@//", "//") return string_label in _SHADED_TARGETS diff --git a/opensource/emulator/proto/BUILD b/opensource/emulator/proto/BUILD index 766e55096..8a40a788f 100644 --- a/opensource/emulator/proto/BUILD +++ b/opensource/emulator/proto/BUILD @@ -1,6 +1,6 @@ # Protos for interacting with emulator -load("@io_grpc_grpc_java//:java_grpc_library.bzl", "java_grpc_library") +load("@grpc-java//:java_grpc_library.bzl", "java_grpc_library") package( default_applicable_licenses = ["//espresso:license"], diff --git a/runner/android_junit_runner/javatests/androidx/test/internal/events/client/BUILD b/runner/android_junit_runner/javatests/androidx/test/internal/events/client/BUILD index 056c6c823..494f542ac 100644 --- a/runner/android_junit_runner/javatests/androidx/test/internal/events/client/BUILD +++ b/runner/android_junit_runner/javatests/androidx/test/internal/events/client/BUILD @@ -27,9 +27,7 @@ axt_android_local_test( android_library( name = "sampletest", - testonly = 1, srcs = ["SampleJUnitTest.java"], - testonly = 1, deps = ["@maven//:junit_junit"], ) diff --git a/services/shellexecutor/java/androidx/test/services/shellexecutor/BUILD b/services/shellexecutor/java/androidx/test/services/shellexecutor/BUILD index e1d5b78df..be4f1ffcb 100644 --- a/services/shellexecutor/java/androidx/test/services/shellexecutor/BUILD +++ b/services/shellexecutor/java/androidx/test/services/shellexecutor/BUILD @@ -2,6 +2,7 @@ load("@com_google_protobuf//bazel:java_lite_proto_library.bzl", "java_lite_proto load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library") load("@rules_java//java:defs.bzl", "java_library") load("//build_extensions:kt_android_library.bzl", "kt_android_library") +load("@build_bazel_rules_android//android:rules.bzl", "android_library") # A shell command execution server to allow shell commands to be run at elevated permissions @@ -38,6 +39,12 @@ kt_android_library( ], ) +android_library( + name = "exec_idl", + idl_srcs = ["Command.aidl"], + visibility = ["//visibility:private"], +) + kt_android_library( name = "exec_server", srcs = [ @@ -50,9 +57,9 @@ kt_android_library( "ShellExecSharedConstants.java", "ShellMain.java", ], - idl_srcs = ["Command.aidl"], visibility = [":export"], deps = [ + ":exec_idl", ":local_socket_protocol", ":local_socket_protocol_pb_java_proto_lite", "//services/speakeasy/java/androidx/test/services/speakeasy:protocol", @@ -77,9 +84,9 @@ kt_android_library( "ShellExecutorImpl.java", "ShellExecutorLocalSocketImpl.kt", ], - idl_srcs = ["Command.aidl"], visibility = [":export"], deps = [ + ":exec_idl", ":local_socket_protocol", ":local_socket_protocol_pb_java_proto_lite", "//services/speakeasy/java/androidx/test/services/speakeasy:protocol", From ae264371b1b9cf152a23a2a2a056cc34ff3c160a Mon Sep 17 00:00:00 2001 From: Brett Chabot Date: Wed, 19 Mar 2025 19:56:44 +0000 Subject: [PATCH 4/6] Fix tests by upgrading rules_kotlin, rules_android. Fix gradle tests by upgrading to kotlin 2.1.0 --- MODULE.bazel | 152 +------------------- build_extensions/axt_android_local_test.bzl | 2 +- gradle-tests/build.gradle | 2 +- 3 files changed, 6 insertions(+), 150 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 79b6994b8..887c8b28f 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,18 +1,13 @@ # These need needs to be consistent with their counterparts in build_extensions/axt_deps_versions.bzl. -KOTLIN_VERSION = "1.8.20" +KOTLIN_VERSION = "2.1.0" KOTLINX_COROUTINES_VERSION = "1.7.1" -#GRPC_VERSION = "1.54.1" -# Get from https://github.com/JetBrains/kotlin/releases/ -#KOTLINC_RELEASE_SHA = "10df74c3c6e2eafd4c7a5572352d37cbe41774996e42de627023cb4c82b50ae4" bazel_dep(name = "rules_java", version = "8.6.0") bazel_dep(name = "rules_jvm_external", version = "6.6") -bazel_dep(name = "rules_android", version = "0.6.0", repo_name = "build_bazel_rules_android") -bazel_dep(name = "rules_kotlin", version = "1.9.6", repo_name = "io_bazel_rules_kotlin") +bazel_dep(name = "rules_android", version = "0.6.3", repo_name = "build_bazel_rules_android") +bazel_dep(name = "rules_kotlin", version = "2.1.3", repo_name = "io_bazel_rules_kotlin") bazel_dep(name = "protobuf", version = "29.0", repo_name = "com_google_protobuf") bazel_dep(name = "grpc-java", version = "1.68.1") -#needed? -#bazel_dep(name = "rules_python", version = "0.37.1") bazel_dep(name = "rules_robolectric", version = "4.14.1.2", repo_name = "robolectric") # Pin the version of rules_robolectric so that it matches the robolectric version we get from maven. @@ -42,92 +37,32 @@ maven.install( name = "maven", artifacts = [ "androidx.annotation:annotation:1.7.0-beta01", -# "androidx.annotation:annotation-experimental:jar:1.1.0", -# "androidx.appcompat:appcompat:1.3.1", "androidx.concurrent:concurrent-futures:1.1.0", "androidx.concurrent:concurrent-futures-ktx:1.1.0", "androidx.core:core:1.6.0", -# "androidx.cursoradapter:cursoradapter:1.0.0", -# "androidx.drawerlayout:drawerlayout:1.1.1", -# "androidx.fragment:fragment:1.3.6", -# "androidx.legacy:legacy-support-core-ui:1.0.0", -# "androidx.legacy:legacy-support-core-utils:1.0.0", -# "androidx.legacy:legacy-support-v4:1.0.0", "androidx.lifecycle:lifecycle-common:2.3.1", "androidx.multidex:multidex:2.0.0", -# "androidx.recyclerview:recyclerview:1.2.1", "androidx.tracing:tracing:1.1.0", -# "androidx.test.uiautomator:uiautomator:2.2.0", -# "androidx.viewpager:viewpager:1.0.0", -# "androidx.window:window:1.1.0", "androidx.window:window-java:1.1.0", "androidx.window:window-core:1.1.0", -# "aopalliance:aopalliance:1.0", -# "com.android.tools.lint:lint-api:30.1.0", -# "com.android.tools.lint:lint-checks:30.1.0", -# "com.beust:jcommander:1.72", - -# "com.google.android.material:material:1.4.0", -# "com.google.auto.value:auto-value:1.5.1", -# "com.google.code.findbugs:jsr305:3.0.2", -# "com.google.code.gson:gson:2.8.5", "com.google.dagger:dagger-compiler:2.46", "com.google.dagger:dagger-producers:2.46", "com.google.dagger:dagger:2.46", -# "com.google.errorprone:error_prone_annotations:2.9.0", -# "com.google.errorprone:javac-shaded:9-dev-r4023-3", -# "com.google.flogger:flogger-system-backend:0.4", -# "com.google.flogger:flogger:0.4", -# "com.google.flogger:google-extensions:0.4", "com.google.googlejavaformat:google-java-format:1.4", -# "com.google.guava:guava:30.1.1-android", -# "com.google.guava:listenablefuture:1.0", -# "com.google.inject.extensions:guice-multibindings:4.1.0", -# "com.google.inject:guice:4.1.0", -# "com.google.truth:truth:1.0", -# "com.googlecode.jarjar:jarjar:1.3", -# "com.linkedin.dexmaker:dexmaker-mockito:jar:2.28.1", -# "com.linkedin.dexmaker:dexmaker:2.28.1", -# "org.mockito.kotlin:mockito-kotlin:4.1.0", "com.squareup:javapoet:1.9.0", "io.grpc:grpc-okhttp:1.54.1", "io.grpc:grpc-stub:1.54.1", -# "org.apache.tomcat:annotations-api:6.0.53", -# "javax.annotation:javax.annotation-api:1.3.1", -# "javax.inject:javax.inject:1", -# "joda-time:joda-time:2.10.1", "junit:junit:4.13.2", -# "net.bytebuddy:byte-buddy-agent:1.9.10", -# "net.bytebuddy:byte-buddy:1.9.10", -# "net.sf.kxml:kxml2:jar:2.3.0", "org.ccil.cowan.tagsoup:tagsoup:1.2.1", -# "org.checkerframework:checker-compat-qual:2.5.5", -# "org.hamcrest:hamcrest-core:1.3", "org.hamcrest:hamcrest-library:1.3", -# "org.mockito:mockito-core:2.28.1", -# "org.objenesis:objenesis:2.6", "org.pantsbuild:jarjar:1.7.2", "org.jetbrains.kotlin:kotlin-stdlib:%s" % KOTLIN_VERSION, "org.jetbrains.kotlinx:kotlinx-coroutines-core:%s" % KOTLINX_COROUTINES_VERSION, "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:%s" % KOTLINX_COROUTINES_VERSION, "org.jetbrains.kotlinx:kotlinx-coroutines-android:%s" % KOTLINX_COROUTINES_VERSION, - "org.robolectric:robolectric:4.14.1", -# maven.artifact( -# artifact = "robolectric", -# exclusions = [ -# # exclude the com.google.guava dependency since that require -# # java8 compatibility. -# maven.exclusion( -# artifact = "guava", -# group = "com.google.guava", -# ), -# ], -# group = "org.robolectric", -# version = "4.13", -# ), + "org.robolectric:robolectric:4.14.1", ], fetch_sources = True, -# generate_compat_repositories = True, repositories = [ "https://maven.google.com", "https://repo1.maven.org/maven2", @@ -135,11 +70,8 @@ maven.install( ], ) - - use_repo(maven, "maven") - # need to have a isolated version tree for listenablefuture, because otherwise # listenablefuture will get resolved to 9999.0-empty-to-avoid-conflict-with-guava maven.install( @@ -155,79 +87,3 @@ maven.install( ) use_repo(maven, "maven_listenablefuture") - -#android_sdk_repository( -# name = "androidsdk", -# api_level = 35, -# build_tools_version = "35.0.0", -#) -# -#load("//:repo.bzl", "android_test_repositories") -# -#android_test_repositories(with_dev_repositories = True) -# -#load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") -# -#robolectric_repositories() -# -## Kotlin toolchains -# -#rules_kotlin_version = "1.8-RC-12" -#rules_kotlin_sha = "8e5c8ab087e0fa3fbb58e1f6b99d8fe40f75bac44994c3d208eba723284465d6" -# -#http_archive( -# name = "io_bazel_rules_kotlin", -# sha256 = rules_kotlin_sha, -# urls = ["https://github.com/bazelbuild/rules_kotlin/releases/download/v%s/rules_kotlin_release.tgz" % rules_kotlin_version], -#) -# -#load("@io_bazel_rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories", "kotlinc_version") -# -#kotlin_repositories( -# compiler_release = kotlinc_version( -# release = KOTLIN_VERSION, -# sha256 = KOTLINC_RELEASE_SHA, -# ), -#) -# -#load("@io_bazel_rules_kotlin//kotlin:core.bzl", "kt_register_toolchains") -# -#kt_register_toolchains() -# -## Android bazel rules from Dec 22 2022. This is the last commit that supports bazel 6.0.0 -#RULES_ANDROID_COMMIT = "ce37817d8589cac4a7cc20cb4d51fe8ad459dea1" -# -#RULES_ANDROID_SHA = "402b1ed3756028dca11835dad3225689a4040c3b377de798709f9a39b5c6af17" -# -#http_archive( -# name = "rules_android", -# sha256 = RULES_ANDROID_SHA, -# strip_prefix = "rules_android-%s" % RULES_ANDROID_COMMIT, -# url = "https://github.com/bazelbuild/rules_android/archive/%s.zip" % RULES_ANDROID_COMMIT, -#) -# -#load("@rules_android//:prereqs.bzl", "rules_android_prereqs") -# -#rules_android_prereqs() -# -#load("@rules_android//:defs.bzl", "rules_android_workspace") -# -#rules_android_workspace() -# -#register_toolchains( -# "@rules_android//toolchains/android:android_default_toolchain", -# "@rules_android//toolchains/android_sdk:android_sdk_tools", -#) -# -## Updated 2023-02-01 -#http_archive( -# name = "rules_license", -# sha256 = "6157e1e68378532d0241ecd15d3c45f6e5cfd98fc10846045509fb2a7cc9e381", -# urls = [ -# "https://github.com/bazelbuild/rules_license/releases/download/0.0.4/rules_license-0.0.4.tar.gz", -# ], -#) -# -#load("@maven//:compat.bzl", "compat_repositories") -# -#compat_repositories() diff --git a/build_extensions/axt_android_local_test.bzl b/build_extensions/axt_android_local_test.bzl index 2b5ca39e5..9e1e8ccc7 100644 --- a/build_extensions/axt_android_local_test.bzl +++ b/build_extensions/axt_android_local_test.bzl @@ -2,7 +2,7 @@ load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") load("//build_extensions:create_jar.bzl", "create_jar") -load("@build_bazel_rules_android//android:rules.bzl", "android_local_test") +load("@build_bazel_rules_android//android:rules.bzl", "android_local_test", "android_library") def axt_android_local_test(name, srcs = [], deps = [], manifest = "//build_extensions:AndroidManifest_robolectric.xml", tags = ["robolectric"], **kwargs): """A wrapper around android_local_test that provides sensible defaults for androidx.test. diff --git a/gradle-tests/build.gradle b/gradle-tests/build.gradle index 0bca6ec73..0d96133e1 100644 --- a/gradle-tests/build.gradle +++ b/gradle-tests/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.library' version '8.5.0' apply false - id 'org.jetbrains.kotlin.android' version '1.9.22' apply false + id 'org.jetbrains.kotlin.android' version '2.1.0' apply false } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) { kotlinOptions { From 83b084a0baca6b22f45c4f2b1da9d567536d8b89 Mon Sep 17 00:00:00 2001 From: Brett Chabot Date: Wed, 19 Mar 2025 20:27:48 +0000 Subject: [PATCH 5/6] increment CI cache versionwq --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 661d68b66..3ce9f7d41 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ on: - 'axt_**_release_branch' env: - cache-version: v1 + cache-version: v2 jobs: build: From 57321697f8b4bbeed90190ad344833ac983e2b54 Mon Sep 17 00:00:00 2001 From: Brett Chabot Date: Wed, 19 Mar 2025 20:52:22 +0000 Subject: [PATCH 6/6] GiHub CI: do not remove bazel cache/external. This results in permission denied errors. --- .github/workflows/ci.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ce9f7d41..d30dd2465 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,14 +46,8 @@ jobs: name: local-snapshot path: ~/download - name: 'Clean bazel cache' - # Don't cache the bazel/external directory, since it can be > 2GB - # and is expensive to restore and save - # According to the documentation, we should be able to exclude these via - # the actions/cache path, e.g. "!~/.cache/bazel/*/*/external/" but that - # doesn't seem to work. run: | rm -rf $(bazel info repository_cache) - rm -rf ~/.cache/bazel/*/*/external/ shell: bash test: runs-on: ubuntu-latest @@ -77,14 +71,8 @@ jobs: run: bazelisk test --test_tag_filters=robolectric,fast --build_tag_filters=robolectric,fast --test_output=all ... shell: bash - name: 'Clean bazel cache' - # Don't cache the bazel/external directory, since it can be > 2GB - # and is expensive to restore and save - # According to the documentation, we should be able to exclude these via - # the actions/cache path, e.g. "!~/.cache/bazel/*/*/external/" but that - # doesn't seem to work. run: | rm -rf $(bazel info repository_cache) - rm -rf ~/.cache/bazel/*/*/external/ shell: bash gradle-emulator-test: runs-on: ubuntu-latest