labeler

package module
v0.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 19, 2025 License: Apache-2.0 Imports: 14 Imported by: 1

README

labeler

FOSSA Status

A labeler for GitHub issues and pull requests.

A labeler for GitHub issues and pull requests.

Usage:
  labeler [flags]

Flags:
      --config-path string   A custom config path, relative to the repository root
      --data string          A JSON string of the 'event' type (issue event or pull request event)
      --fields strings       Fields to evaluate for labeling (title, body) (default [title,body])
  -h, --help                 help for labeler
      --id int               The integer id of the issue or pull request
  -o, --owner string         GitHub Owner/Org name [GITHUB_ACTOR]
  -r, --repo string          GitHub Repo name [GITHUB_REPO]
  -t, --type string          The target event type to label (issues or pull_request) [GITHUB_EVENT_NAME]
  -v, --version              version for labeler

Example usage:

export GITHUB_TOKEN=yourtoken
./labeler -o jimschubert -r labeler --type pull_request --id 1

This will evaluate the configuration file for the repository and apply any relevant labels to PR #1.

Configuration

The configuration file must be located in the target repository at .github/labeler.yml by default, and the contents must follow either the simple schema or the full schema.

The configuration file location can be modified by passing a different path to --config-path. This path must be relative to the repository root. All of the following would be valid possible customizations (assuming you've created a configuration file at that location):

  • .github/labeler-custom.yml
  • tools/labeler.yml
  • .labeler.yml

Feel free to use one of the following schema examples to get started.

Simple Schema
# labeler "simple" schema
# Comment is applied to both issues and pull requests.
# If you need a more robust solution, consider the "full" schema.
comment: |
  👍 Thanks for this!
  🏷 I have applied any labels matching special text in your issue.

  Please review the labels and make any necessary changes.

# Labels is an object where:
# - keys are labels
# - values are array of string patterns to match against title + body in issues/prs
labels:
  'bug':
    - '\bbug[s]?\b'
  'help wanted':
    - '\bhelp( wanted)?\b'
  'duplicate':
    - '\bduplicate\b'
    - '\bdupe\b'
  'enhancement':
    - '\benhancement\b'
  'question':
    - '\bquestion\b'

Note that simple schema doesn't allow for some of the more advanced features of the full schema, such as excluding patterns or customizing comments for issues and pull requests. If you need those features, consider using the full schema.

Full Schema
# labeler "full" schema

# enable labeler on issues, prs, or both.
enable:
  issues: true
  prs: true
# comments object allows you to specify a different message for issues and prs

# (Optional): Determine which fields of the issue or pull request to evaluate.
fields:
  - title
  - body

comments:
  issues: |
    Thanks for opening this issue!
    I have applied any labels matching special text in your title and description.

    Please review the labels and make any necessary changes.
  prs: |
    Thanks for the contribution!
    I have applied any labels matching special text in your title and description.

    Please review the labels and make any necessary changes.

# Labels is an object where:
# - keys are labels
# - values are objects of { include: [ pattern ], exclude: [ pattern ] }
#    - pattern must be a valid regex, and is applied globally to
#      title + description of issues and/or prs (see enabled config above)
#    - 'include' patterns will associate a label if any of these patterns match
#    - 'exclude' patterns will ignore this label if any of these patterns match
labels:
  'bug':
    include:
      - '\bbug[s]?\b'
    exclude: []
  'help wanted':
    include:
      - '\bhelp( me)?\b'
    exclude:
      - '\b\[test(ing)?\]\b'
  'enhancement':
    include:
      - '\bfeat\b'
    exclude: []

Build

Build a local distribution for evaluation using goreleaser.

goreleaser release --skip-publish --snapshot --rm-dist

This will create an executable application for your os/architecture under dist:

dist
├── labeler_darwin_amd64_v1
│   └── labeler
├── labeler_darwin_arm64
│   └── labeler
├── labeler_linux_386
│   └── labeler
├── labeler_linux_amd64_v1
│   └── labeler
├── labeler_linux_arm64
│   └── labeler
├── labeler_linux_arm_6
│   └── labeler
├── labeler_windows_amd64_v1
│   └── labeler.exe
├── labeler_windows_arm64
│   └── labeler.exe
├── labeler_windows_arm_6
│   └── labeler.exe

License

The labeler project is licensed under Apache 2.0

labeler is a rewrite of an earlier GitHub App I wrote (see auto-labeler). I've rewritten that app to replace the license while making the tool reusable across CI tools and operating systems.

FOSSA Status

Documentation

Overview

Package labeler provides a utility for labeling GitHub issues and pull requests based on configurable rules and field evaluation.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type FieldFlag added in v0.1.2

type FieldFlag uint

FieldFlag represents a bitmask for fields that can be evaluated for labeling. Use bitwise operations or helper methods to combine and check flags.

const (
	// FieldTitle indicates the title field should be evaluated for labeling.
	FieldTitle FieldFlag = 1 << iota
	// FieldBody indicates the body field should be evaluated for labeling.
	FieldBody

	// AllFieldFlags is a convenience constant representing all available fields.
	AllFieldFlags = FieldTitle | FieldBody
)

func ParseFieldFlags added in v0.1.2

func ParseFieldFlags(fields []string) FieldFlag

ParseFieldFlags converts a slice of string field names to a FieldFlag bitmask. Unrecognized field names are ignored.

func (FieldFlag) Has added in v0.1.2

func (f FieldFlag) Has(flag FieldFlag) bool

Has returns true if the FieldFlag contains the provided flag.

func (FieldFlag) OrDefault added in v0.1.2

func (f FieldFlag) OrDefault() FieldFlag

OrDefault returns AllFieldFlags if no flags are set (f == 0), otherwise returns f.

type Labeler

type Labeler struct {
	Owner *string
	Repo  *string
	Event *string
	Data  *string
	ID    *int
	// contains filtered or unexported fields
}

Labeler is the container for the application entrypoint's logic

func New

func New(owner string, repo string, event string, id int, data *string) (*Labeler, error)

New creates a new instance of a Labeler

func NewWithOptions added in v0.1.0

func NewWithOptions(opts ...OptFn) (*Labeler, error)

NewWithOptions constructs a new Labeler with functional arguments of type OptFn

func (*Labeler) Execute

func (l *Labeler) Execute() error

Execute performs the labeler logic

type Opt added in v0.1.0

type Opt struct {
	// contains filtered or unexported fields
}

Opt is a group of options for constructing a new Labeler

type OptFn added in v0.1.0

type OptFn func(o *Opt)

func WithClient added in v0.1.0

func WithClient(client *github.Client) OptFn

WithClient allows for configuration of the github client

func WithConfigPath added in v0.1.0

func WithConfigPath(value string) OptFn

WithConfigPath allows for configuring the labeler config path relative to the repository root (usually .github/labeler.yml)

func WithContext added in v0.1.0

func WithContext(ctx context.Context) OptFn

WithContext allows configuration of the context used as a parent context for all GitHub API calls

func WithData added in v0.1.0

func WithData(value string) OptFn

WithData allows for configuring the JSON event data to apply a label

func WithEvent added in v0.1.0

func WithEvent(value string) OptFn

WithEvent allows for configuring the target event type

func WithFields added in v0.1.2

func WithFields(fieldFlag FieldFlag) OptFn

WithFields allows for configuring the fields to evaluate for labeling

func WithID added in v0.1.0

func WithID(value int) OptFn

WithID allows for configuring the identifier of the issue or pull request we want to label

func WithOwner added in v0.1.0

func WithOwner(value string) OptFn

WithOwner allows for configuring the user or organization owning the target repo

func WithRepo added in v0.1.0

func WithRepo(value string) OptFn

WithRepo allows for configuring the name of the repo under a given owner; use in conjunction with WithOwner

func WithToken added in v0.1.0

func WithToken(value string) OptFn

WithToken allows configuration of the github token required for accessing the GitHub API for a given org/repo.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL