bazel: enforce graft visibility with gazelle defaults#5304
Conversation
12e4e16 to
78d4c5b
Compare
There was a problem hiding this comment.
Pull request overview
This PR shifts graft/coreth and graft/subnet-evm Bazel visibility enforcement from “public everywhere + CI linting” to Bazel-native package visibility defaults, backed by Gazelle directives and a Gazelle binary extended with the visibility language.
Changes:
- Introduces
external_consumerspackage_groups ingraft/corethandgraft/subnet-evmand sets Gazelledefault_visibilityaccordingly. - Replaces many per-target
visibility = ["//visibility:public"]settings withpackage(default_visibility = [...])scoped to graft subpackages + allowed external consumers. - Updates the repo root
gazelle/gazelle_testto use a customgazelle_binarythat includes the visibility language extension.
Reviewed changes
Copilot reviewed 172 out of 172 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| BUILD.bazel | Configure a custom gazelle_binary with the visibility language and use it for gazelle + gazelle_test. |
| graft/subnet-evm/BUILD.bazel | Add Gazelle default_visibility, set package default visibility, and define external_consumers package group. |
| graft/coreth/BUILD.bazel | Add Gazelle default_visibility, set package default visibility, and define external_consumers package group. |
| graft/subnet-evm/warp/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/warp/messages/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/warp/warptest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/tests/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/tests/utils/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/tests/warp/BUILD.bazel | Set package default visibility (test target inherits package visibility). |
| graft/subnet-evm/tests/load/BUILD.bazel | Set package default visibility (test target inherits package visibility). |
| graft/subnet-evm/tests/antithesis/BUILD.bazel | Set package default visibility and remove per-target public visibility for binaries. |
| graft/subnet-evm/tests/antithesis/gencomposeconfig/BUILD.bazel | Set package default visibility and remove per-target public visibility for binaries. |
| graft/subnet-evm/stateupgrade/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/registry/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/precompiletest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/precompileconfig/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/modules/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contract/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/allowlist/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/allowlist/allowlisttest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/allowlist/allowlisttest/bindings/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/warp/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/warp/warpbindings/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/warp/warptest/bindings/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/utilstest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/txallowlist/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/rewardmanager/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/rewardmanager/rewardmanagertest/bindings/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/nativeminter/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/nativeminter/nativemintertest/bindings/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/feemanager/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/feemanager/feemanagertest/bindings/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/deployerallowlist/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/precompile/contracts/acp224feemanager/acp224feemanagertest/bindings/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/BUILD.bazel | Set package default visibility and remove per-target public visibility for binary. |
| graft/subnet-evm/plugin/runner/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/client/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/config/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/customheader/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/customtypes/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/extension/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/log/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/blockgascost/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/vmerrors/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/upgrade/legacy/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/upgrade/subnetevm/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/plugin/evm/tempextrastest/BUILD.bazel | Set package default visibility (test target inherits package visibility). |
| graft/subnet-evm/params/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/params/extras/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/params/extras/extrastest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/params/paramstest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/node/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/network/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/network/peertest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/miner/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/eth/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/eth/ethconfig/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/eth/filters/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/eth/gasprice/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/eth/gasestimator/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/eth/tracers/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/ethclient/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/ethclient/simulated/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/ethclient/subnetevmclient/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/examples/sign-uptime-message/BUILD.bazel | Set package default visibility and remove per-target public visibility for binary. |
| graft/subnet-evm/interfaces/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/accounts/abi/bind/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/accounts/abi/bind/backends/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/accounts/abi/bind/precompilebind/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/accounts/abi/bind/precompilebind/templatetest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/cmd/precompilegen/BUILD.bazel | Set package default visibility and remove per-target public visibility for binary. |
| graft/subnet-evm/cmd/simulator/config/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/cmd/simulator/key/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/cmd/simulator/load/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/cmd/simulator/metrics/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/cmd/simulator/txs/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/subnet-evm/cmd/simulator/main/BUILD.bazel | Set package default visibility and remove per-target public visibility for binary. |
| graft/coreth/warp/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/warp/warptest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/tests/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/tests/utils/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/tests/warp/BUILD.bazel | Set package default visibility (test target inherits package visibility). |
| graft/coreth/precompile/registry/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/precompile/precompiletest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/precompile/precompileconfig/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/precompile/modules/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/precompile/contracts/warp/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/precompile/contracts/warp/warpbindings/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/precompile/contract/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/BUILD.bazel | Set package default visibility and remove per-target public visibility for binary. |
| graft/coreth/plugin/factory/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/vmtest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/vmerrors/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/atomic/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/atomic/atomictest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/atomic/state/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/atomic/sync/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/atomic/txpool/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/atomic/vm/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/upgrade/ap0/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/upgrade/ap1/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/upgrade/ap3/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/upgrade/ap4/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/upgrade/ap5/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/upgrade/cortina/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/upgrade/etna/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/tempextrastest/BUILD.bazel | Set package default visibility (test target inherits package visibility). |
| graft/coreth/plugin/evm/log/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/extension/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/customtypes/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/customheader/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/config/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/plugin/evm/client/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/accounts/abi/bind/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/accounts/abi/bind/backends/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/interfaces/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/ethclient/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/ethclient/corethclient/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/ethclient/simulated/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/eth/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/eth/ethconfig/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/eth/filters/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/eth/gasprice/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/eth/gasestimator/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/eth/tracers/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/core/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/core/coretest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/core/extstate/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/core/txpool/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/core/txpool/blobpool/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/core/txpool/legacypool/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/core/vm/runtime/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/consensus/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/consensus/dummy/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/node/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/network/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/miner/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/nativeasset/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/params/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/params/extras/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/params/extras/extrastest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/params/paramstest/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/cmd/simulator/config/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/cmd/simulator/key/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/cmd/simulator/load/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/cmd/simulator/metrics/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/cmd/simulator/txs/BUILD.bazel | Set package default visibility and remove per-target public visibility. |
| graft/coreth/cmd/simulator/main/BUILD.bazel | Set package default visibility and remove per-target public visibility for binary. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
JonathanOppenheimer
left a comment
There was a problem hiding this comment.
I validated that all of these, besides the top level `BUILD.bazel' files just move the visibility (the top level ones define the binary).
(my understanding, correct me if I'm wrong)
This prevents other Bazel targets from depending on the graft Bazel targets (which is what we want). While this doesn't directly enforce Go imports, because we enforce the bazel metadata to be correct in CI, this effectively prevents importing graft packages where they shouldn't be imported.
Is there any interest in removing / refining TestImportViolations (the prior solution) in favor of the bazel solution?
Currently the test enforces
graft/corethcannot be imported fromvms/evm, exceptvms/evm/emulategraft/subnet-evmcan only be imported fromgraft/subnet-evmorvms/evm/emulategraft/evmcannot importgraft/corethor graft/subnet-evm
Correct.
💯 The original was a stop-gap because we didn't have a build system in place.
Done but in the positive; i.e. can only be imported by those targets explicitly included in
Done exactly like this.
Done, but from the perspective of |
Change-Id: I0676d5c1afa3a0fceefb503ae01fe7c35ea9ac74
Change-Id: I19d514e2a1bca3f5c90c3ed0e31ea743efab10e3
b3ca3e3 to
e2af4f1
Compare
|
Updated to sign the initial commit. |
|
I delete the old test here: #5313 |
Why this should be merged
Enforces sub-directory visibility through the build system instead of relying on the CI linter.
How this works
graft/{coreth,subnet-evm}/BUILD.bazeldefineexternal_consumerstargets and include Gazelle directives to setdefault_visibilityto said target as well as the respective__subpackages__(i.e. sub-directories). The rootBUILD.bazelfile is updated to use agazellebinary that understands the directives.How this was tested
CI still builds despite the removal of the
//visibility:publicattributes across all other files, meaning that dependent targets are still allowed. No negative test performed as inspection is sufficient and this is a non-critical change.Need to be documented in RELEASES.md?
No