From 70cceb60276414457157102655651b63ea4bf54c Mon Sep 17 00:00:00 2001 From: chingor13 Date: Thu, 2 Apr 2026 06:03:39 +0000 Subject: [PATCH 1/5] build: add option to force regenerate all --- sdk-platform-java/.github/scripts/action.yaml | 7 ++++++- .../.github/scripts/hermetic_library_generation.sh | 11 ++++++++++- .../common/cli/get_changed_libraries.py | 11 +++++++++++ .../common/utils/generation_config_comparator.py | 10 ++++++++-- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/sdk-platform-java/.github/scripts/action.yaml b/sdk-platform-java/.github/scripts/action.yaml index f67f2a5229b5..9873378e1666 100644 --- a/sdk-platform-java/.github/scripts/action.yaml +++ b/sdk-platform-java/.github/scripts/action.yaml @@ -36,6 +36,10 @@ inputs: token: description: Personal Access Token required: true + force_regenerate_all: + description: true if we want to regenerate all libraries + default: false + required: false runs: using: "composite" @@ -76,7 +80,8 @@ runs: --target_branch "${BASE_REF}" \ --current_branch "${HEAD_REF}" \ --showcase_mode "${SHOWCASE_MODE}" \ - --image_tag "${IMAGE_TAG}" + --image_tag "${IMAGE_TAG}" \ + --force_regenerate_all "${FORCE_REGENERATE_ALL}" env: BASE_REF: ${{ inputs.base_ref }} HEAD_REF: ${{ inputs.head_ref }} diff --git a/sdk-platform-java/.github/scripts/hermetic_library_generation.sh b/sdk-platform-java/.github/scripts/hermetic_library_generation.sh index 5da0e64c3a79..fc991aa3e94d 100755 --- a/sdk-platform-java/.github/scripts/hermetic_library_generation.sh +++ b/sdk-platform-java/.github/scripts/hermetic_library_generation.sh @@ -50,6 +50,10 @@ case "${key}" in showcase_mode="$2" shift ;; + --force_regenerate_all) + force_regenerate_all="$2" + shift + ;; *) echo "Invalid option: [$1]" exit 1 @@ -81,6 +85,10 @@ if [ -z "${image_tag}" ]; then image_tag=$(grep "gapic_generator_version" "${generation_config}" | cut -d ':' -f 2 | xargs) fi +if [ -z "${force_regenerate_all}" ]; then + force_regenerate_all="false" +fi + workspace_name="/workspace" baseline_generation_config="baseline_generation_config.yaml" message="chore: generate libraries at $(date)" @@ -109,7 +117,8 @@ fi changed_libraries_file="$(mktemp)" python hermetic_build/common/cli/get_changed_libraries.py create \ --baseline-generation-config-path="${baseline_generation_config}" \ - --current-generation-config-path="${generation_config}" | tee "${changed_libraries_file}" + --current-generation-config-path="${generation_config}"\ + --force-regenerate-all="${force_regenerate_all}" | tee "${changed_libraries_file}" changed_libraries="$(cat "${changed_libraries_file}")" echo "Changed libraries are: ${changed_libraries:-"No changed library"}." diff --git a/sdk-platform-java/hermetic_build/common/cli/get_changed_libraries.py b/sdk-platform-java/hermetic_build/common/cli/get_changed_libraries.py index 0cc8a6cb349b..4f2bfe45c65e 100644 --- a/sdk-platform-java/hermetic_build/common/cli/get_changed_libraries.py +++ b/sdk-platform-java/hermetic_build/common/cli/get_changed_libraries.py @@ -21,6 +21,7 @@ import os import click +from common.model.config_change import ConfigChange from common.model.generation_config import GenerationConfig from common.utils.generation_config_comparator import compare_config @@ -51,9 +52,18 @@ def main(ctx): metadata about library generation. """, ) +@click.option( + "--force-regenerate-all", + required=False, + type=bool, + help=""" + Force regenerate all libraries. + """, +) def create( baseline_generation_config_path: str, current_generation_config_path: str, + force_regenerate_all: bool, ) -> None: """ Compares baseline generation config with current generation config and @@ -77,6 +87,7 @@ def create( config_change = compare_config( baseline_config=GenerationConfig.from_yaml(baseline_generation_config_path), current_config=GenerationConfig.from_yaml(current_generation_config_path), + force_regenerate_all=force_regenerate_all, ) click.echo(",".join(config_change.get_changed_libraries())) diff --git a/sdk-platform-java/hermetic_build/common/utils/generation_config_comparator.py b/sdk-platform-java/hermetic_build/common/utils/generation_config_comparator.py index f41299ddc273..594b9a5787c6 100644 --- a/sdk-platform-java/hermetic_build/common/utils/generation_config_comparator.py +++ b/sdk-platform-java/hermetic_build/common/utils/generation_config_comparator.py @@ -25,7 +25,8 @@ def compare_config( - baseline_config: GenerationConfig, current_config: GenerationConfig + baseline_config: GenerationConfig, current_config: GenerationConfig, + force_regenerate_all: bool, ) -> ConfigChange: """ Compare two GenerationConfig object and output a mapping from ConfigChange @@ -48,6 +49,12 @@ def compare_config( current_params = __convert_params_to_sorted_list( obj=current_config, excluded_params=excluded_params ) + if force_regenerate_all: + config_change = LibraryChange( + changed_param="force_regenerate_all", + current_value="true", + ) + diff[ChangeType.REPO_LEVEL_CHANGE].append(config_change) for baseline_param, current_param in zip(baseline_params, current_params): if baseline_param == current_param: @@ -60,7 +67,6 @@ def compare_config( current_value=current_param[1], ) diff[ChangeType.REPO_LEVEL_CHANGE].append(config_change) - __compare_libraries( diff=diff, baseline_library_configs=baseline_config.libraries, From 6cedf6936b6d684ba6ea29be05d6b3b3af316022 Mon Sep 17 00:00:00 2001 From: chingor13 Date: Thu, 2 Apr 2026 06:18:00 +0000 Subject: [PATCH 2/5] format --- .../common/utils/generation_config_comparator.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sdk-platform-java/hermetic_build/common/utils/generation_config_comparator.py b/sdk-platform-java/hermetic_build/common/utils/generation_config_comparator.py index 594b9a5787c6..8274af207476 100644 --- a/sdk-platform-java/hermetic_build/common/utils/generation_config_comparator.py +++ b/sdk-platform-java/hermetic_build/common/utils/generation_config_comparator.py @@ -25,8 +25,9 @@ def compare_config( - baseline_config: GenerationConfig, current_config: GenerationConfig, - force_regenerate_all: bool, + baseline_config: GenerationConfig, + current_config: GenerationConfig, + force_regenerate_all: bool = False, ) -> ConfigChange: """ Compare two GenerationConfig object and output a mapping from ConfigChange @@ -51,9 +52,9 @@ def compare_config( ) if force_regenerate_all: config_change = LibraryChange( - changed_param="force_regenerate_all", - current_value="true", - ) + changed_param="force_regenerate_all", + current_value="true", + ) diff[ChangeType.REPO_LEVEL_CHANGE].append(config_change) for baseline_param, current_param in zip(baseline_params, current_params): From 556935946688c03d60e7d6fa3bc3fb8429d27b93 Mon Sep 17 00:00:00 2001 From: chingor13 Date: Thu, 2 Apr 2026 06:40:39 +0000 Subject: [PATCH 3/5] try setting force_regenerate_all if branch name matches --- .github/workflows/hermetic_library_generation.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml index 42ade7d47ced..f3e5981de9da 100644 --- a/.github/workflows/hermetic_library_generation.yaml +++ b/.github/workflows/hermetic_library_generation.yaml @@ -43,4 +43,5 @@ jobs: base_ref: ${{ github.base_ref }} head_ref: ${{ github.head_ref }} token: ${{ secrets.CLOUD_JAVA_BOT_GITHUB_TOKEN }} + force_regenerate_all: ${{ github.event.pull_request.head.ref == 'snapshot-generator' }} image_tag: 2.68.1-SNAPSHOT # {x-version-update:gapic-generator-java:current} From f5d7288f334f62d5d6c838075f7df54c65f1b404 Mon Sep 17 00:00:00 2001 From: chingor13 Date: Thu, 2 Apr 2026 06:48:34 +0000 Subject: [PATCH 4/5] set env --- sdk-platform-java/.github/scripts/action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk-platform-java/.github/scripts/action.yaml b/sdk-platform-java/.github/scripts/action.yaml index 9873378e1666..7546ec0e1f4f 100644 --- a/sdk-platform-java/.github/scripts/action.yaml +++ b/sdk-platform-java/.github/scripts/action.yaml @@ -38,7 +38,6 @@ inputs: required: true force_regenerate_all: description: true if we want to regenerate all libraries - default: false required: false runs: @@ -88,3 +87,4 @@ runs: IMAGE_TAG: ${{ inputs.image_tag }} SHOWCASE_MODE: ${{ inputs.showcase_mode }} GH_TOKEN: ${{ inputs.token }} + FORCE_REGENERATE_ALL: ${{ inputs.force_regenerate_all }} From 1465f8fc384f8ff1bfdbc86f9cf9c446f4abac26 Mon Sep 17 00:00:00 2001 From: chingor13 Date: Thu, 2 Apr 2026 15:19:56 +0000 Subject: [PATCH 5/5] lock only force-regenerate on the codegen PR --- .github/workflows/hermetic_library_generation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml index f3e5981de9da..9fc2c33ae964 100644 --- a/.github/workflows/hermetic_library_generation.yaml +++ b/.github/workflows/hermetic_library_generation.yaml @@ -43,5 +43,5 @@ jobs: base_ref: ${{ github.base_ref }} head_ref: ${{ github.head_ref }} token: ${{ secrets.CLOUD_JAVA_BOT_GITHUB_TOKEN }} - force_regenerate_all: ${{ github.event.pull_request.head.ref == 'snapshot-generator' }} + force_regenerate_all: ${{ github.event.pull_request.head.ref == 'generate-libraries-main' }} image_tag: 2.68.1-SNAPSHOT # {x-version-update:gapic-generator-java:current}