1#!/bin/bash 2 3set -euo pipefail 4IFS=$'\n\t' 5 6source "$(cd "$(dirname "$0")" && pwd)/shared.sh" 7 8# The following lines are also found in src/bootstrap/toolstate.rs, 9# so if updating here, please also update that file. 10 11export MESSAGE_FILE=$(mktemp -t msg.XXXXXX) 12 13git config --global user.email '7378925+rust-toolstate-update@users.noreply.github.com' 14git config --global user.name 'Rust Toolstate Update' 15git config --global credential.helper store 16printf 'https://%s:x-oauth-basic@github.com\n' "$TOOLSTATE_REPO_ACCESS_TOKEN" \ 17 > "$HOME/.git-credentials" 18git clone --depth=1 $TOOLSTATE_REPO 19 20GIT_COMMIT="$(git rev-parse HEAD)" 21GIT_COMMIT_MSG="$(git log --format=%s -n1 HEAD)" 22 23cd rust-toolstate 24FAILURE=1 25for RETRY_COUNT in 1 2 3 4 5; do 26 # The purpose of this is to publish the new "current" toolstate in the toolstate repo. 27 # This happens post-landing, on master. 28 # (Publishing the per-commit test results happens pre-landing in src/bootstrap/toolstate.rs). 29 "$(ciCheckoutPath)/src/tools/publish_toolstate.py" "$GIT_COMMIT" \ 30 "$GIT_COMMIT_MSG" \ 31 "$MESSAGE_FILE" \ 32 "$TOOLSTATE_REPO_ACCESS_TOKEN" 33 # `git commit` failing means nothing to commit. 34 FAILURE=0 35 git commit -a -F "$MESSAGE_FILE" || break 36 # On failure randomly sleep for 0 to 3 seconds as a crude way to introduce jittering. 37 git push origin master && break || sleep $(LC_ALL=C tr -cd 0-3 < /dev/urandom | head -c 1) 38 FAILURE=1 39 git fetch origin master 40 git reset --hard origin/master 41done 42