From 0b4bb2f93297edd54845587f74635188b25fa061 Mon Sep 17 00:00:00 2001 From: Diego Date: Mon, 20 Apr 2026 14:22:38 -0400 Subject: [PATCH 1/6] fix: manual preservation of Version.java files --- .../library_generation/postprocess_library.sh | 9 ++++ .../templates/owlbot.yaml.monorepo.j2 | 1 - .../library_generation/utils/utilities.sh | 43 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/sdk-platform-java/hermetic_build/library_generation/postprocess_library.sh b/sdk-platform-java/hermetic_build/library_generation/postprocess_library.sh index eeec07156ecd..0d111c53ec66 100755 --- a/sdk-platform-java/hermetic_build/library_generation/postprocess_library.sh +++ b/sdk-platform-java/hermetic_build/library_generation/postprocess_library.sh @@ -87,11 +87,20 @@ preprocessed_libraries_binding="${owlbot_cli_source_folder}" pushd "${postprocessing_target}" +# Backs up all files matching `stub/Version.java` +# This is a workaround to prevent owl-bot-copy from omitting +# Version.java files when transferring the generated code +backup_dir=$(mktemp -d) +backup_version_java "${PWD}" "${backup_dir}" + owl-bot copy-code \ --source-repo-commit-hash=none \ --source-repo="${owlbot_cli_source_folder}" \ --config-file="${owlbot_yaml_relative_path}" +restore_version_java "${PWD}" "${backup_dir}" +rm -rf "${backup_dir}" + # clean the custom owlbot yaml if [[ "${is_monorepo}" == "true" ]]; then diff --git a/sdk-platform-java/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 b/sdk-platform-java/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 index 37096be0ee56..9ed63c4260b0 100644 --- a/sdk-platform-java/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 +++ b/sdk-platform-java/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 @@ -21,7 +21,6 @@ deep-remove-regex: deep-preserve-regex: - "/{{ module_name }}/google-.*/src/test/java/com/google/cloud/.*/v.*/it/IT.*Test.java" -- "/{{ module_name }}/google-.*/src/main/java/com/google/cloud/.*/v.*/stub/Version.java" deep-copy-regex: - source: "/{{ proto_path }}/(v.*)/.*-java/proto-google-.*/src" diff --git a/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh b/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh index 873a0b2de3d2..0e607421d65d 100755 --- a/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh +++ b/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh @@ -333,3 +333,46 @@ error_if_not_exists() { exit 1 fi } + +# Backups existing Version.java files in the specified target directory +# Arguments: +# 1 - target_directory: The directory where to search for Version.java +# 2 - backup_directory: The directory where the backups will be stored +backup_version_java() { + local target_directory=$1 + local backup_directory=$2 + + pushd "${target_directory}" > /dev/null + for file in $(find */src src -path "*/stub/Version.java" -type f 2>/dev/null); do + if [[ -n "$file" ]]; then + local backup_path="${backup_directory}/${file}" + mkdir -p "$(dirname "${backup_path}")" + cp "$file" "${backup_path}" + fi + done + popd > /dev/null +} + +# Restores Version.java files from the backup directory to the target directory +# Arguments: +# 1 - target_directory: The directory where to restore Version.java +# 2 - backup_directory: The directory where the backups are stored +restore_version_java() { + local target_directory=$1 + local backup_directory=$2 + + if [[ ! -d "${backup_directory}" ]]; then + return 0 + fi + + pushd "${backup_directory}" > /dev/null + for file in $(find . -type f 2>/dev/null); do + if [[ -n "$file" ]]; then + local relative_path="${file#./}" + local target_path="${target_directory}/${relative_path}" + mkdir -p "$(dirname "${target_path}")" + mv "$file" "${target_path}" + fi + done + popd > /dev/null +} From f80f0d49d50ad0101ec9dbd9219abb1274afa874 Mon Sep 17 00:00:00 2001 From: Diego Marquez Date: Mon, 20 Apr 2026 14:29:43 -0400 Subject: [PATCH 2/6] Update sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .../library_generation/utils/utilities.sh | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh b/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh index 0e607421d65d..99cf54ab6f39 100755 --- a/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh +++ b/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh @@ -366,13 +366,11 @@ restore_version_java() { fi pushd "${backup_directory}" > /dev/null - for file in $(find . -type f 2>/dev/null); do - if [[ -n "$file" ]]; then - local relative_path="${file#./}" - local target_path="${target_directory}/${relative_path}" - mkdir -p "$(dirname "${target_path}")" - mv "$file" "${target_path}" - fi + find . -type f -print0 | while IFS= read -r -d '' file; do + local relative_path="${file#./}" + local target_path="${target_directory}/${relative_path}" + mkdir -p "$(dirname "${target_path}")" + mv "$file" "${target_path}" done popd > /dev/null } From c088c4fa018aed5b428b7c4f1bc8e74d7f4ae536 Mon Sep 17 00:00:00 2001 From: Diego Marquez Date: Mon, 20 Apr 2026 14:29:54 -0400 Subject: [PATCH 3/6] Update sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .../library_generation/utils/utilities.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh b/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh index 99cf54ab6f39..08967f871645 100755 --- a/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh +++ b/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh @@ -343,12 +343,10 @@ backup_version_java() { local backup_directory=$2 pushd "${target_directory}" > /dev/null - for file in $(find */src src -path "*/stub/Version.java" -type f 2>/dev/null); do - if [[ -n "$file" ]]; then - local backup_path="${backup_directory}/${file}" - mkdir -p "$(dirname "${backup_path}")" - cp "$file" "${backup_path}" - fi + find . -type f -path "*/src/*/stub/Version.java" -print0 | while IFS= read -r -d '' file; do + local backup_path="${backup_directory}/${file#./}" + mkdir -p "$(dirname "${backup_path}")" + cp "$file" "${backup_path}" done popd > /dev/null } From 80215df086f81aef6a3f348a9b77318d447d5694 Mon Sep 17 00:00:00 2001 From: Diego Marquez Date: Mon, 20 Apr 2026 14:41:11 -0400 Subject: [PATCH 4/6] fix: finish merge Removed outdated regex for Version.java and adjusted deep-preserve-regex. --- .../library_generation/templates/owlbot.yaml.monorepo.j2 | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sdk-platform-java/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 b/sdk-platform-java/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 index 8df89ec409b9..9ed63c4260b0 100644 --- a/sdk-platform-java/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 +++ b/sdk-platform-java/hermetic_build/library_generation/templates/owlbot.yaml.monorepo.j2 @@ -21,10 +21,6 @@ deep-remove-regex: deep-preserve-regex: - "/{{ module_name }}/google-.*/src/test/java/com/google/cloud/.*/v.*/it/IT.*Test.java" -<<<<<<< fix/version-java-owlbot-yaml -======= -- "/.*google-.*/src/main/java/.*/stub/Version.java" ->>>>>>> main deep-copy-regex: - source: "/{{ proto_path }}/(v.*)/.*-java/proto-google-.*/src" From 759bb654e2e36c1488488377a416b5da78906c48 Mon Sep 17 00:00:00 2001 From: Diego Date: Mon, 20 Apr 2026 14:44:24 -0400 Subject: [PATCH 5/6] test: add units for new logic --- .../tests/generate_library_unit_tests.sh | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/sdk-platform-java/hermetic_build/library_generation/tests/generate_library_unit_tests.sh b/sdk-platform-java/hermetic_build/library_generation/tests/generate_library_unit_tests.sh index 3ea71a8e9dea..7f7b62fdb924 100755 --- a/sdk-platform-java/hermetic_build/library_generation/tests/generate_library_unit_tests.sh +++ b/sdk-platform-java/hermetic_build/library_generation/tests/generate_library_unit_tests.sh @@ -213,6 +213,27 @@ get_proto_path_from_preprocessed_sources_multiple_proto_dirs_fails() { assertEquals 1 ${res} } +backup_and_restore_version_java_succeeds() { + local target_dir=$(mktemp -d) + local backup_dir=$(mktemp -d) + + mkdir -p "${target_dir}/google-cloud-test/src/main/java/com/google/cloud/test/v1/stub" + echo "version1" > "${target_dir}/google-cloud-test/src/main/java/com/google/cloud/test/v1/stub/Version.java" + + backup_version_java "${target_dir}" "${backup_dir}" + + # Simulate owl-bot overwriting the file + echo "version2" > "${target_dir}/google-cloud-test/src/main/java/com/google/cloud/test/v1/stub/Version.java" + + restore_version_java "${target_dir}" "${backup_dir}" + + # The original "version1" should have been restored + local restored_content=$(cat "${target_dir}/google-cloud-test/src/main/java/com/google/cloud/test/v1/stub/Version.java") + assertEquals "version1" "${restored_content}" + + rm -rf "${target_dir}" "${backup_dir}" +} + # Execute tests. # One line per test. test_list=( @@ -237,6 +258,7 @@ test_list=( get_proto_path_from_preprocessed_sources_valid_library_succeeds get_proto_path_from_preprocessed_sources_empty_library_fails get_proto_path_from_preprocessed_sources_multiple_proto_dirs_fails + backup_and_restore_version_java_succeeds ) pushd "${script_dir}" From 64962c0e7208d0420ec2358921d67601801fd14f Mon Sep 17 00:00:00 2001 From: Diego Date: Mon, 20 Apr 2026 16:04:18 -0400 Subject: [PATCH 6/6] chore: update golden --- .../tests/resources/goldens/.OwlBot-hermetic-golden.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk-platform-java/hermetic_build/library_generation/tests/resources/goldens/.OwlBot-hermetic-golden.yaml b/sdk-platform-java/hermetic_build/library_generation/tests/resources/goldens/.OwlBot-hermetic-golden.yaml index e8b942f0dddb..225b4620bf5f 100644 --- a/sdk-platform-java/hermetic_build/library_generation/tests/resources/goldens/.OwlBot-hermetic-golden.yaml +++ b/sdk-platform-java/hermetic_build/library_generation/tests/resources/goldens/.OwlBot-hermetic-golden.yaml @@ -21,7 +21,6 @@ deep-remove-regex: deep-preserve-regex: - "/java-bare-metal-solution/google-.*/src/test/java/com/google/cloud/.*/v.*/it/IT.*Test.java" -- "/.*google-.*/src/main/java/.*/stub/Version.java" deep-copy-regex: - source: "/google/cloud/baremetalsolution/(v.*)/.*-java/proto-google-.*/src"