Visualize and optionally limit the size of your Pull Requests
Create a file named labeler.yml inside the .github/workflows directory and paste the following configuration.
Note
Take into account that PR Size Labeler considers any line addition, deletion, or modification as a change by default, but you can configure it with optional arguments such as files_to_ignore, ignore_file_deletions, or even ignore_line_deletions.
name: labeler
on: [pull_request]
jobs:
labeler:
permissions:
pull-requests: write
runs-on: ubuntu-latest
name: Label the PR size
steps:
- uses: codelytv/pr-size-labeler@v1
with:
xs_label: 'size/xs'
xs_max_size: '10'
s_label: 'size/s'
s_max_size: '100'
m_label: 'size/m'
m_max_size: '500'
l_label: 'size/l'
l_max_size: '1000'
xl_label: 'size/xl'
fail_if_xl: 'false'
message_if_xl: >
This PR exceeds the recommended size of 1000 lines.
Please make sure you are NOT addressing multiple issues with one PR.
Note this PR might be rejected due to its size.
github_api_url: 'https://api.github.com'
files_to_ignore: ''The job needs pull-requests: write to read the PR and update its labels or post an XL comment.
Tip
Replace on: [pull_request] with on: [pull_request_target] when using forks and when you don't want any PR to be able to execute code (more info: GitHub docs).
| Name | Required | Default Value | Description |
|---|---|---|---|
GITHUB_TOKEN |
No | Automatically supplied | GitHub token needed to interact with the repository. |
xs_label |
No | 'size/xs' | Label for very small-sized PRs. |
xs_max_size |
No | '10' | Maximum number of changes allowed for XS-sized PRs. |
s_label |
No | 'size/s' | Label for small-sized PRs. |
s_max_size |
No | '100' | Maximum number of changes allowed for S-sized PRs. |
m_label |
No | 'size/m' | Label for medium-sized PRs. |
m_max_size |
No | '500' | Maximum number of changes allowed for M-sized PRs. |
l_label |
No | 'size/l' | Label for large-sized PRs. |
l_max_size |
No | '1000' | Maximum number of changes allowed for L-sized PRs. |
xl_label |
No | 'size/xl' | Label for extra-large-sized PRs. A PR will be labeled as 'xl' if it exceeds the amount of changes defined in l_max_size |
fail_if_xl |
No | 'false' | Whether to fail the GitHub workflow if the PR size is 'XL' (blocks the merge). |
message_if_xl |
No | Custom message | Message to display when a PR exceeds the 'XL' size limit. |
github_api_url |
No | 'https://api.github.com' | URL for the GitHub API, can be changed for GitHub Enterprise Servers. |
files_to_ignore |
No | '' | Whitespace or newline separated Bash glob patterns matched against full repository-relative file paths. |
ignore_line_deletions |
No | 'false' | Whether to ignore lines which are deleted when calculating the PR size. If set to 'true', deleted lines will be ignored. |
ignore_file_deletions |
No | 'false' | Whether to ignore completely deleted files when calculating the PR size. If set to 'true', deleted files will be ignored. Distinct from ignore_line_deletions in that it only ignores files which are deleted completely. If ignore_line_deletions is used then using ignore_file_deletions is redundant. |
Patterns match the full path of each changed file relative to the repository root, not just its filename. For example, package-lock.json matches a file at the root, but not apps/web/package-lock.json. Add */package-lock.json to match copies in subdirectories. Patterns use Bash glob syntax, not regular expressions.
The shell may expand a wildcard against files in the workspace before the action compares paths. If you need to ignore a specific file reliably, list its full path explicitly, such as apps/web/package-lock.json.
files_to_ignore: 'package-lock.json */package-lock.json'The same patterns can be listed on separate lines. *.lock matches files ending in .lock, and docs/* matches files under docs/:
files_to_ignore: |
"package-lock.json"
"*/package-lock.json"
"*.lock"
"docs/*"If you would like to help improve the project, please read the contribution guidelines.