Automatically labels pull requests in your GitHub repository based on the size of changes.
This action can be executed independently from workflows within a container. To do so, use the following command:
podman run --rm -it ghcr.io/cbrgm/pr-size-labeler-action:v1 --help
Before using this action, ensure you have a .github/pull-request-size.yml
configuration file in your repository. This file should define the size thresholds and corresponding labels.
Add the following step to your GitHub Actions Workflow:
name: PR Size Labeler
on:
pull_request: # Trigger the workflow when a pull request is opened or synchronized
jobs:
auto-label-pr:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2 # Checkout the repository code
- name: Label PR based on size
uses: cbrgm/pr-size-labeler-action@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }} # Pass the GitHub token for authentication
github_repository: ${{ github.repository }} # Pass the repository name
github_pr_number: ${{ github.event.number }} # Pass the pull request number
config_file_path: '.github/pull-request-size.yml' # Specify the path to the configuration file
github_enterprise_url: '' # Optional: GitHub Enterprise URL (e.g., https://github.mycompany.com)
Input | Description | Required | Default |
---|---|---|---|
github_token |
GitHub token to authenticate with | Yes | - |
github_repository |
The name of the repository in format owner/repository | Yes | - |
github_pr_number |
The number of your pull request | Yes | - |
config_file_path |
The path to the configuration file | No | .github/pull-request-size.yml |
github_enterprise_url |
The base URL for GitHub Enterprise (if applicable) | No | - |
For GitHub Enterprise instances, specify the base URL of your GitHub Enterprise server:
- name: Label PR based on size
uses: cbrgm/pr-size-labeler-action@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
github_repository: ${{ github.repository }}
github_pr_number: ${{ github.event.number }}
github_enterprise_url: 'https://github.mycompany.com'
# Configuration for PR Size Labeler
# List of files to exclude from size calculation
# Files matching these patterns will not be considered when calculating PR size
exclude_files:
- "foo.bar" # Example: Exclude 'foo.bar' file
- "*.xyz"
# Configuration for labeling based on the size of the Pull Request
# Each entry defines a size label, along with thresholds for diff and file count
label_configs:
# Configuration for 'extra small' PRs
- size: xs
diff: 25 # Threshold for the total lines of code changed (additions + deletions)
files: 1 # Threshold for the total number of files changed
labels: ["size/xs"] # Labels to be applied for this size
# Configuration for 'small' PRs
- size: s
diff: 150
files: 10
labels: ["size/s"]
# Configuration for 'medium' PRs
- size: m
diff: 600
files: 25
labels: ["size/m", "pairing-wanted"]
# Configuration for 'large' PRs
- size: l
diff: 2500
files: 50
labels: ["size/l", "pairing-wanted"]
# Configuration for 'extra large' PRs
- size: xl
diff: 5000
files: 100
labels: ["size/xl", "pairing-wanted"]
# In case you don't want to count deleted lines and files into
# your size labels, you can change this to true:
added_lines_only: false
You can build this action from source using Go
:
make build
sequenceDiagram
participant GitHubAction as pr-size-labeler-action
participant GitHubAPI
Note over GitHubAction, GitHubAPI: GitHub Action: Pull Request Size Labeler
GitHubAction->>GitHubAPI: Initialize GitHub Client
activate GitHubAPI
GitHubAPI-->>GitHubAction: Client Initialized
deactivate GitHubAPI
GitHubAction->>GitHubAPI: Fetch PR Files
activate GitHubAPI
GitHubAPI-->>GitHubAction: PR Files Returned
deactivate GitHubAPI
GitHubAction->>GitHubAction: Calculate Size and Diff
GitHubAction->>GitHubAPI: Update PR Labels
activate GitHubAPI
GitHubAPI-->>GitHubAction: PR Labels Updated
deactivate GitHubAPI
GitHubAction->>GitHubAction: Action Completed
- Contributions Welcome!: Interested in improving or adding features? Check our Contributing Guide for instructions on submitting changes and setting up development environment.
- Open-Source & Free: Developed in my spare time, available for free under Apache 2.0 License. License details your rights and obligations.
- Your Involvement Matters: Code contributions, suggestions, feedback crucial for improvement and success. Let's maintain it as a useful resource for all 🌍.