Skip to content

Commit 1f6a410

Browse files
authored
Merge pull request #2728 from Nordix/add-pr-verify
🌱Add PR title verify workflow for CAPO
2 parents 6d42cbb + 548be85 commit 1f6a410

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: Check PR Title
2+
permissions: {}
3+
4+
on:
5+
pull_request_target:
6+
types: [opened, edited, reopened, synchronize, ready_for_review]
7+
8+
jobs:
9+
check-title:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Check out repository
13+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
14+
15+
- name: Validate PR Title
16+
env:
17+
PR_TITLE: ${{ github.event.pull_request.title }}
18+
run: |
19+
WIP_REGEX='^\W?WIP\W'
20+
TAG_REGEX='^\[[[:alnum:]\._-]*\]'
21+
22+
# Trim WIP and tags from title
23+
trimmed_title=$(echo "${PR_TITLE}" | sed -E "s/${WIP_REGEX}//" | sed -E "s/${TAG_REGEX}//" | xargs)
24+
25+
# Normalize common emojis in text form to actual emojis
26+
trimmed_title=$(echo "$trimmed_title" | sed -E "s/:warning:/⚠/g")
27+
trimmed_title=$(echo "$trimmed_title" | sed -E "s/:sparkles:/✨/g")
28+
trimmed_title=$(echo "$trimmed_title" | sed -E "s/:bug:/πŸ›/g")
29+
trimmed_title=$(echo "$trimmed_title" | sed -E "s/:book:/πŸ“–/g")
30+
trimmed_title=$(echo "$trimmed_title" | sed -E "s/:rocket:/πŸš€/g")
31+
trimmed_title=$(echo "$trimmed_title" | sed -E "s/:seedling:/🌱/g")
32+
33+
# Check PR type prefix
34+
if [[ "${trimmed_title}" =~ ^(⚠|✨|πŸ›|πŸ“–|πŸš€|🌱) ]]; then
35+
echo "PR title is valid: $trimmed_title"
36+
else
37+
echo "Error: No matching PR type indicator found in title."
38+
echo "You need to have one of these as the prefix of your PR title:"
39+
echo "- Breaking change: ⚠ (:warning:)"
40+
echo "- Non-breaking feature: ✨ (:sparkles:)"
41+
echo "- Patch fix: πŸ› (:bug:)"
42+
echo "- Docs: πŸ“– (:book:)"
43+
echo "- Release: πŸš€ (:rocket:)"
44+
echo "- Infra/Tests/Other: 🌱 (:seedling:)"
45+
exit 1
46+
fi
47+
48+
# Check that PR title does not contain Issue or PR number
49+
if [[ "${trimmed_title}" =~ \#[0-9]+ ]]; then
50+
echo "Error: PR title should not contain issue or PR number."
51+
echo "Issue numbers belong in the PR body as either \"Fixes #XYZ\" (if it closes the issue or PR), or something like \"Related to #XYZ\" (if it's just related)."
52+
exit 1
53+
fi

0 commit comments

Comments
Β (0)