Build java_tools for javac9 and javac10.
The [bazelbuild/java_tools repo](https://github.com/bazelbuild/java_tools.git) now has branches for different versions of the javac jars:
* langtools_javac9
* langtools_javac10
This PR adds targets for building and uploading to GCS the zips for both Java 9 and Java 10. The [java_tools binaries Buildkite pipeline](https://buildkite.com/bazel-trusted/java-tools-binaries-java) runs the targets for uploading to GCS the release and dist zips.
Closes #8018.
PiperOrigin-RevId: 243770039
diff --git a/src/BUILD b/src/BUILD
index effe314..487ecc6 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -555,61 +555,137 @@
visibility = ["//visibility:public"],
)
+JAVA_TOOLS_DEPLOY_JARS = [
+ "//src/java_tools/buildjar:JavaBuilder_deploy.jar",
+ "//src/java_tools/buildjar:VanillaJavaBuilder_deploy.jar",
+ "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/genclass:GenClass_deploy.jar",
+ "//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac:turbine_deploy.jar",
+ "//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine:turbine_direct_binary_deploy.jar",
+ "//src/java_tools/junitrunner/java/com/google/testing/coverage:JacocoCoverage_jarjar_deploy.jar",
+ "//src/java_tools/junitrunner/java/com/google/testing/junit/runner:ExperimentalRunner_deploy.jar",
+ "//src/java_tools/junitrunner/java/com/google/testing/junit/runner:Runner_deploy.jar",
+ "//third_party/jarjar:jarjar_command_deploy.jar",
+] + select({
+ "//src/conditions:arm": ["//src/java_tools/singlejar/java/com/google/devtools/build/singlejar:bazel-singlejar_deploy.jar"],
+ "//conditions:default": [],
+})
+
genrule(
- name = "jars_java_tools_zip",
- srcs = [
- "//src/java_tools/buildjar:JavaBuilder_deploy.jar",
- "//src/java_tools/buildjar:VanillaJavaBuilder_deploy.jar",
- "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/genclass:GenClass_deploy.jar",
- "//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac:turbine_deploy.jar",
- "//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine:turbine_direct_binary_deploy.jar",
- "//src/java_tools/junitrunner/java/com/google/testing/coverage:JacocoCoverage_jarjar_deploy.jar",
- "//src/java_tools/junitrunner/java/com/google/testing/junit/runner:ExperimentalRunner_deploy.jar",
- "//src/java_tools/junitrunner/java/com/google/testing/junit/runner:Runner_deploy.jar",
- "//third_party/java/jdk/langtools:java_compiler_jar",
- "//third_party/java/jdk/langtools:javac_jar",
- "//third_party/java/jdk/langtools:jdk_compiler_jar",
- "//third_party/jarjar:jarjar_command_deploy.jar",
- ] + select({
- "//src/conditions:arm": ["//src/java_tools/singlejar/java/com/google/devtools/build/singlejar:bazel-singlejar_deploy.jar"],
- "//conditions:default": [],
- }),
- outs = ["jars_java_tools.zip"],
- cmd = "zip -q -j $@ $$(echo $(SRCS) | sort)",
+ name = "jars_java_tools_java9_zip",
+ srcs = JAVA_TOOLS_DEPLOY_JARS + [
+ "@java_tools_langtools_javac9//:jdk_compiler_jar",
+ "@java_tools_langtools_javac9//:java_compiler_jar",
+ "@java_tools_langtools_javac9//:javac_jar",
+ ],
+ outs = ["jars_java_tools_java9.zip"],
+ cmd = "zip -qjX $@ $$(echo $(SRCS) | sort)",
visibility = ["//visibility:private"],
)
genrule(
- name = "java_tools_dist",
- srcs = [
- "//src/java_tools/buildjar:srcs",
- "//src/java_tools/junitrunner:srcs",
- "//src/java_tools/singlejar:srcs",
- "//src/tools/singlejar:embedded_java_tools",
- "//third_party/jarjar:srcs",
- "//third_party/java/jdk/langtools:license-and-srcs",
- "//third_party/ijar:transitive_sources",
+ name = "jars_java_tools_java10_zip",
+ srcs = JAVA_TOOLS_DEPLOY_JARS + [
+ "@java_tools_langtools_javac10//:jdk_compiler_jar",
+ "@java_tools_langtools_javac10//:java_compiler_jar",
],
- outs = ["java_tools_dist.zip"],
- cmd = "zip -Xr $@ $$(echo $(SRCS) | sort)",
- output_to_bindir = 1,
+ outs = ["jars_java_tools_java10.zip"],
+ cmd = "zip -qjX $@ $$(echo $(SRCS) | sort)",
+ visibility = ["//visibility:private"],
)
+JAVA_VERSIONS = ("9", "10")
+
+[
+ genrule(
+ name = "java_tools_dist_java" + java_version,
+ srcs = [
+ "//src/java_tools/buildjar:srcs",
+ "//src/java_tools/junitrunner:srcs",
+ "//src/java_tools/singlejar:srcs",
+ "//src/tools/singlejar:embedded_java_tools",
+ "//third_party/jarjar:srcs",
+ "//third_party/ijar:transitive_sources",
+ "@java_tools_langtools_javac" + java_version + "//:srcs",
+ ],
+ outs = ["java_tools_dist_javac" + java_version + ".zip"],
+ cmd = "zip -qXr $@ $$(echo $(SRCS) | sort)",
+ output_to_bindir = 1,
+ )
+ for java_version in JAVA_VERSIONS
+]
+
+[
+ # Targets used by the java_tools_binaries Buildkite pipeline to build the
+ # java_tools_dist_java* zips and upload them to a tmp directory in GCS.
+ sh_binary(
+ name = "upload_java_tools_dist_java" + java_version,
+ srcs = ["upload_java_tools.sh"],
+ args = [
+ "--java_tools_zip",
+ "src/java_tools_dist_javac" + java_version + ".zip",
+ "--gcs_java_tools_dir",
+ "tmp/dist",
+ "--java_version",
+ java_version,
+ "--platform",
+ ] + select({
+ "//src/conditions:darwin": ["darwin"],
+ "//src/conditions:darwin_x86_64": ["darwin_x86_64"],
+ "//src/conditions:windows": ["windows"],
+ "//src/conditions:linux_x86_64": ["linux"],
+ "//conditions:default": ["unknown"],
+ }),
+ data = [":java_tools_dist_java" + java_version],
+ deps = ["@bazel_tools//tools/bash/runfiles"],
+ )
+ for java_version in JAVA_VERSIONS
+]
+
# Builds the remote Java tools archive. Not embedded or used in Bazel, but used
# by the Java tools release process.
-genrule(
- name = "java_tools_zip",
- srcs = [
- ":jars_java_tools_zip",
- "//src/tools/singlejar:singlejar_transitive_zip",
- "//third_party/ijar:ijar_transitive_zip",
- ],
- outs = ["java_tools.zip"],
- cmd = "$(location //src:merge_zip_files) java_tools $@ $(SRCS)",
- output_to_bindir = 1,
- tools = ["//src:merge_zip_files"],
- visibility = ["//src/test/shell/bazel:__pkg__"],
-)
+[
+ genrule(
+ name = "java_tools_java" + java_version + "_zip",
+ srcs = [
+ ":jars_java_tools_java" + java_version + ".zip",
+ "//src/tools/singlejar:singlejar_transitive_zip",
+ "//third_party/ijar:ijar_transitive_zip",
+ ],
+ outs = ["java_tools_java" + java_version + ".zip"],
+ cmd = "$(location //src:merge_zip_files) java_tools $@ $(SRCS)",
+ output_to_bindir = 1,
+ tools = ["//src:merge_zip_files"],
+ visibility = ["//src/test/shell/bazel:__pkg__"],
+ )
+ for java_version in JAVA_VERSIONS
+]
+
+[
+ # Targets used by the java_tools_binaries Buildkite pipeline to build the
+ # java_tools_java* zips and upload them to a tmp directory in GCS.
+ sh_binary(
+ name = "upload_java_tools_java" + java_version,
+ srcs = ["upload_java_tools.sh"],
+ args = [
+ "--java_tools_zip",
+ "src/java_tools_java" + java_version + ".zip",
+ "--gcs_java_tools_dir",
+ "tmp/build",
+ "--java_version",
+ java_version,
+ "--platform",
+ ] + select({
+ "//src/conditions:darwin": ["darwin"],
+ "//src/conditions:darwin_x86_64": ["darwin_x86_64"],
+ "//src/conditions:windows": ["windows"],
+ "//src/conditions:linux_x86_64": ["linux"],
+ "//conditions:default": ["unknown"],
+ }),
+ data = [":java_tools_java" + java_version + "_zip"],
+ deps = ["@bazel_tools//tools/bash/runfiles"],
+ )
+ for java_version in JAVA_VERSIONS
+]
# Part of the Java tools remote archive. Not embedded or used in Bazel.
genrule(
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD
index ef03d9d..399b26c 100644
--- a/src/test/shell/bazel/BUILD
+++ b/src/test/shell/bazel/BUILD
@@ -144,12 +144,25 @@
)
sh_test(
- name = "bazel_java_tools_test",
+ name = "bazel_java_tools_javac9_test",
size = "small",
srcs = ["bazel_java_tools_test.sh"],
+ args = ["java9"],
data = [
":test-deps",
- "//src:java_tools.zip",
+ "//src:java_tools_java9.zip",
+ "@bazel_tools//tools/bash/runfiles",
+ ],
+)
+
+sh_test(
+ name = "bazel_java_tools_javac10_test",
+ size = "small",
+ srcs = ["bazel_java_tools_test.sh"],
+ args = ["java10"],
+ data = [
+ ":test-deps",
+ "//src:java_tools_java10.zip",
"@bazel_tools//tools/bash/runfiles",
],
)
diff --git a/src/test/shell/bazel/bazel_java_tools_test.sh b/src/test/shell/bazel/bazel_java_tools_test.sh
index 3f35cbd..dec4e206 100755
--- a/src/test/shell/bazel/bazel_java_tools_test.sh
+++ b/src/test/shell/bazel/bazel_java_tools_test.sh
@@ -16,6 +16,9 @@
# Load the test setup defined in the parent directory
set -euo pipefail
+
+JAVA_TOOLS_JAVA_VERSION="$1"; shift
+
# --- begin runfiles.bash initialization ---
if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
if [[ -f "$0.runfiles_manifest" ]]; then
@@ -65,8 +68,8 @@
function expect_path_in_java_tools() {
path="$1"; shift
- count=$(zipinfo -1 $(rlocation io_bazel/src/java_tools.zip) | grep -c "$path")
- [[ "$count" -gt 0 ]] || fail "Path $path not found in java_tools"
+ count=$(zipinfo -1 $(rlocation io_bazel/src/java_tools_${JAVA_TOOLS_JAVA_VERSION}.zip) | grep -c "$path")
+ [[ "$count" -gt 0 ]] || fail "Path $path not found in java_tools_${JAVA_TOOLS_JAVA_VERSION}.zip"
}
function test_java_tools_has_ijar() {
@@ -122,15 +125,17 @@
}
function test_java_tools_has_jdk_compiler() {
- expect_path_in_java_tools "java_tools/jdk_compiler"
+ expect_path_in_java_tools "java_tools/jdk_compiler.jar"
}
function test_java_tools_has_java_compiler() {
- expect_path_in_java_tools "java_tools/java_compiler"
+ expect_path_in_java_tools "java_tools/java_compiler.jar"
}
function test_java_tools_has_javac() {
+ if [[ "${JAVA_TOOLS_JAVA_VERSION}" == "java9" ]]; then
expect_path_in_java_tools "java_tools/javac-9+181-r4173-1.jar"
+ fi
}
function test_java_tools_has_jarjar() {
diff --git a/src/upload_java_tools.sh b/src/upload_java_tools.sh
new file mode 100755
index 0000000..64d344a
--- /dev/null
+++ b/src/upload_java_tools.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+# Copyright 2019 The Bazel Authors. All rights reserved.
+#
+# 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.
+
+# A script to upload a given java_tools zip on GCS. Used by the java_tools_binaries
+# Buildkite pipeline. It is not recommended to run this script manually.
+#
+# Mandatory flags:
+# --java_tools_zip The workspace-relative path of a java_tools zip.
+# --gcs_java_tools_dir The directory under bazel_java_tools on GCS where the zip is uploaded.
+# --java_version The version of the javac the given zip embeds.
+# --platform The name of the platform where the zip was built.
+
+set -euo pipefail
+
+# --- begin runfiles.bash initialization ---
+if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
+ if [[ -f "$0.runfiles_manifest" ]]; then
+ export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
+ elif [[ -f "$0.runfiles/MANIFEST" ]]; then
+ export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST"
+ elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+ export RUNFILES_DIR="$0.runfiles"
+ fi
+fi
+if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+ source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
+elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
+ source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
+ "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
+else
+ echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
+ exit 1
+fi
+# --- end runfiles.bash initialization ---
+
+# Parsing the flags.
+while [[ -n "$@" ]]; do
+ arg="$1"; shift
+ val="$1"; shift
+ case "$arg" in
+ "--java_tools_zip") java_tools_zip_name="$val" ;;
+ "--gcs_java_tools_dir") gcs_java_tools_dir="$val" ;;
+ "--java_version") java_version="$val" ;;
+ "--platform") platform="$val" ;;
+ *) echo "Flag $arg is not recognized." && exit 1 ;;
+ esac
+done
+
+java_tools_zip=$(rlocation io_bazel/${java_tools_zip_name})
+
+gsutil_cmd="gsutil"
+if [[ "$platform" == "windows" ]]; then
+ gsutil_cmd="gsutil.cmd"
+fi
+
+"$gsutil_cmd" cp "$java_tools_zip" \
+ "gs://bazel-mirror/bazel_java_tools/${gcs_java_tools_dir}/java_tools_javac${java_version}_${platform}-$(date +%s).zip"