@@ -20,44 +20,47 @@ 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-spanner-jdbc" ]=" com.google.cloud:google-cloud-spanner-jdbc"
41+ 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"
42+ 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"
43+ module_linkage_checker_arguments[" java-storage-nio" ]=" com.google.cloud:google-cloud-nio"
4144
4245# This function requires access to the versions.txt to retrieve the versions for the artifacts
4346# It will try to match the artifact_id in the versions.txt file and attach it to form the GAV
4447# The GAV list is required by Linkage Checker as program arguments
4548function build_program_arguments() {
46- artifact_list=" ${repo_linkage_checker_arguments [$1]} "
49+ artifact_list=" ${module_linkage_checker_arguments [$1]} "
4750
4851 for artifact in ${artifact_list// ,/ } ; do # Split on comma
4952 artifact_id=$( echo " ${artifact} " | cut -d ' :' -f2)
5053
5154 # The grep query tries to match `{artifact_id}:{released_version}:{current_version}`.
5255 # 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} "
56+ version=$( cat " ${monorepoRoot} / versions.txt" | grep -E " ^${artifact_id} :.*:.*$" | cut -d ' :' -f3)
57+ module_gav_coordinate =" ${artifact} :${version} "
5558
5659 # The first entry added is not separated with a comma. Avoids generating `,{ARTIFACT_LIST}`
5760 if [ -z " ${linkage_checker_arguments} " ]; then
58- linkage_checker_arguments=" ${repo_gav_coordinate } "
61+ linkage_checker_arguments=" ${module_gav_coordinate } "
5962 else
60- linkage_checker_arguments=" ${linkage_checker_arguments} ,${repo_gav_coordinate } "
63+ linkage_checker_arguments=" ${linkage_checker_arguments} ,${module_gav_coordinate } "
6164 fi
6265 done
6366}
@@ -70,34 +73,30 @@ mvn -B -ntp clean compile -T 1C
7073# Linkage Checker tool resides in the /dependencies subfolder
7174pushd dependencies
7275
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
76+ # MODULES_UNDER_TEST Env Var accepts a comma separated list of monorepo submodules to test. For Github CI,
77+ # this will be a single module as Github will build a matrix of modules with each being tested in parallel.
78+ # For local invocation, you can pass a list of modules to test multiple modules together.
79+ for module in ${MODULES_UNDER_TEST// ,/ } ; do # Split on comma
80+ module_dir=" ${monorepoRoot} /${module} "
81+ if [ ! -d " ${module_dir} " ]; then
82+ echo " Directory ${module_dir} does not exist. Skipping or failed."
83+ exit 1
8884 fi
8985
86+ pushd " ${module_dir} "
87+ # Install all module artifacts to ~/.m2 (there can be multiple relevant artifacts to test i.e. core, admin, control)
88+ mvn clean install -B -V -ntp -T 1C -DskipTests -Dclirr.skip -Denforcer.skip -Dmaven.javadoc.skip
9089
9190 linkage_checker_arguments=" "
92- build_program_arguments " ${repo } "
91+ build_program_arguments " ${module } "
9392
9493 # Linkage Checker /dependencies
9594 popd
9695
9796 echo " Artifact List: ${linkage_checker_arguments} "
9897 # The `-s` argument filters the linkage check problems that stem from the artifact
9998 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 "
99+ echo " Running Linkage Checker on the module 's handwritten artifacts "
101100 echo " Linkage Checker Program Arguments: ${program_args} "
102101 mvn -B -ntp exec:java -Dexec.args=" ${program_args} " -P exec-linkage-checker
103102done
0 commit comments