diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2f87856f9f..1f47df8b3f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -131,10 +131,11 @@ jobs: condition: and(succeeded(), not(eq(variables['skip-github'], 'TRUE'))) - bash: | set -euo pipefail + source $(bash-lib) msg=$(git log -n1 --format=%b HEAD | head -1) # Keep this line in sync with RELEASE_PR_NOTIF in ci/cron/wednesday.yml if [ "$msg" = "This PR has been created by a script, which is not very smart" ]; then - pr_handler="<@$(awk '/^[^#]/ {print $1}' release/rotation | head -n 1)>" + pr_handler="<@$(next_in_rotation_slack)>" else pr_handler="" fi diff --git a/ci/bash-lib.yml b/ci/bash-lib.yml index 110c44c187..73195ac836 100644 --- a/ci/bash-lib.yml +++ b/ci/bash-lib.yml @@ -8,6 +8,7 @@ steps: - bash: | set -euo pipefail TMP=$(mktemp) + PROJ_DIR="$(pwd)" cat > $TMP <<'END' escape_slack() { local r @@ -148,6 +149,15 @@ steps: echo "Setting '$1' to '$2'" echo "##vso[task.setvariable variable=$1;isOutput=true]$2" } + next_in_rotation() { + awk '/^[^#]/ {print $0}' "$PROJ_DIR/release/rotation" | head -n 1 + } + next_in_rotation_slack() { + next_in_rotation | awk '{print $1}' + } + next_in_rotation_github() { + next_in_rotation | awk '{print $2}' + } END echo "##vso[task.setvariable variable=${{parameters.var_name}}]$TMP" diff --git a/ci/cron/tuesday.yml b/ci/cron/tuesday.yml index e8bf956322..afecd4c1ab 100644 --- a/ci/cron/tuesday.yml +++ b/ci/cron/tuesday.yml @@ -28,6 +28,6 @@ jobs: source "$(bash_lib)" - RELEASE_MANAGER=$(awk '/^[^#]/ {print $1}' release/rotation | head -n 1) + RELEASE_MANAGER=$(next_in_rotation_slack) tell_slack "$(echo -e "Hi <@$RELEASE_MANAGER>! According to the , you are in charge of the release tomorrow. Please make sure you plan accordingly, or find a replacement.\n\nIf anyone knows of any reason to delay or block the release (e.g. a PR that needs to get merged first), please make it known in thread before EOD.")" diff --git a/ci/cron/wednesday.yml b/ci/cron/wednesday.yml index 9860c06957..17febeb222 100644 --- a/ci/cron/wednesday.yml +++ b/ci/cron/wednesday.yml @@ -88,14 +88,12 @@ jobs: # labels, PRs are issues as far as the GH API is concerned. } rotate() { - # limitation: comments in the middle of the rotation will be hoisted to the top - local comments rotation - comments=$(mktemp) - rotation=$(mktemp) - awk '/^#/' release/rotation > $comments - awk '/^[^#]/' release/rotation > $rotation - cp $comments release/rotation - (tail -n +2 $rotation; head -1 $rotation) >> release/rotation + local tmp next + tmp=$(mktemp) + next=$(next_in_rotation) + grep -v "$next" release/rotation > $tmp + echo "$next" >> $tmp + mv $tmp release/rotation } release_message() { local handler=$1 @@ -123,8 +121,8 @@ jobs: reset - NEXT_SLACK=$(awk '/^[^#]/ {print $1}' release/rotation | head -n 1) - NEXT_GH=$(awk '/^[^#]/ {print $2}' release/rotation | head -n 1) + NEXT_SLACK=$(next_in_rotation_slack) + NEXT_GH=$(next_in_rotation_github) PREV="v$(head -1 LATEST | awk '{print $2}')" ./release.sh new snapshot diff --git a/ci/prs.yml b/ci/prs.yml index 842919c251..213b5e68b0 100644 --- a/ci/prs.yml +++ b/ci/prs.yml @@ -123,7 +123,7 @@ jobs: # API, there is still value in getting the notification on Slack, as # we do have the build number and from there we can click through to # the PR. Hence the `|| echo ""`. - PR_HANDLER=$(awk '/^[^#]/ {print $1}' release/rotation | head -n 1) + PR_HANDLER=$(next_in_rotation_slack) case "$(status)" in Succeeded*)