Skip to content

Commit

Permalink
ci: error out if someone sends a PR to the wrong branch
Browse files Browse the repository at this point in the history
  • Loading branch information
pietroalbini committed May 6, 2021
1 parent 81a97ce commit 392723e
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 0 deletions.
9 changes: 9 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ jobs:
- name: decide whether to skip this job
run: src/ci/scripts/should-skip-this.sh
if: success() && !env.SKIP_JOB
- name: ensure the channel matches the target branch
run: src/ci/scripts/verify-channel.sh
if: success() && !env.SKIP_JOB
- name: configure GitHub Actions to kill the build when outdated
uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master
with:
Expand Down Expand Up @@ -434,6 +437,9 @@ jobs:
- name: decide whether to skip this job
run: src/ci/scripts/should-skip-this.sh
if: success() && !env.SKIP_JOB
- name: ensure the channel matches the target branch
run: src/ci/scripts/verify-channel.sh
if: success() && !env.SKIP_JOB
- name: configure GitHub Actions to kill the build when outdated
uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master
with:
Expand Down Expand Up @@ -541,6 +547,9 @@ jobs:
- name: decide whether to skip this job
run: src/ci/scripts/should-skip-this.sh
if: success() && !env.SKIP_JOB
- name: ensure the channel matches the target branch
run: src/ci/scripts/verify-channel.sh
if: success() && !env.SKIP_JOB
- name: configure GitHub Actions to kill the build when outdated
uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master
with:
Expand Down
4 changes: 4 additions & 0 deletions src/ci/github-actions/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,10 @@ x--expand-yaml-anchors--remove:
run: src/ci/scripts/should-skip-this.sh
<<: *step

- name: ensure the channel matches the target branch
run: src/ci/scripts/verify-channel.sh
<<: *step

- name: configure GitHub Actions to kill the build when outdated
uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master
with:
Expand Down
28 changes: 28 additions & 0 deletions src/ci/scripts/verify-channel.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/bin/bash
# We want to make sure all PRs are targeting the right branch when they're
# opened, otherwise we risk (for example) to land a beta-specific change to the
# master branch. This script ensures the branch of the PR matches the channel.

set -euo pipefail
IFS=$'\n\t'

source "$(cd "$(dirname "$0")" && pwd)/../shared.sh"

declare -A CHANNEL_BRANCH
CHANNEL_BRANCH["nightly"]="master"
CHANNEL_BRANCH["beta"]="beta"
CHANNEL_BRANCH["stable"]="stable"

if isCiBranch auto || isCiBranch try; then
echo "channel verification is only executed on PR builds"
exit
fi

channel=$(cat "$(ciCheckoutPath)/src/ci/channel")
branch="$(ciBaseBranch)"
if [[ "${branch}" != "${CHANNEL_BRANCH[$channel]}" ]]; then
echo "error: PRs changing the \`${channel}\` channel should be sent to the \
\`${CHANNEL_BRANCH[$channel]}\` branch!"

exit 1
fi
12 changes: 12 additions & 0 deletions src/ci/shared.sh
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,18 @@ function isCiBranch {
fi
}

function ciBaseBranch {
if isAzurePipelines; then
echo "unsupported on Azure Pipelines"
exit 1
elif isGitHubActions; then
echo "${GITHUB_BASE_REF#refs/heads/}"
else
echo "ciBaseBranch only works inside CI!"
exit 1
fi
}

function ciCommit {
if isAzurePipelines; then
echo "${BUILD_SOURCEVERSION}"
Expand Down

0 comments on commit 392723e

Please sign in to comment.