A GitHub Action to prevent pull requests from being merged and sends issue notifications if a branch is not following the configured naming convention.
-
When a branch protection rule is configured and
Require status checks before merging
is enabled, the head branch name of the pull request must follow the configured naming convention otherwise the pull request will be blocked from merging. -
When a branch is created or renamed, the name of the branch will be verified against the configured naming convention. If the name of the branch does not follow the configured naming convention, an issue with instructions including an @mention mentioning the creator will be opened.
-
Once the incorrect name of the branch is resolved or the branch is deleted, the opened notification issue will be closed or optionally being deleted.
name: Branch Naming Policy Action
on:
create:
delete:
pull_request:
branches:
- main
jobs:
branch-naming-policy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run Branch Naming Policy Action
uses: nicklegan/github-repo-branch-naming-policy-action@v1.1.1
if: github.ref_type == 'branch' || github.ref_type == 'pull_request'
with:
token: ${{ secrets.GITHUB_TOKEN }}
regex: '^([a-z0-9]+)-([a-z0-9]+)$'
# flags: i
# token: ${{ secrets.REPO_TOKEN }}
# delete: true
Name | Value | Location | Required |
---|---|---|---|
REPO_TOKEN |
An optional repo scoped Personal Access Token if the delete flag is set |
workflow.yml | false |
ACTIONS_STEP_DEBUG |
true |
Enables diagnostic logging | false |
Name | Description | Default | Required |
---|---|---|---|
regex |
A regex string matching correct repo naming conventions | ^([a-z0-9]+)-([a-z0-9]+)$ |
true |
flags |
Flag for repo naming regex string. e.g. i for case-insensitive |
i |
false |
delete |
Deletes the issue instead of closing it when the branch name is resolved (requires a higher repo scoped workflow token) |
false |
false |
Regex example 1: ####-####
(2 fixed groups separated by a dash).
^([a-z0-9]+)-([a-z0-9]+)$
Regex example 2: prefix-####-####-*
(3 groups separated by dashes starting with a prefix).
^(prefix)-([a-z0-9]+)-([a-z0-9]+)
Regex example 3: ####-####-####-*
(3 groups containing names and numbers divided by dashes).
^([a-z0-9]+)-([a-z0-9]+)-([a-z0-9]+)
As a default the i
flag is recommended to allow matches to be case-insensitive.
💡 For more info about regular expressions visit Regular-Expressions.info