先日、この記事を読んで、確かにRepo作るとデフォルトのラベルとは別に必ず追加するなぁと。
実際、作ること自体は難しい作業ではないですが、複数のラベルを作成することが多いので、ちょいちょい面倒だなぁと思ってました。
はじめに、GitHub CLIにラベル作る機能があるかもしれないと、確認したところそれっぽいものはありませんでした。
https://cli.github.com/manual/gh_issue_create
なので、GitHub APIをチェックしました。
https://docs.github.com/en/rest/reference/issues#labels
APIのドキュメントによると、基本的にはoctokit.jsをインストールして、personal tokenを渡してインスタンスを作り、パラメータとして、ユーザーIDとラベルを作成・削除したレポジトリの名前に加えて、ラベルを作成したい場合はラベルの情報(ラベル名、ラベルの色、ラベルの説明)。削除したい場合はラベルの名前を渡せば良いようです。
現状、このツールで出来ることは以下の4つです。
- ラベルを作成する
- 複数のラベルを作成する constant.tsに定義してあるnewLabel(https://github.com/koji/github-label-manager/blob/main/src/constant.ts#L22-L205)
- ラベルを削除する
- 全てのラベルを削除する
複数の指定したラベルを削除する機能は近日中に追加する予定です。
ちなみ、constant.ts
はこちらの記事を元にしています。
デモ
レポジトリ
使い方
# repoをクローン
$ git clone https://github.com/koji/github-label-manager.git
$ cd github-label-manager
# パッケージをインストール
# use yarn
$ yarn # install packages
$ yarn build # compile typescript
$ yarn start # run index.js
# use npm
$ npm install
$ npm run build
$ npm start
# buildしないでts-nodeで直接tsを実行
# or use ts-node
$ npx ts-node src/index.ts # this might be slow
補足
octkit.jsに加えて、ターミナルからの入力のためにpromptsを使っています。
一番最初にざっと機能を実装した時は、readline-syncを使っていました。
ただ、その名の通りsyncだったので、1つラベル作ってツール終了して、削除するときはまたツールを起動みたいな使うのが面倒な作りにしてしまったので、ラベル作成はレポ作ったときにやるくらいだけれど、この面倒さだと使わないなと思い、promptsに切り替えました。
ちなみに、ベースは typescript-starter
を使って作りました。
ただ、後からDenoとかで作った方が良かったかなぁと。typescript-starter
は悪くないんですが、自分のVSCodeのconfigとの相性が良くなかったみたいで、その部分を解消するのに結構時間が取られました