Skip to content
/ labeler Public
forked from srvaroa/labeler

GitHub Action to assign labels to PRs based on configurable conditions

License

Notifications You must be signed in to change notification settings

Stoom/labeler

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Condition based Pull Request Labeler

Implements a GitHub Action that labels Pull Requests based on configurable conditions.

It is inspired by the example Pull Request Labeller, but intends to provide a richer set of options.

Installing

Add a file .github/workflows/main.yml to your repository with these contents:

name: Label PRs

on:
  - pull_request

jobs:
  build:

	runs-on: ubuntu-latest
	
	steps:
	- uses: srvaroa/labeler@master
	  env:
		GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

Then add a new file ./github/labeler.yml with the configuration as described below in the Configuration section.

This action will avoid failing in all cases, so if you're experiencing unexpected behaviour it's worth looking at execution logs just in case. Typical errors are:

  • The configuration file is non existent, or has invalid yaml.
  • Running the action from a fork, as the GITHUB_TOKEN has not enough permissions to label the main repository (issue for solving this)

Configuration

Configuration can be stored at ./github/labeler.yml as a plain list of labels and a set of conditions for each. When all conditions for a label match, then the Action will set the given label. When any condition for a label does not match, then the Action will unset the given label.

<label>:
  <condition_name>: <condition_parameters>
  <condition_name>: <condition_parameters>

For example, given this ./github/labeler.yml:

  WIP:
    title: "^WIP:.*"

A Pull Request with title "WIP: this is work in progress" would be labelled as WIP. If the Pull Request title changes to "This is done", then the WIP label would be removed.

Each label may combine multiple conditions. The label will be applied if all conditions are satisfied, removed otherwise.

For example, given this ./github/labeler.yml:

  WIP:
    title: "^WIP:.*"
    mergeable: false

A Pull Request with title "WIP: this is work in progress" and not in a mergeable state would be labelled as WIP. If the Pull Request title changes to "This is done", or it becomes mergeable, then the WIP label would be removed.

Conditions

Below are the conditions currently supported.

Regex on title

This condition is satisfied when the PR title matches on the given regex.

WIP:
  title: "^WIP:.*"

Mergeable status

This condition is satisfied when the PR is in a mergeable state.

MyLabel:
  mergeable: true

PR size

This condition is satisfied when the total number of changed lines in the PR is within given thresholds.

The number of changed lines is calculated as the sum of all additions + deletions in the PR.

For example, given this ./github/labeler.yml:

S:
  size-below: 10
M:
  size-above: 9
  size-below: 100
L:
  size-above: 100

These would be the labels assigned to some PRs, based on their size as reported by the GitHub API.

PR additions deletions Resulting labels
First example 1 1 S
Second example 5 42 M
Third example 68 148 L

About

GitHub Action to assign labels to PRs based on configurable conditions

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 96.6%
  • Dockerfile 3.4%