From 0581fc2def0f8177ae633cbc2692394c44368d48 Mon Sep 17 00:00:00 2001 From: Will Hickey Date: Thu, 5 Jan 2023 12:45:29 -0600 Subject: [PATCH] Update CI pipeline to only run `checks` step on version bump PRs (#29243) * Add logic to buildkite pipeline so version bump PRs don't run the full CI --- ci/buildkite-pipeline.sh | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ci/buildkite-pipeline.sh b/ci/buildkite-pipeline.sh index e854e2cb80e514..25a7b4d444f9de 100755 --- a/ci/buildkite-pipeline.sh +++ b/ci/buildkite-pipeline.sh @@ -311,6 +311,29 @@ pull_or_push_steps() { wait_step fi + # Version bump PRs are an edge case that can skip most of the CI steps + if affects .toml$ && affects .lock$ && ! affects_other_than .toml$ .lock$; then + optional_old_version_number=$(git diff "$BUILDKITE_PULL_REQUEST_BASE_BRANCH"..HEAD validator/Cargo.toml | \ + grep -e "^-version" | sed 's/-version = "\(.*\)"/\1/') + echo "optional_old_version_number: ->$optional_old_version_number<-" + new_version_number=$(grep -e "^version = " validator/Cargo.toml | sed 's/version = "\(.*\)"/\1/') + echo "new_version_number: ->$new_version_number<-" + + # Every line in a version bump diff will match one of these patterns. Since we're using grep -v the output is the + # lines that don't match. Any diff that produces output here is not a version bump. + # | cat is a no-op. If this pull request is a version bump then grep will output no lines and have an exit code of 1. + # Piping the output to cat prevents that non-zero exit code from exiting this script + diff_other_than_version_bump=$(git diff "$BUILDKITE_PULL_REQUEST_BASE_BRANCH"..HEAD | \ + grep -vE "^ |^@@ |^--- |^\+\+\+ |^index |^diff |^-( \")?solana.*$optional_old_version_number|^\+( \")?solana.*$new_version_number|^-version|^\+version"|cat) + echo "diff_other_than_version_bump: ->$diff_other_than_version_bump<-" + + if [ -z "$diff_other_than_version_bump" ]; then + echo "Diff only contains version bump." + command_step checks ". ci/rust-version.sh; ci/docker-run.sh \$\$rust_nightly_docker_image ci/test-checks.sh" 20 + exit 0 + fi + fi + # Run the full test suite by default, skipping only if modifications are local # to some particular areas of the tree if affects_other_than ^.buildkite ^.mergify .md$ ^docs/ ^web3.js/ ^explorer/ ^.gitbook; then