-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4981 from vvoland/ci-validate-pr
ci: Require changelog description
- Loading branch information
Showing
2 changed files
with
67 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
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: | | ||
echo "::error::Every PR with an 'impact/*' label should also have an 'area/*' label" | ||
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 | ||
echo "::error::Changelog section is empty. Please provide a description for the changelog." | ||
exit 1 | ||
fi | ||
len=$(echo -n "$desc" | wc -c) | ||
if [[ $len -le 6 ]]; then | ||
echo "::error::Description looks too short: $desc" | ||
exit 1 | ||
fi | ||
echo "This PR will be included in the release notes with the following note:" | ||
echo "$desc" | ||
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 |