From b5c7731d2c706fb27a5c3c011d01b8cbfd50b286 Mon Sep 17 00:00:00 2001 From: "salma.samy" Date: Thu, 29 Oct 2026 13:01:55 +0000 Subject: [PATCH] Run Bazel presubmits in prod after recreating prod instance groups Allow an optional leading --org= flag in trigger_testing_presubmits.py (default bazel-testing), include org in annotation contexts so testing and prod annotations do not overwrite each other, and run google-bazel-presubmit and bazel-bazel-github-presubmit in the bazel org after recreating prod instance groups. --- buildkite/trigger_testing_presubmits.py | 23 +++++++++--------- pipelines/publish-vm-image.yml | 31 +++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/buildkite/trigger_testing_presubmits.py b/buildkite/trigger_testing_presubmits.py index 789d88cdce..f953bd703f 100755 --- a/buildkite/trigger_testing_presubmits.py +++ b/buildkite/trigger_testing_presubmits.py @@ -25,7 +25,6 @@ import bazelci -ORG = "bazel-testing" POLL_INTERVAL_SECONDS = 60 TERMINAL_BUILD_STATES = frozenset(["passed", "failed", "canceled", "skipped", "not_run"]) LINUX_IMAGE_SKIP_TASKS = ( @@ -84,7 +83,7 @@ def annotate_build_state(org, pipeline, build_info, skip_tasks_csv=""): number = build_info.get("number") web_url = build_info.get("web_url") state = build_info.get("state", "unknown") - context = f"testing-presubmit-{pipeline}" + context = f"presubmit-{org}-{pipeline}" skip_suffix = f" (skipping `{skip_tasks_csv}`)" if skip_tasks_csv else " (skipping none)" if not is_build_finished(build_info): annotate( @@ -111,12 +110,12 @@ def parse_pipelines(raw_args): def main(argv=None): - if argv is None: - argv = sys.argv[1:] + argv = list(sys.argv[1:] if argv is None else argv) + org = argv.pop(0).split("=", 1)[1] if argv and argv[0].startswith("--org=") else "bazel-testing" pipelines = parse_pipelines(argv) if not pipelines: - bazelci.eprint("Usage: trigger_testing_presubmits.py [ ...]") + bazelci.eprint("Usage: trigger_testing_presubmits.py [--org=] [ ...]") return 1 test_vm_names = os.environ.get("BAZEL_TEST_VM_NAMES", "") @@ -142,16 +141,16 @@ def main(argv=None): tracked = [] try: for pipeline in pipelines: - client = bazelci.BuildkiteClient(org=ORG, pipeline=pipeline) + client = bazelci.BuildkiteClient(org=org, pipeline=pipeline) build_info = client.trigger_new_build("HEAD", message=message, env=trigger_env) number = build_info["number"] web_url = build_info["web_url"] state = build_info.get("state", "unknown") print( - f"Triggered {ORG}/{pipeline} build #{number}: {web_url} (state={state})", + f"Triggered {org}/{pipeline} build #{number}: {web_url} (state={state})", flush=True, ) - annotate_build_state(ORG, pipeline, build_info, skip_tasks_csv) + annotate_build_state(org, pipeline, build_info, skip_tasks_csv) tracked.append( { "pipeline": pipeline, @@ -168,7 +167,7 @@ def main(argv=None): entry["build_info"] = entry["client"].get_build_info(entry["number"]) if is_build_finished(entry["build_info"]): annotate_build_state( - ORG, entry["pipeline"], entry["build_info"], skip_tasks_csv + org, entry["pipeline"], entry["build_info"], skip_tasks_csv ) timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") @@ -180,9 +179,9 @@ def main(argv=None): except (bazelci.BuildkiteException, subprocess.CalledProcessError, requests.RequestException) as ex: bazelci.eprint(ex) annotate( - "testing-presubmits-error", + f"presubmits-error-{org}", "error", - f"Failed while running testing presubmits: `{ex}`", + f"Failed while running {org} presubmits: `{ex}`", ) return 1 @@ -191,7 +190,7 @@ def main(argv=None): state = entry["build_info"].get("state", "unknown") web_url = entry["build_info"].get("web_url") print( - f" {ORG}/{entry['pipeline']} build #{entry['number']}: {state} ({web_url})", + f" {org}/{entry['pipeline']} build #{entry['number']}: {state} ({web_url})", flush=True, ) diff --git a/pipelines/publish-vm-image.yml b/pipelines/publish-vm-image.yml index 782d3696b9..c283d72e09 100644 --- a/pipelines/publish-vm-image.yml +++ b/pipelines/publish-vm-image.yml @@ -151,3 +151,34 @@ steps: - "/opt/android-sdk-linux:/opt/android-sdk-linux:ro" - "/var/lib/buildkite-agent:/var/lib/buildkite-agent" - "/var/lib/gitmirrors:/var/lib/gitmirrors:ro" + + - wait + + - command: |- + cd buildkite + ./trigger_testing_presubmits.py --org=bazel google-bazel-presubmit bazel-bazel-github-presubmit + label: ":test_tube: Run Bazel presubmits in bazel (prod)" + timeout_in_minutes: 60 + agents: + - "queue=default" + plugins: + - docker#v3.8.0: + always-pull: true + environment: + - "ANDROID_HOME" + - "ANDROID_NDK_HOME" + - "BAZEL_TEST_VM_NAMES=${BAZEL_TEST_VM_NAMES}" + - "BUILDKITE_ARTIFACT_UPLOAD_DESTINATION" + image: "gcr.io/bazel-public/ubuntu2204@sha256:a8fc286aaca55230a3c2dddd3a5311770e6f609fa31f53447866c3b3bfb74398" + network: "host" + privileged: true + propagate-environment: true + propagate-uid-gid: true + volumes: + - "/etc/group:/etc/group:ro" + - "/etc/passwd:/etc/passwd:ro" + - "/etc/shadow:/etc/shadow:ro" + - "/opt/android-ndk-r15c:/opt/android-ndk-r15c:ro" + - "/opt/android-sdk-linux:/opt/android-sdk-linux:ro" + - "/var/lib/buildkite-agent:/var/lib/buildkite-agent" + - "/var/lib/gitmirrors:/var/lib/gitmirrors:ro"