Navigation Menu

Skip to content

Commit

Permalink
Requires tools to test-pass if the corresponding submodule is updated.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
kennytm committed Dec 30, 2017
1 parent 35681fb commit 8ed16fe
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Expand Up @@ -5,7 +5,7 @@ services:
- docker

git:
depth: 1
depth: 2
submodules: false

matrix:
Expand Down
2 changes: 1 addition & 1 deletion appveyor.yml
Expand Up @@ -96,7 +96,7 @@ environment:
matrix:
fast_finish: true

clone_depth: 1
clone_depth: 2
build: false

install:
Expand Down
24 changes: 23 additions & 1 deletion src/ci/docker/x86_64-gnu-tools/checktools.sh
Expand Up @@ -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"

Expand All @@ -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"
Expand Down

0 comments on commit 8ed16fe

Please sign in to comment.