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 ccd48aac7407..a07d35b362a5 100755 --- a/sdk-platform-java/hermetic_build/library_generation/postprocess_library.sh +++ b/sdk-platform-java/hermetic_build/library_generation/postprocess_library.sh @@ -85,11 +85,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 694a3bf6421d..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" -- "/.*google-.*/src/main/java/.*/stub/Version.java" deep-copy-regex: - source: "/{{ proto_path }}/(v.*)/.*-java/proto-google-.*/src" 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 1a916623bd79..5c973605adb9 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}" +} + normalize_owlbot_yaml_test() { local temp_dir=$(mktemp -d) local input_file="${temp_dir}/input.yaml" @@ -266,6 +287,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 normalize_owlbot_yaml_test ) 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" 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 49c121b41f5b..8dcf799f86be 100755 --- a/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh +++ b/sdk-platform-java/hermetic_build/library_generation/utils/utilities.sh @@ -334,6 +334,45 @@ error_if_not_exists() { 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 + 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 +} + +# 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 + 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 +} + normalize_owlbot_yaml() { local input_file="$1" local output_file="$2"