GitHub Actions ラベルをファイルで管理する

![ScreenShot 2024-03-08 19.14.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52879/ddb6e772-28a4-a53d-f3e6-9099b824a135.png)

## 概要

- GitHub Actionsを使ってちょっとした業務改善できないか
- デフォルトのラベルがちょっと扱いづらい
- 他のリポジトリからラベルの名前と色をパクろう...！
- GitHubのラベルを手で作っていくのがめんどい...😭
- 3個目を作った辺りから飽きてくる😮‍💨

そうだ、ファイルで管理しよう😎

## Gitシリーズ記事まとめ

https://qiita.com/ucan-lab/items/33c63a402f533aa92f3e

## 利用ツールなど

- https://github.com/actions/checkout
- https://github.com/actions/setup-node
- https://github.com/azu/github-label-setup

こちらのアクション、ライブラリを使用します。

## 実装

下記、2つのファイルを用意します。

- `.github/labels.json`
- `.github/workflows/sync-labels.yaml`

### .github/labels.json

```json:.github/labels.json
[
  {
    "name": "bug",
    "color": "FC2C2B",
    "description": "種別: 不具合の修正"
  },
  {
    "name": "feature",
    "color": "375E97",
    "description": "種別: 新機能"
  },
  {
    "name": "document",
    "color": "FFFFFF",
    "description": "種別: ドキュメントの変更"
  },
  {
    "name": "chore",
    "color": "E2601E",
    "description": "種別: ツールやライブラリの変更",
  },
  {
    "name": "refactor",
    "color": "AFD38D",
    "description": "種別: リファクタリング"
  },
  {
    "name": "duplicate",
    "color": "CCCCCC",
    "description": "種別: 重複"
  },
  {
    "name": "wontfix",
    "color": "CCCCCC",
    "description": "種別: 対応しない"
  },
  {
    "name": "icebox",
    "color": "BDDEEC",
    "description": "種別: 優先度低"
  },
  {
    "name": "release",
    "color": "003B46",
    "description": "種別: リリース"
  },
  {
    "name": "major",
    "color": "07575B",
    "description": "バージョニング: メジャーアップデート"
  },
  {
    "name": "minor",
    "color": "C4DFE6",
    "description": "バージョニング: マイナーアップデート"
  },
  {
    "name": "dependencies",
    "color": "5319E7",
    "description": "種別: セキュリティアップデート"
  },
  {
    "name": "docker",
    "color": "E6D72A",
    "description": "依存関係: docker compose build が必要な変更"
  },
  {
    "name": "npm",
    "color": "E6D72A",
    "description": "依存関係: npm install が必要な変更"
  },
  {
    "name": "composer",
    "color": "E6D72A",
    "description": "依存関係: composer install が必要な変更"
  },
  {
    "name": "migrate",
    "color": "E6D72A",
    "description": "依存関係: php artisan migrate が必要な変更"
  },
  {
    "name": "not-reviewed",
    "color": "F9C1CF",
    "description": "未レビュー"
  }
]
```

必要に応じて、ラベルの定義を追加・削除してください。

### .github/workflows/sync-labels.yaml

```yaml:.github/workflows/sync-labels.yaml
name: Sync Labels
on:
  workflow_dispatch:
  push:
    branches: [main, develop]
jobs:
  sync-labels:
    permissions:
      contents: read
      issues: write
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - name: Install dependencies
        run: yarn add -D @azu/github-label-setup
      - name: Run github-label-setup
        run: yarn github-label-setup --token ${{ secrets.GITHUB_TOKEN }} --labels .github/labels.json
```

[@azu/github-label-setup](https://github.com/azu/github-label-setup) はnpmパッケージなので、Node.jsをセットアップしています。

`.github/labels.json` を参照したいので、[actions/checkout](https://github.com/actions/checkout)も利用しています。

`${{ secrets.GITHUB_TOKEN }}` は自動トークン認証で認証が必要なGitHub APIを叩く時に渡します。

https://docs.github.com/ja/actions/security-guides/automatic-token-authentication

## 結果

![ScreenShot 2024-03-08 19.22.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52879/69dcee25-8f26-417f-097f-0990205e4c94.png)

`main` or `develop` ブランチにラベルを一気に作成してくれます。
`workflow_dispatch` も定義しているので任意のブランチ、タイミングで実行してもokです。

個人的にとても嬉しかったです！

## 補足

- ラベルを追加・削除したい場合はファイルを更新する
- 手動で追加した場合、ワークフローが実行されたタイミングで削除される

## 業務改善度: ★☆☆☆☆

星1つです。
新しくリポジトリを作る時だけまとめてラベルを作れるので、5分〜10分くらい時間が短縮できるでしょうか...

ラベルをファイルで管理できるようになったので、次回は応用編です。
続編にご期待ください。

## 参考

https://docs.github.com/ja/actions