Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to know all Bazel targets affected by a git commit?

Tags:

git

bazel

A git commit may change some workspace rules, some source files, .bazelrc, etc. How to get all Bazel targets affected, thus need to rebuild and test, after such change?

In Buck, we can run buck targets --show-rulekey //... to see all rule key changes between two Git revisions. Is there any equivalent command in Bazel?

like image 452
Zebra Propulsion Lab Avatar asked Apr 08 '19 17:04

Zebra Propulsion Lab


1 Answers

See here:

# Under Apache 2.0 licence
COMMIT_RANGE=${COMMIT_RANGE:-$(git merge-base origin/master HEAD)".."}

# Go to the root of the repo
cd "$(git rev-parse --show-toplevel)"

# Get a list of the current files in package form by querying Bazel.
files=()
for file in $(git diff --name-only ${COMMIT_RANGE} ); do
  files+=($(bazel query $file))
  echo $(bazel query $file)
done

# Query for the associated buildables
buildables=$(bazel query \
    --keep_going \
    --noshow_progress \
    "kind(.*_binary, rdeps(//..., set(${files[*]})))")
# Run the tests if there were results
if [[ ! -z $buildables ]]; then
  echo "Building binaries"
  bazel build $buildables
fi

tests=$(bazel query \
    --keep_going \
    --noshow_progress \
    "kind(test, rdeps(//..., set(${files[*]}))) except attr('tags', 'manual', //...)")
# Run the tests if there were results
if [[ ! -z $tests ]]; then
  echo "Running tests"
  bazel test $tests
fi

Take also a look at bazel-diff.

like image 181
Vertexwahn Avatar answered Sep 25 '22 01:09

Vertexwahn