|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Copyright 2024 The Kubernetes Authors. |
| 4 | +# |
| 5 | +# Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | +# you may not use this file except in compliance with the License. |
| 7 | +# You may obtain a copy of the License at |
| 8 | +# |
| 9 | +# http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | +# |
| 11 | +# Unless required by applicable law or agreed to in writing, software |
| 12 | +# distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | +# See the License for the specific language governing permissions and |
| 15 | +# limitations under the License. |
| 16 | + |
| 17 | +# Define regex patterns |
| 18 | +WIP_REGEX="^\W?WIP\W" |
| 19 | +TAG_REGEX="^\[[[:alnum:]\._-]*\]" |
| 20 | +PR_TITLE="$1" |
| 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 |
| 54 | + |
0 commit comments