/github-labeler

Declarative way to configure GitHub labels

Primary LanguageGo

GitHub labels as a Code!

CLI that sets GitHub labels exactly as written in YAML file

Concepts

  • Create a label (e.g. when no label described in YAML)
  • Edit a label (e.g. when its color was changed)
  • Delete a label (e.g. when the label not described in YAML exists on GitHub)

YAML example

labels:
  - name: kind/proactive
    description: Categorizes issue or PR as related to proactive tasks.
    color: 9CCC65
  - name: kind/reactive
    description: Categorizes issue or PR as related to reactive tasks.
    color: FFA000

repos:
  - name: org/repo
    labels:
      - kind/proactive
      - kind/reactive

Run as GitHub Actions

YAML for defined labels

You can put this file to anywhere as you like. It defaults to .github/labels.yml. This is the config file to define the labels. Basically it means GitHub labels are configured as this file defines.

.github/labels.yml
labels:
- name: help wanted
  description: Extra attention is needed
  color: "008672"
- name: bug
  description: Something isn't working
  color: fc2929
- name: enhancement
  description: New feature or request
  color: 84b6eb
- name: question
  description: Further information is requested
  color: cc317c
repos:
- name: user/repo
  labels:
  - help wanted
  - bug
  - enhancement
  - question

YAML for workflows to sync labels between existing one and defined one

This is the one of the workflow of this app. It means to do the same with GitHub Actions as running github-labeler on your local machine.

.github/workflows/sync_labels.yml
name: Sync labels

on:
  push:
    branches:
      - master
    paths:
      - .github/labels.yml

jobs:
  sync:
    name: Run
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@1.0.0
      - name: Sync labels
        uses: b4b4r07/github-labeler@master
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

If you want to make sure what changes to be applied in a pull request step, you can run github-labeler with dryrun option. By having action-github-comment step, you can also post the github-labeler result to the GitHub comment.

.github/workflows/sync_labels_dryrun.yml
name: Sync labels

on: [pull_request]

jobs:
  sync:
    name: Dry run
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v1
      - name: Sync labels with dryrun option
        uses: b4b4r07/github-labeler@master
        with:
          dryrun: 'true'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        id: labeler
      - name: Post github-labeler command result to GitHub comment
        uses: b4b4r07/action-github-comment@master
        if: steps.labeler.outputs.result
        with:
          body: |
            ## github-labeler result
            ```
            ${{ steps.labeler.outputs.result }}
            ```
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          LOG: trace

YAML for workflows to import labels from existing one to defined one

This is the workflow to import your existing labels on GitHub to the definition YAML. Even if you define the labels on YAML file, someone may change the label information or create new one on GitHub (Web UI). If so, these labels updating should be synced with the definition file. In order to solve those problems, this workflow imports label-related changes triggered by events of labels activities.

.github/workflows/import_labels.yml
name: Import labels

on:
  label:
    types:
      - created
      - edited
      - deleted

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@1.0.0
      - name: Import between existing labels
        uses: b4b4r07/github-labeler@master
        with:
          import: 'true'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: "Import existing labels"
          title: "Import existing labels"
          body: |
            ## WHAT
            This pull request was created by [create-pull-request](https://github.com/peter-evans/create-pull-request).
            ## WHY
            Current labels.yaml and existing labels don't match.
          branch: import-labels
          branch-suffix: timestamp

Installation

Download the binary from GitHub Releases and drop it in your $PATH.

License

MIT