Skip to content

Fix external tests on Bazel 9.2: patch rules_go duplicate constraints - #810

Merged
fmeum merged 1 commit into
bazel-contrib:masterfrom
helly25:fix-bazel92-rules-go-duplicate-constraints
Aug 3, 2026
Merged

Fix external tests on Bazel 9.2: patch rules_go duplicate constraints#810
fmeum merged 1 commit into
bazel-contrib:masterfrom
helly25:fix-bazel92-rules-go-duplicate-constraints

Conversation

@helly25

@helly25 helly25 commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

All external_test (…, latest, true, …) CI jobs have been failing since bazelisk latest moved from Bazel 9.1.1 to 9.2.0 (~2026-07-14). This is what is breaking the currently open renovate PRs #804#808 — in the failing runs 122 of 123 tests pass; the job fails only on an analysis error.

Bazel 9.2 makes duplicate constraint values in target_compatible_with a hard analysis-time error. rules_go's tests/core/cgo:binary_with_rpath lists both @platforms//os:linux and @platforms//os:macos (OR was intended, AND was written), so analyzing @io_bazel_rules_go//tests/core/cgo:all fails with:

ERROR: .../external/rules_go+/tests/core/cgo/BUILD.bazel:346:10: Duplicate constraint values detected:
constraint_setting @@platforms//os:os has [@@platforms//os:linux, @@platforms//os:osx]

Under Bazel <= 9.1 the target was silently skipped as incompatible-everywhere, which is why this only surfaced now. The target is still broken on rules_go master, so upgrading rules_go (#807/#808) does not help.

Changes

  • Add tests/rules_go-fix-binary_with_rpath-constraints.patch, rewriting the attribute to the canonical OR idiom (select with @platforms//:incompatible default), applied via single_version_override in tests/MODULE.bazel. No version pin, so renovate bumps keep working; the patch applies cleanly to rules_go 0.61.1, 0.62.0 and current master. No test is disabled — on the contrary, binary_with_rpath now actually builds on linux/macos for the first time.
  • Fix the generate_imported_dylib.sh invocation in run_external_tests.sh: it has always failed with cc: fatal error: no input files (masked by || echo) because IMPORTED_C_PATH is never set anywhere. Default to the imported.c next to the script and output into the cgo package directory. This was never the CI blocker (dylib_test is tagged manual and never runs), but the ERROR line in every log was a red herring while debugging this.

Follow-up: the proper fix belongs in bazel-contrib/rules_go (tests/core/cgo/BUILD.bazel); the local patch can be dropped once a fixed rules_go release is available.

Test plan

Verified locally on macOS arm64 with Bazel 9.2.0:

  • Without the patch: reproduced the exact CI failure (43/44 targets analyzed).
  • With the patch: all 44 targets in @io_bazel_rules_go//tests/core/cgo:all analyze cleanly, and binary_with_rpath builds successfully with the LLVM toolchain.
  • The fixed dylib prep invocation generates libimported.dylib / libversioned.* as intended.

Bazel 9.2.0 (picked up via USE_BAZEL_VERSION=latest) rejects duplicate
constraint values in target_compatible_with at analysis time. rules_go's
tests/core/cgo:binary_with_rpath lists both @platforms//os:linux and
@platforms//os:macos (OR was intended, AND was written), so analyzing
@io_bazel_rules_go//tests/core/cgo:all now fails with:

  Duplicate constraint values detected: constraint_setting
  @@platforms//os:os has [@@platforms//os:linux, @@platforms//os:osx]

Under Bazel <= 9.1 the target was silently skipped as incompatible
everywhere. Patch it via single_version_override to the canonical OR
idiom (select with @platforms//:incompatible default) until fixed in
rules_go. The patch applies cleanly to rules_go 0.61.1, 0.62.0 and
current master, and the target now actually builds on linux/macos.

Also fix the generate_imported_dylib.sh invocation in
run_external_tests.sh, which always failed with 'cc: fatal error: no
input files' (masked by '|| echo') because IMPORTED_C_PATH is never
set; default to the imported.c next to the script and output into the
cgo package directory.
@fmeum

fmeum commented Aug 3, 2026

Copy link
Copy Markdown
Member

Do you happen to know which Bazel commit broke this? This shouldn't happen in a Bazel minor release.

@fmeum
fmeum enabled auto-merge (squash) August 3, 2026 18:44
@helly25

helly25 commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator Author

Do you happen to know which Bazel commit broke this? This shouldn't happen in a Bazel minor release.

I sent you the full details on slack.

@fmeum
fmeum merged commit 1c5054d into bazel-contrib:master Aug 3, 2026
76 checks passed
@helly25
helly25 deleted the fix-bazel92-rules-go-duplicate-constraints branch August 3, 2026 20:15
helly25 added a commit that referenced this pull request Aug 4, 2026
## Summary

Collects all outstanding renovate dependency upgrades, which were
previously blocked by the Bazel 9.2 / rules_go analysis error fixed in
#810. Each commit is the corresponding renovate PR cherry-picked onto
current master:

| PR | Dependency | Version |
|----|------------|---------|
| #804 | rules_java (WORKSPACE) | 9.6.1 → 9.7.0 |
| #805 | aspect_bazel_lib (WORKSPACE) | 3.5.0 → 3.7.1 |
| #806 | bazel_skylib (MODULE + toolchain/deps.bzl) | 1.9.0 → 1.9.2 |
| #776 | boringssl (MODULE + WORKSPACE) | 0.20260526.0 → 0.20260803.0 |
| #787 | rules_rust (MODULE) | 0.70.0 → 0.73.0 |
| #807 | io_bazel_rules_go (WORKSPACE) | 0.61.1 → 0.62.0 |
| #808 | rules_go (MODULE) | 0.61.1 → 0.62.0 |

Those PRs can be closed once this merges (renovate should detect the
versions are present).

## Verification (local, macOS arm64, Bazel 9.2.0, bzlmod)

- `@io_bazel_rules_go//tests/core/cgo:all`,
`@rules_rust//test/unit/{interleaved_cc_info,native_deps}:all`,
`@boringssl//...` and `//foreign:pcre` all analyze cleanly (106 targets)
— confirming the #810 rules_go patch applies to 0.62.0 and the boringssl
patch applies to 0.20260803.0.
- The test targets excluded in `run_external_tests.sh` all still exist
under rules_rust 0.73.0 / rules_go 0.62.0, so target-pattern expansion
stays valid.

Note: rules_go 0.62.0 has a known Bazel 9 issue with duplicate mingw
constraints in its windows cgo platforms (bazel-contrib/rules_go#4665);
it should not trigger here since nothing targets Windows, but flagging
it in case CI says otherwise.

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants