github-label-setupというGitHubリポジトリのラベルにいい感じのプリセットを追加する自分用のツールを書きました。

次のIssueに追加されるラベルが全部貼ってあります。

demo

Install

npmでインストールできます。

npm install @azu/github-label-setup -g

Usage

基本的にはデフォルトのプリセットがあるので、--tokenでGitHubのtokenを渡すだけで後は自動でやってくれます。

ラベルを設定したいプロジェクトのディレクトリに移動してコマンドを叩くだけです。 (git remoteのoriginを見ます)

Usage
  $ github-label-setup --token xxx

Options

  -h, --help                  output usage information
  -l, --labels <path>         the path or npm packages name to look for the label configuration in. Default: labels.json
  --token <token>  a GitHub access token (also settable with a GITHUB_ACCESS_TOKEN environment variable)
  -d, --dry-run               calculate the required label changes but do not apply them

アクセストークンはhttps://github.com/settings/tokensから "repo" scope が有効になったものがあれば良いです。

--dry-runオプションを使えば、実際にどういう変更が行われるかを見れるのでまずはそちらで確認してください。

デフォルトのGitHubのラベルやよく使われる似た意味のラベルはマイグレーションしますが、リストにないラベルは単純に消えてしまうので注意が必要です。

Fetching labels from GitHub
Changed: the "duplicate" label in the repo is out of date. It will be updated to "duplicate" with color "#ededed".
Changed: the "help wanted" label in the repo is out of date. It will be updated to "help wanted" with color "#e99695".
Missing: the "good for beginner" label is missing from the repo. It will be created.
Missing: the "Priority: Critical" label is missing from the repo. It will be created.
Missing: the "Priority: High" label is missing from the repo. It will be created.
Missing: the "Priority: Low" label is missing from the repo. It will be created.
Missing: the "Priority: Medium" label is missing from the repo. It will be created.
Changed: the "invalid" label in the repo is out of date. It will be updated to "Status: Abandoned" with color "#000000".
Missing: the "Status: Blocked" label is missing from the repo. It will be created.
Missing: the "Status: In Progress" label is missing from the repo. It will be created.
Changed: the "Idea" label in the repo is out of date. It will be updated to "Status: Proposal" with color "#d4c5f9".
Missing: the "Status: Ready for PR" label is missing from the repo. It will be created.
Missing: the "Status: Review Needed" label is missing from the repo. It will be created.
Changed: the "breaking" label in the repo is out of date. It will be updated to "Type: Breaking Change" with color "#b60205".
Changed: the "bug" label in the repo is out of date. It will be updated to "Type: Bug" with color "#ee0701".
Changed: the "documents" label in the repo is out of date. It will be updated to "Type: Documentation" with color "#5319e7".
Changed: the "enhancement" label in the repo is out of date. It will be updated to "Type: Feature" with color "#1d76db".
Missing: the "Type: Refactoring" label is missing from the repo. It will be created.
Changed: the "greenkeeper" label in the repo is out of date. It will be updated to "Type: Maintenance" with color "#0e8a16".
Changed: the "question" label in the repo is out of date. It will be updated to "Type: Question" with color "#cc317c".
Added: the "example" label in the repo is not expected. It will be deleted.
Added: the "implementing" label in the repo is not expected. It will be deleted.
Added: the "Patch Welcome" label in the repo is not expected. It will be deleted.
Added: the "proposal" label in the repo is not expected. It will be deleted.
Added: the "wontfix" label in the repo is not expected. It will be deleted.
This is a dry run. No changes have been made on GitHub

このツールは github-label-sync のラッパーなので、細かい部分はそちらをみてください。

Npm packages for labels

-lオプションでラベルファイルを指定できますが、requireできればなんでも通るので、npmパッケージを作っても多分通ります。

$ github-label-setup --token xxx --labels @owner/github-label-presets

ラベルのフォーマットはLabel JSONをみてください。

デフォルトのラベル

最初に書いたように自分用のツールなので、ラベルのデフォルトは自分がよく使う感じのものになってます。

demo

  • duplicate
  • help wanted
  • good for beginner
  • Priority: Critical
  • Priority: High
  • Priority: Low
  • Priority: Medium
    • 優先度管理
  • Status: Abandoned
  • Status: Blocked
  • Status: In Progress
  • Status: Proposal
  • Status: Ready for PR
  • Status: Review Needed
    • ステータス管理
  • Type: Breaking Change
  • Type: Bug
  • Type: Feature
  • Type: Documentation
  • Type: Refactoring
  • Type: Maintenance
    • Related: Conventional Commits
    • これはコミットのスコープに大分近いです。
    • lerna-changelogなどラベルをCHANGELOGのソースに使うツールなどもあるのを考えて、コミットのスコープに合わせたセットを作っています
  • Type: Question"

Typeに関してはプロジェクト特有のTypeが増えていくと思います。 このスクリプトはリポジトリを作った直後に動かす目的が大きいです。

hub create && github-label-setup --token XXXX

関連

似たようなものは色々あるのでお気に入りを探してみてください。 github-label-syncをベースにしたのは既存のラベルをマイグレーションすることができるからです(紐付いていたIssueを保持できる)