Skip to content

Commit

Permalink
chore: Check PR title for Conventional Commits syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
scouten-adobe committed Sep 28, 2024
1 parent 2d5e423 commit cd8da9c
Show file tree
Hide file tree
Showing 2 changed files with 121 additions and 0 deletions.
35 changes: 35 additions & 0 deletions .commitlintrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
rules:
# Body may be empty
body-empty:
level: ignore

# Description must not be empty
description-empty:
level: error

# Description must start with a capital letter and must not end with a period or space
description-format:
level: error
format: ^[A-Z0-9].*[^. ]$

# Description should be <70 chars
description-max-length:
level: warning
length: 70

# Scope is not allowed
scope:
level: error
options: []

# Subject line should exist
subject-empty:
level: error

# Type must be one of these options
type:
level: error
options:
- fix
- feat
- chore
86 changes: 86 additions & 0 deletions .github/workflows/pr_title.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: PR title

on:
pull_request:
types: [opened, synchronize, reopened, edited]

jobs:
title_cc_validation:
name: Conventional commits validation
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Check PR title
env:
PR_TITLE: ${{ github.event.pull_request.title }}
run: |
# If this step fails, please expand this step for more information.
#
# You will need to revise this pull request's title to
# match the "summary" (first) line of a Conventional Commit message.
# This enables us to automatically generate a meaningful changelog.
#
# The summary line (and thus the PR title) must have this exact format
# (including punctuation):
#
# type: description
#
# `type` describes the nature of changes you are making. This project
# requires the type to be one of these exact names:
#
# * fix
# * feat (will cause a minor version bump)
# * chore (will be omitted from changelog)
#
# NOTE: Conventional Commits also defines a `(scope)` parameter
# which can define a sub-area within the project where the change was
# made. This project is configured to disallow the use of `scope`.
#
# `description` is a short human-readable summary of the changes being made.
#
# This project enforces a few rules over and above the Conventional
# Commits definition of `description`:
#
# * The `description` must be non-empty.
# * The `description` must start with a capital letter or number.
# (Do not start `description` with a lower-case word.)
# * The `description` must not end with a period.
#
# This project does not currently enforce the following items, but
# we ask that you observe the following preferences in `description`:
#
# * The entire description should be written and capitalized as
# an English-language sentence, except (as noted earlier) that
# the trailing period must be omitted.
# * Any acronyms such as JSON or YAML should be capitalized as per
# commonusage in English-language sentences.
#
# After you edit the PR title, this task will run again and the
# warning should go away if you have made acceptable changes.
#
# For more information on Conventional Commits, please see:
#
# https://www.conventionalcommits.org/en/v1.0.0/
#
# ------------ (end of message) ------------
if echo "$PR_TITLE" | grep -E '^chore(\(.*\))?: release '; then
echo "Exception / OK: chore release pattern"
exit 0;
fi
echo "Installing commitlint-rs. Please wait 30-40 seconds ..."
cargo install --quiet commitlint-rs
set -e
echo  
echo  
echo --- commitlint results for PR title \"$PR_TITLE\" ---
echo  
echo "$PR_TITLE" | commitlint -g .commitlintrc.yml
echo "✅ PR title matches all enforced rules."

0 comments on commit cd8da9c

Please sign in to comment.