Files
labeler/README.md
T

99 lines
3.1 KiB
Markdown
Raw Permalink Normal View History

2019-08-08 13:07:40 -04:00
# Pull Request Labeler
2019-03-29 15:21:48 -07:00
2019-08-08 13:07:40 -04:00
Pull request labeler triages PRs based on the paths that are modified in the PR.
2019-03-29 15:21:48 -07:00
Note that only pull requests being opened from the same repository can be labeled. This action will not currently work for pull requests from forks -- like is common in open source projects -- because the token for forked pull request workflows does not have write permissions.
2020-02-02 11:11:07 -05: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.
2020-06-01 14:01:37 -07: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.
#### 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/*']
```
From a boolean logic perspective, top-level match objects are `OR`-ed together and indvidual 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
#### Basic Examples
```yml
# Add 'label1' to any changes within 'example' folder or any subfolders
2019-08-08 13:07:40 -04:00
label1:
2019-09-26 16:53:38 +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/*
2019-09-26 16:53:38 +01:00
```
2019-03-29 15:21:48 -07:00
2019-09-26 16:53:38 +01:00
#### Common Examples
```yml
# Add 'repo' label to any root file changes
repo:
- ./*
# Add '@domain/core' label to any change within the 'core' package
@domain/core:
- package/core/*
- package/core/**/*
# Add 'test' label to any change to *.spec.js files within the source dir
test:
- 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:
- 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']
2019-08-08 13:07:40 -04:00
```
2019-09-12 10:42:28 -07:00
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
2019-08-08 13:07:40 -04:00
```
name: "Pull Request Labeler"
2019-09-12 10:42:28 -07:00
on:
2019-08-29 09:59:11 -04:00
- pull_request
2019-08-08 13:07:40 -04:00
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v2
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
2019-03-29 15:21:48 -07:00
```
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_