bazel icon indicating copy to clipboard operation
bazel copied to clipboard

bazel query --output=proto should include information about whether the attribute has cfg = "exec"

Open timothyg-stripe opened this issue 1 year ago • 3 comments

Description of the feature request:

We would like the Attribute protobuf message in build.proto to contain a field, tentatively called cfg_is_exec, that is set to true if the attribute has the exec transition (cfg = "exec").

Which category does this issue belong to?

Configurability

What underlying problem are you trying to solve with this feature?

Context: To run static analysis checks on our code repository, we would like to run one large bazel query --output=proto, and then process its output through other tools. Most of the query language can be simulated in this way given a repo-wide query dump, along with some Bazel options like --noimplicit_deps. However, we found that the Bazel option --notool_deps cannot be simulated, since the query dump contains no information about whether an attribute has cfg = "exec" or not.

Numerous precedents exist:

  • The old AttributeDefinition message (used for bazel info build-language) contains both a nodep field and a cfg_is_host field. cfg_is_host is exactly what I'm after, except the fact that bazel info build-language only supports built-in rules.
  • The Attribute message already contains a nodep field, which, like the proposed field conveys some message about a property of the attribute.

Also: I understand that bazel cquery (+ bazel config) would give us the necessary information. However, we currently have several reasons to avoid running cquery on the entire repo.

Which operating system are you running Bazel on?

macOS

What is the output of bazel info release?

release 7.1.2

If bazel info release returns development version or (@non-git), tell us how you built Bazel.

No response

What's the output of git remote get-url origin; git rev-parse HEAD ?

No response

Have you found anything relevant by searching the web?

No.

Any other information, logs, or outputs that you want to share?

No response

timothyg-stripe avatar May 18 '24 02:05 timothyg-stripe

Instead of just a boolean, could we maybe make this a string field that is either exec, target or //some/pkg:defs.bzl%my_starlark_transition (assuming the transition is exported)? @katre is working on chaining transitions, which could mean that an exec transition is hiding within a Starlark one.

fmeum avatar May 18 '24 08:05 fmeum

My instinct is to suggest cquery. I acknowledge you said you don't want to do that.

@fmeum good point. But that still wouldn't work perfectly, would it? If the output records //some/pkg:defs.bzl%my_starlark_transition the user would still have to do work to figure out if that hides an exec transition?

query also won't catch toolchain deps very well.

gregestren avatar Oct 01 '24 22:10 gregestren

Thank you for contributing to the Bazel repository! This issue has been marked as stale since it has not had any activity in the last 1+ years. It will be closed in the next 90 days unless any other activity occurs. If you think this issue is still relevant and should stay open, please post any comment here and the issue will no longer be marked as stale.

github-actions[bot] avatar Dec 06 '25 01:12 github-actions[bot]