Pull Request Labeler
Automatically label new pull requests based on the paths of files being changed.
.github/labeler.yml file with a list of labels and minimatch globs to match to apply the label.
The key is the name of the label in your repository that you want to add (eg: "merge conflict", "needs-updating") and the value is the path (glob) of the changed files (eg:
tests/*.spec.js) or a match object.
For more control over matching, you can provide a match object instead of a simple path glob. The match object is defined as:
- any: ['list', 'of', 'globs'] all: ['list', 'of', 'globs']
One or both fields can be provided for fine-grained matching. Unlike the top-level list, the list of path globs provided to
all must ALL match against a path for the label to be applied.
The fields are defined as follows:
any: match ALL globs against ANY changed path
all: match ALL globs against ALL changed paths
A simple path glob is the equivalent to
any: ['glob']. More specifically, the following two configurations are equivalent:
label1: - example1/*
label1: - any: ['example1/*']
From a boolean logic perspective, top-level match objects are
OR-ed together and individual match rules within an object are
AND-ed. Combined with
! negation, you can write complex matching rules.
# Add 'label1' to any changes within 'example' folder or any subfolders label1: - example/** # Add 'label2' to any file changes within 'example2' folder label2: example2/* # Add label3 to any change to .txt files within the entire repository. Quotation marks are required for the leading asterisk label3: - '**/*.txt'
# Add 'repo' label to any root file changes repo: - '*' # Add '@domain/core' label to any change within the 'core' package '@domain/core': - package/core/** # Add 'test' label to any change to *.spec.js files within the source dir test: - src/**/*.spec.js # Add 'source' label to any change to src files within the source dir EXCEPT for the docs sub-folder source: - any: ['src/**', '!src/docs/*'] # Add 'frontend` label to any change to *.js files as long as the `main.js` hasn't changed frontend: - any: ['src/**/*.js'] all: ['!src/main.js']
Create a workflow (eg:
.github/workflows/labeler.yml see Creating a Workflow file) to utilize the labeler action with content:
name: "Pull Request Labeler" on: - pull_request_target jobs: triage: permissions: contents: read pull-requests: write runs-on: ubuntu-latest steps: - uses: actions/[email protected]
Various inputs are defined in
action.yml to let you configure the labeler:
||Token to use to authorize label changes. Typically the GITHUB_TOKEN secret, with
||The path to the label configuration file||
||Whether or not to remove labels when matching files are reverted or no longer changed by the PR||
Contributions are welcome! See the Contributor's Guide.