From 8ed16fe47a421781752272f4bd1e11eb5d3c9839 Mon Sep 17 00:00:00 2001 From: kennytm Date: Sat, 30 Dec 2017 00:05:15 +0800 Subject: [PATCH] Requires tools to test-pass if the corresponding submodule is updated. If a PR intends to update a tool but its test has failed, abort the merge regardless of current channel. This should help the tool maintainers if the update turns out to be failing due to changes in latest master. --- .travis.yml | 2 +- appveyor.yml | 2 +- src/ci/docker/x86_64-gnu-tools/checktools.sh | 24 +++++++++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6a7725e01cf..d955c3ac3c3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ services: - docker git: - depth: 1 + depth: 2 submodules: false matrix: diff --git a/appveyor.yml b/appveyor.yml index da788554049..1a186c080ce 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -96,7 +96,7 @@ environment: matrix: fast_finish: true -clone_depth: 1 +clone_depth: 2 build: false install: diff --git a/src/ci/docker/x86_64-gnu-tools/checktools.sh b/src/ci/docker/x86_64-gnu-tools/checktools.sh index 0d40863c092..b9268fe62ed 100755 --- a/src/ci/docker/x86_64-gnu-tools/checktools.sh +++ b/src/ci/docker/x86_64-gnu-tools/checktools.sh @@ -16,6 +16,7 @@ X_PY="$1" TOOLSTATE_FILE="$(realpath $2)" OS="$3" COMMIT="$(git rev-parse HEAD)" +CHANGED_FILES="$(git diff --name-status HEAD HEAD^)" touch "$TOOLSTATE_FILE" @@ -29,7 +30,28 @@ set -e cat "$TOOLSTATE_FILE" -if [ "$RUST_RELEASE_CHANNEL" = nightly ]; then +# If this PR is intended to update one of these tools, do not let the build pass +# when they do not test-pass. +for TOOL in rls rustfmt miri clippy; do + echo "Verifying status of $TOOL..." + if echo "$CHANGED_FILES" | grep -q "^M[[:blank:]]src/tools/$TOOL$"; then + echo "This PR updated 'src/tools/$TOOL', verifying if status is 'test-pass'..." + if grep -vq '"'"$TOOL"'[^"]*":"test-pass"' "$TOOLSTATE_FILE"; then + echo + echo "⚠️ We detected that this PR updated '$TOOL', but its tests failed." + echo + echo "If you do intend to update '$TOOL', please check the error messages above and" + echo "commit another update." + echo + echo "If you do NOT intend to update '$TOOL', please ensure you did not accidentally" + echo "change the submodule at 'src/tools/$TOOL'. You may ask your reviewer for the" + echo "proper steps." + exit 3 + fi + fi +done + +if [ "$RUST_RELEASE_CHANNEL" = nightly -a -n "${TOOLSTATE_REPO_ACCESS_TOKEN+is_set}" ]; then . "$(dirname $0)/repo.sh" MESSAGE_FILE=$(mktemp -t msg.XXXXXX) echo "($OS CI update)" > "$MESSAGE_FILE"