@@ -20,44 +20,53 @@ source "${scriptDir}/common.sh"
2020
2121validate_protobuf_compatibility_script_inputs
2222
23+ monorepoRoot=$( realpath " ${scriptDir} /../../.." )
24+
2325# Declare a map of downstream handwritten libraries and the relevant artifacts to test. The map stores a
24- # K/V pairing of (Key: repo name, Value: comma separate list of Group ID:Artifact ID pairings). Note: The
25- # value list doesn't hold the version and this needs to be parsed from the repo's versions.txt file
26- declare -A repo_linkage_checker_arguments
27- repo_linkage_checker_arguments[" google-cloud-java" ]=" io.grafeas:grafeas,com.google.cloud:google-cloud-vertexai,com.google.cloud:google-cloud-resourcemanager,com.google.cloud:google-cloud-translate,com.google.api.grpc:grpc-google-cloud-vertexai-v1,com.google.api.grpc:grpc-google-cloud-vertexai-v1beta1,com.google.api.grpc:grpc-google-cloud-resourcemanager-v3,com.google.api.grpc:grpc-google-cloud-translate-v3,com.google.api.grpc:grpc-google-cloud-translate-v3beta1"
28- repo_linkage_checker_arguments[" java-bigtable" ]=" com.google.cloud:google-cloud-bigtable,com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2,com.google.api.grpc:grpc-google-cloud-bigtable-v2"
29- repo_linkage_checker_arguments[" java-bigquery" ]=" com.google.cloud:google-cloud-bigquery"
30- repo_linkage_checker_arguments[" java-bigquerystorage" ]=" com.google.cloud:google-cloud-bigquerystorage,com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1,com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2,com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1,com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1alpha"
31- repo_linkage_checker_arguments[" java-datastore" ]=" com.google.cloud:google-cloud-datastore,com.google.cloud.datastre:datastore-v1-proto-client,com.google.api.grpc:grpc-google-cloud-datastore-admin-v1"
32- repo_linkage_checker_arguments[" java-firestore" ]=" com.google.cloud:google-cloud-firestore,com.google.cloud:google-cloud-firestore-admin,com.google.api.grpc:grpc-google-cloud-firestore-admin-v1,com.google.api.grpc:grpc-google-cloud-firestore-v1"
33- repo_linkage_checker_arguments[" java-logging" ]=" com.google.cloud:google-cloud-logging,com.google.api.grpc:grpc-google-cloud-logging-v2"
34- repo_linkage_checker_arguments[" java-logging-logback" ]=" com.google.cloud:google-cloud-logging-logback"
35- repo_linkage_checker_arguments[" java-pubsub" ]=" com.google.cloud:google-cloud-pubsub,com.google.api.grpc:grpc-google-cloud-pubsub-v1"
36- repo_linkage_checker_arguments[" java-pubsublite" ]=" com.google.cloud:google-cloud-pubsublite,com.google.api.grpc:grpc-google-cloud-pubsublite-v1"
37- repo_linkage_checker_arguments[" java-spanner-jdbc" ]=" com.google.cloud:google-cloud-spanner-jdbc"
38- repo_linkage_checker_arguments[" java-spanner" ]=" com.google.cloud:google-cloud-spanner,com.google.cloud:google-cloud-spanner-executor,com.google.api.grpc:grpc-google-cloud-spanner-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1,com.google.api.grpc:grpc-google-cloud-spanner-executor-v1"
39- repo_linkage_checker_arguments[" java-storage" ]=" com.google.cloud:google-cloud-storage,com.google.api.grpc:gapic-google-cloud-storage-v2,com.google.api.grpc:grpc-google-cloud-storage-v2,com.google.cloud:google-cloud-storage-control,com.google.api.grpc:grpc-google-cloud-storage-control-v2"
40- repo_linkage_checker_arguments[" java-storage-nio" ]=" com.google.cloud:google-cloud-nio"
26+ # K/V pairing of (Key: module name, Value: comma separate list of Group ID:Artifact ID pairings). Note: The
27+ # value list doesn't hold the version and this needs to be parsed from the monorepo's versions.txt file
28+ declare -A module_linkage_checker_arguments
29+ module_linkage_checker_arguments[" java-grafeas" ]=" io.grafeas:grafeas"
30+ module_linkage_checker_arguments[" java-resourcemanager" ]=" com.google.cloud:google-cloud-resourcemanager,com.google.api.grpc:grpc-google-cloud-resourcemanager-v3"
31+ module_linkage_checker_arguments[" java-translate" ]=" com.google.cloud:google-cloud-translate,com.google.api.grpc:grpc-google-cloud-translate-v3,com.google.api.grpc:grpc-google-cloud-translate-v3beta1"
32+ module_linkage_checker_arguments[" java-bigtable" ]=" com.google.cloud:google-cloud-bigtable,com.google.api.grpc:grpc-google-cloud-bigtable-admin-v2,com.google.api.grpc:grpc-google-cloud-bigtable-v2"
33+ module_linkage_checker_arguments[" java-bigquery" ]=" com.google.cloud:google-cloud-bigquery"
34+ module_linkage_checker_arguments[" java-bigquerystorage" ]=" com.google.cloud:google-cloud-bigquerystorage,com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta1,com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1beta2,com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1,com.google.api.grpc:grpc-google-cloud-bigquerystorage-v1alpha"
35+ module_linkage_checker_arguments[" java-datastore" ]=" com.google.cloud:google-cloud-datastore,com.google.cloud.datastre:datastore-v1-proto-client,com.google.api.grpc:grpc-google-cloud-datastore-admin-v1"
36+ module_linkage_checker_arguments[" java-firestore" ]=" com.google.cloud:google-cloud-firestore,com.google.cloud:google-cloud-firestore-admin,com.google.api.grpc:grpc-google-cloud-firestore-admin-v1,com.google.api.grpc:grpc-google-cloud-firestore-v1"
37+ module_linkage_checker_arguments[" java-logging" ]=" com.google.cloud:google-cloud-logging,com.google.api.grpc:grpc-google-cloud-logging-v2"
38+ module_linkage_checker_arguments[" java-logging-logback" ]=" com.google.cloud:google-cloud-logging-logback"
39+ module_linkage_checker_arguments[" java-pubsub" ]=" com.google.cloud:google-cloud-pubsub,com.google.api.grpc:grpc-google-cloud-pubsub-v1"
40+ module_linkage_checker_arguments[" java-showcase" ]=" com.google.showcase:gapic-showcase,com.google.api.grpc:grpc-gapic-showcase-v1beta1"
41+ module_linkage_checker_arguments[" java-spanner-jdbc" ]=" com.google.cloud:google-cloud-spanner-jdbc"
42+ module_linkage_checker_arguments[" java-spanner" ]=" com.google.cloud:google-cloud-spanner,com.google.cloud:google-cloud-spanner-executor,com.google.api.grpc:grpc-google-cloud-spanner-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-instance-v1,com.google.api.grpc:grpc-google-cloud-spanner-admin-database-v1,com.google.api.grpc:grpc-google-cloud-spanner-executor-v1"
43+ module_linkage_checker_arguments[" java-storage" ]=" com.google.cloud:google-cloud-storage,com.google.api.grpc:gapic-google-cloud-storage-v2,com.google.api.grpc:grpc-google-cloud-storage-v2,com.google.cloud:google-cloud-storage-control,com.google.api.grpc:grpc-google-cloud-storage-control-v2"
44+ module_linkage_checker_arguments[" java-storage-nio" ]=" com.google.cloud:google-cloud-nio"
4145
4246# This function requires access to the versions.txt to retrieve the versions for the artifacts
4347# It will try to match the artifact_id in the versions.txt file and attach it to form the GAV
4448# The GAV list is required by Linkage Checker as program arguments
4549function build_program_arguments() {
46- artifact_list=" ${repo_linkage_checker_arguments [$1]} "
50+ artifact_list=" ${module_linkage_checker_arguments [$1]} "
4751
4852 for artifact in ${artifact_list// ,/ } ; do # Split on comma
4953 artifact_id=$( echo " ${artifact} " | cut -d ' :' -f2)
5054
5155 # The grep query tries to match `{artifact_id}:{released_version}:{current_version}`.
5256 # The artifact_id must be exact otherwise multiple entries may match
53- version=$( cat " versions.txt" | grep -E " ^${artifact_id} :.*:.*$" | cut -d ' :' -f3)
54- repo_gav_coordinate=" ${artifact} :${version} "
57+ version=$( cat " ${monorepoRoot} /versions.txt" | grep -E " ^${artifact_id} :.*:.*$" | cut -d ' :' -f3 || true)
58+ # Unreleased internal test modules like java-showcase are not tracked in versions.txt,
59+ # so fallback to 0.0.1-SNAPSHOT for linkage checking.
60+ if [ -z " ${version} " ]; then
61+ version=" 0.0.1-SNAPSHOT"
62+ fi
63+ module_gav_coordinate=" ${artifact} :${version} "
5564
5665 # The first entry added is not separated with a comma. Avoids generating `,{ARTIFACT_LIST}`
5766 if [ -z " ${linkage_checker_arguments} " ]; then
58- linkage_checker_arguments=" ${repo_gav_coordinate } "
67+ linkage_checker_arguments=" ${module_gav_coordinate } "
5968 else
60- linkage_checker_arguments=" ${linkage_checker_arguments} ,${repo_gav_coordinate } "
69+ linkage_checker_arguments=" ${linkage_checker_arguments} ,${module_gav_coordinate } "
6170 fi
6271 done
6372}
@@ -70,34 +79,30 @@ mvn -B -ntp clean compile -T 1C
7079# Linkage Checker tool resides in the /dependencies subfolder
7180pushd dependencies
7281
73- # REPOS_UNDER_TEST Env Var accepts a comma separated list of googleapis repos to test. For Github CI,
74- # this will be a single repo as Github will build a matrix of repos with each repo being tested in parallel.
75- # For local invocation, you can pass a list of repos to test multiple repos together.
76- for repo in ${REPOS_UNDER_TEST// ,/ } ; do # Split on comma
77- # Perform testing on main (with latest changes). Shallow copy as history is not important
78- git clone " https://github.com/googleapis/${repo} .git" --depth=1
79- pushd " ${repo} "
80-
81- if [ " ${repo} " == " google-cloud-java" ]; then
82- # The `-am` command also builds anything these libraries depend on (i.e. proto-* and grpc-* sub modules)
83- mvn clean install -B -V -ntp -T 1C -DskipTests -Dclirr.skip -Denforcer.skip -Dmaven.javadoc.skip \
84- -pl " ${google_cloud_java_handwritten_maven_args} " -am
85- else
86- # Install all repo modules to ~/.m2 (there can be multiple relevant artifacts to test i.e. core, admin, control)
87- mvn clean install -B -V -ntp -T 1C -DskipTests -Dclirr.skip -Denforcer.skip -Dmaven.javadoc.skip
82+ # MODULES_UNDER_TEST Env Var accepts a comma separated list of monorepo submodules to test. For Github CI,
83+ # this will be a single module as Github will build a matrix of modules with each being tested in parallel.
84+ # For local invocation, you can pass a list of modules to test multiple modules together.
85+ for module in ${MODULES_UNDER_TEST// ,/ } ; do # Split on comma
86+ module_dir=" ${monorepoRoot} /${module} "
87+ if [ ! -d " ${module_dir} " ]; then
88+ echo " Directory ${module_dir} does not exist. Skipping or failed."
89+ exit 1
8890 fi
8991
92+ pushd " ${module_dir} "
93+ # Install all module artifacts to ~/.m2 (there can be multiple relevant artifacts to test i.e. core, admin, control)
94+ mvn clean install -B -V -ntp -T 1C -DskipTests -Dclirr.skip -Denforcer.skip -Dmaven.javadoc.skip
9095
9196 linkage_checker_arguments=" "
92- build_program_arguments " ${repo } "
97+ build_program_arguments " ${module } "
9398
9499 # Linkage Checker /dependencies
95100 popd
96101
97102 echo " Artifact List: ${linkage_checker_arguments} "
98103 # The `-s` argument filters the linkage check problems that stem from the artifact
99104 program_args=" -r --artifacts ${linkage_checker_arguments} ,com.google.protobuf:protobuf-java:${PROTOBUF_RUNTIME_VERSION} ,com.google.protobuf:protobuf-java-util:${PROTOBUF_RUNTIME_VERSION} -s ${linkage_checker_arguments} "
100- echo " Running Linkage Checker on the repo 's handwritten modules "
105+ echo " Running Linkage Checker on the module 's handwritten artifacts "
101106 echo " Linkage Checker Program Arguments: ${program_args} "
102107 mvn -B -ntp exec:java -Dexec.args=" ${program_args} " -P exec-linkage-checker
103108done
0 commit comments