2024-04-04 09:24:25 -04:00
name : validate-pr
on :
pull_request :
types : [ opened, edited, labeled, unlabeled]
jobs :
check-area-label :
runs-on : ubuntu-20.04
steps :
- name : Missing `area/` label
if : contains(join(github.event.pull_request.labels.*.name, ','), 'impact/') && !contains(join(github.event.pull_request.labels.*.name, ','), 'area/')
run : |
2024-04-19 07:59:40 -04:00
echo "::error::Every PR with an 'impact/*' label should also have an 'area/*' label"
2024-04-04 09:24:25 -04:00
exit 1
- name : OK
run : exit 0
check-changelog :
if : contains(join(github.event.pull_request.labels.*.name, ','), 'impact/')
runs-on : ubuntu-20.04
env :
PR_BODY : |
${{ github.event.pull_request.body }}
steps :
- name : Check changelog description
run : |
# Extract the `markdown changelog` note code block
block=$(echo -n "$PR_BODY" | tr -d '\r' | awk '/^```markdown changelog$/{flag=1;next}/^```$/{flag=0}flag')
# Strip empty lines
desc=$(echo "$block" | awk NF)
if [ -z "$desc" ]; then
2024-04-26 14:16:51 -04:00
echo "::error::Changelog section is empty. Provide a description for the changelog."
2024-04-04 09:24:25 -04:00
exit 1
fi
len=$(echo -n "$desc" | wc -c)
if [[ $len -le 6 ]]; then
2024-04-19 07:59:40 -04:00
echo "::error::Description looks too short: $desc"
2024-04-04 09:24:25 -04:00
exit 1
fi
echo "This PR will be included in the release notes with the following note:"
echo "$desc"
2024-04-19 08:01:04 -04:00
check-pr-branch :
runs-on : ubuntu-20.04
env :
PR_TITLE : ${{ github.event.pull_request.title }}
steps :
# Backports or PR that target a release branch directly should mention the target branch in the title, for example:
# [X.Y backport] Some change that needs backporting to X.Y
# [X.Y] Change directly targeting the X.Y branch
- name : Get branch from PR title
id : title_branch
run : echo "$PR_TITLE" | sed -n 's/^\[\([0-9]*\.[0-9]*\)[^]]*\].*/branch=\1/p' >> $GITHUB_OUTPUT
- name : Check release branch
if : github.event.pull_request.base.ref != steps.title_branch.outputs.branch && !(github.event.pull_request.base.ref == 'master' && steps.title_branch.outputs.branch == '')
run : echo "::error::PR title suggests targetting the ${{ steps.title_branch.outputs.branch }} branch, but is opened against ${{ github.event.pull_request.base.ref }}" && exit 1