2019-08-08 13:07:40 -04:00
# Pull Request Labeler
2019-03-29 15:21:48 -07:00
2021-06-03 12:43:19 -04:00
<p align="left">
2023-01-05 18:44:32 +09:00
<a href="https://github.com/actions/labeler/actions/workflows/basic-validation.yml">
<img alt="basic validation status" src="https://github.com/actions/labeler/actions/workflows/basic-validation.yml/badge.svg">
2021-06-03 12:43:19 -04:00
</a>
2023-01-05 18:44:32 +09:00
<a href="https://libraries.io/github/actions/labeler">
<img alt="dependencies" src="https://img.shields.io/librariesio/github/actions/labeler">
2021-06-14 18:46:42 -04:00
</a>
2021-06-03 12:43:19 -04:00
</p>
Automatically label new pull requests based on the paths of files being changed.
2019-03-29 15:21:48 -07:00
2019-09-26 16:53:38 +01:00
## Usage
2019-03-29 15:21:48 -07:00
2019-09-26 16:53:38 +01:00
### Create `.github/labeler.yml`
Create a `.github/labeler.yml` file with a list of labels and [minimatch ](https://github.com/isaacs/minimatch ) globs to match to apply the label.
2022-10-05 14:37:24 +01:00
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: `src/**` , `tests/*.spec.js` ) or a match object.
2020-06-01 14:01:37 -07:00
#### 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:
```yml
- 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 `any` and `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:
```yml
label1 :
- example1/*
```
and
```yml
label1 :
- any : [ 'example1/*' ]
```
2021-06-03 12:39:48 -04:00
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.
2019-09-26 16:53:38 +01:00
2022-02-04 14:47:58 +00:00
> ⚠️ This action uses [micromatch](https://www.npmjs.com/package/micromatch) to apply glob patterns.
2022-02-04 13:54:21 +00:00
> For historical reasons, paths starting with dot (e.g. `.github`) are not matched by default.
> You need to set `dot: true` to change this behavior.
> See [Inputs](#inputs) table below for details.
2019-09-26 16:53:38 +01:00
#### Basic Examples
```yml
# Add 'label1' to any changes within 'example' folder or any subfolders
2019-08-08 13:07:40 -04:00
label1 :
2022-10-05 14:37:24 +01:00
- example/**
2019-03-29 15:21:48 -07:00
2019-09-26 16:53:38 +01:00
# Add 'label2' to any file changes within 'example2' folder
2019-08-08 13:07:40 -04:00
label2 : example2/*
2022-12-21 15:59:36 +01:00
# Add label3 to any change to .txt files within the entire repository. Quotation marks are required for the leading asterisk
label3 :
- '**/*.txt'
2019-03-29 15:21:48 -07:00
```
2019-09-12 10:42:28 -07:00
2019-09-26 16:53:38 +01:00
#### Common Examples
```yml
# Add 'repo' label to any root file changes
repo :
2021-06-21 23:42:43 +02:00
- '*'
2021-06-03 12:39:48 -04:00
2019-09-26 16:53:38 +01:00
# Add '@domain/core' label to any change within the 'core' package
2021-11-23 20:57:39 -05:00
'@domain/core' :
2022-10-05 14:37:24 +01:00
- package/core/**
2019-09-26 16:53:38 +01:00
# Add 'test' label to any change to *.spec.js files within the source dir
test :
2021-06-03 12:39:48 -04:00
- src/**/*.spec.js
2020-06-01 14:01:37 -07:00
# Add 'source' label to any change to src files within the source dir EXCEPT for the docs sub-folder
source :
2022-10-05 14:37:24 +01:00
- any : [ 'src/**' , '!src/docs/*' ]
2020-06-01 14:01:37 -07:00
# 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' ]
2019-09-26 16:53:38 +01:00
```
### Create Workflow
Create a workflow (eg: `.github/workflows/labeler.yml` see [Creating a Workflow file ](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file )) to utilize the labeler action with content:
2019-09-12 10:42:28 -07:00
2021-12-18 14:24:46 +05:30
```yml
2019-08-08 13:07:40 -04:00
name : "Pull Request Labeler"
2019-09-12 10:42:28 -07:00
on :
2020-09-09 03:33:55 +09:00
- pull_request_target
2019-03-29 15:21:48 -07:00
2019-08-08 13:07:40 -04:00
jobs :
triage :
2022-02-02 15:43:53 +00:00
permissions :
contents : read
pull-requests : write
2019-08-08 13:07:40 -04:00
runs-on : ubuntu-latest
steps :
2022-03-01 12:12:44 -05:00
- uses : actions/labeler@v4
2019-08-08 13:07:40 -04:00
with :
repo-token : "${{ secrets.GITHUB_TOKEN }}"
```
2019-09-26 16:53:38 +01:00
_Note: This grants access to the `GITHUB_TOKEN` so the action can make calls to GitHub's rest API_
2020-09-08 14:49:21 -04:00
#### Inputs
Various inputs are defined in [`action.yml` ](action.yml ) to let you configure the labeler:
| Name | Description | Default |
| - | - | - |
2022-02-02 15:43:53 +00:00
| `repo-token` | Token to use to authorize label changes. Typically the GITHUB_TOKEN secret, with `contents:read` and `pull-requests:write` access | N/A |
2020-09-08 14:49:21 -04:00
| `configuration-path` | The path to the label configuration file | `.github/labeler.yml` |
| `sync-labels` | Whether or not to remove labels when matching files are reverted or no longer changed by the PR | `false`
2022-02-04 13:26:54 +00:00
| `dot` | Whether or not to auto-include paths starting with dot (e.g. `.github` ) | `false`
2021-06-03 12:43:19 -04:00
2022-02-04 13:26:54 +00:00
When `dot` is disabled and you want to include _all_ files in a folder:
```yml
label1 :
- path/to/folder/**/*
- path/to/folder/**/.*
```
If `dot` is enabled:
```yml
label1 :
2022-10-05 14:37:24 +01:00
- path/to/folder/**
2022-02-04 13:26:54 +00:00
```
## Contributions
2021-06-03 12:43:19 -04:00
Contributions are welcome! See the [Contributor's Guide ](CONTRIBUTING.md ).