ユースケース
複数のリポジトリに対して 同じラベルを展開したい、 言い方を変えると、 複数のリポジトリでラベルを共有したい ケースがある。
このとき手作業でラベルを設定していくのは手間である。
そこで GitHub Action を使って、任意のイベントをフックして実現したい。
使用するツール
構成
test_workflow
+ .github/
+ workflows/
| + unfolding_labels.yml
+ labels.yml
事前準備
Personal access tokens の作成
手順
ユーザの設定 で以下を行う。
- 画面右上のユーザアイコンをクリック
-
Settings
をクリック - 左側ペインで
Developer settings
を開く - 左側メニューで
Personal access tokens
を開く -
Generate new token
から-
Note
を入力- ここで入力する文字列は 後述 の リポジトリ-Secrets の
Name
で指定する
- ここで入力する文字列は 後述 の リポジトリ-Secrets の
-
ワークフロー と リポジトリ に対するアクセスを許可 したいので次の項目にチェックする( 登録後も変更可能 )
repo
admin:repo_hook
delete_repo
workflow
-
-
Generate token
でトークンを作成- ここで生成されたトークンは 後述 の リポジトリ-Secrets の
Value
で設定する
- ここで生成されたトークンは 後述 の リポジトリ-Secrets の
注意点
作成したトークンは ここでコピーしておかないと二度と参照できない ので、忘れずにコピーしておくこと。
もし忘れてしまった場合は Regenerate token
で再作成できるが、生成されるトークンは前回とは別のものになってしまう。
作成したトークンのリポジトリへの登録
手順
GitHub Action を設定するリポジトリ で Secrets に登録する ために以下を行う。
-
settings
を開く - 左側ペインで
Secrets
を選ぶ -
New secret
から-
Name
を入力- ここで入力する文字列は後述の ワークフローファイル(
unfolding_labels.yml
) でGITHUB_TOKEN
を指定する際に使用する
- ここで入力する文字列は後述の ワークフローファイル(
-
Value
を入力
-
-
Add secret
で登録
注意点
トークンを登録する際、 改行が含まれていると処理が実行された際にエラー となり、その後 処理が進まなくなる。
Sync labels1s
labeler: 2020/09/19 08:12:45 create "WIP" in ksh-fthr/FileUtilityTools
Run b4b4r07/github-labeler@master
/usr/bin/docker run --name e33467befdb6c9c8b44828bb5b4adc7268cad_378975 --label 9e3346 --workdir /github/workspace --rm -e GITHUB_TOKEN -e INPUT_CONFIG -e INPUT_IMPORT -e INPUT_DRYRUN -e HOME -e GITHUB_JOB -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_REPOSITORY_OWNER -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_SERVER_URL -e GITHUB_API_URL -e GITHUB_GRAPHQL_URL -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e GITHUB_PATH -e GITHUB_ENV -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/test_workflow/test_workflow":"/github/workspace" 9e3346:7befdb6c9c8b44828bb5b4adc7268cad
# invalid header field value "Bearer ***\n" としてエラーが出ている
2020/09/19 08:12:45 [ERROR] failed to fetch labels ksh-fthr/FileUtilityTools: Get https://api.github.com/repos/ksh-fthr/FileUtilityTools/labels?per_page=10: net/http: invalid header field value "Bearer ***\n" for key Authorization
# ラベルを展開しようとするが、このまま進まない
Post https://api.github.com/repos/ksh-fthr/FileUtilityTools/labels: net/http: invalid header field value "Bearer ***\n" for key Authorization
labeler: 2020/09/19 08:12:45 create "WIP" in ksh-fthr/FileUtilityTools
設定内容
ワークフローファイル( unfolding_labels.yml )
name: unfolding labels
on:
issues:
types: [opened]
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.admin_token }}
簡単ではあるが説明を。
issue 発行をイベントトリガーとする
issue 発行 を GitHub Action 発火のイベント とするのが下記の部分。
.github/labels.yml
で展開するラベル定義ファイルを指定している。
この部分を変更することで、任意のイベントをトリガーに設定することができる。
イベントについては以下を参照。
- ワークフローをトリガーするイベント を参照。
on:
issues:
types: [opened]
paths:
- .github/labels.yml
GitHub Action で実行される処理
そして GitHub Acton 発火時に実行される処理が下記の部分。
こちらについては github-labeler のサンプルを流用した。
詳細はリンク先を参照されたい。
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.admin_token }}
ラベル管理用ファイル( labels.yml )
# ラベルの定義
labels:
- name: "CS"
description: "カスタマーサクセス"
color: "d4c5f9"
- name: "DEV"
description: "開発"
color: "bfe5bf"
- name: "Document"
description: "ドキュメント"
color: "bfe5bf"
- name: "Release"
description: "リリース"
color: "bfdadc"
- name: "Hotfix"
description: "不具合修正"
color: "fef2c0"
# 展開対象のリポジトリと設定するラベル
repos:
- name: ksh-fthr/test_workflow
# labels で定義したラベルから設定する
labels:
- CS
- DEV
- Document
- Release
- Hotfix
- name: ksh-fthr/FileUtilityTools
# labels で定義したラベルから設定する
labels:
- CS
- DEV
- Document
- Release
- Hotfix
このファイルで定義された ラベル が、同じく設定されている リポジトリ に展開される。
こちらも詳細は github-labeler を参照されるのが良いが、以下に簡単な説明を。
ラベルの定義
見たままではあるが、labels
をトップに
項目 | 説明 | 備考 |
---|---|---|
name | ラベルの名前 | |
description | ラベルの説明 | |
color | ラベルの色 | 16進数で表現 |
を設定している。
ここで設定した情報が 後述の issue 発行後 に載せたキャプチャのように表示される。
labels:
- name: "CS"
description: "カスタマーサクセス"
color: "d4c5f9"
#
# 省略
#
展開対象のリポジトリと設定するラベル
repos
をトップに
項目 | 説明 | 備考 |
---|---|---|
name | 展開したいリポジトリ | |
labels | 指定したリポジトリに設定したラベル | 上で定義しているラベルを子要素に指定する |
を設定することで、 展開したいリポジトリ( 複数指定可能 ) と そのリポジトリに設定したいラベル を設定している。
# 展開対象のリポジトリと設定するラベル
repos:
- name: ksh-fthr/test_workflow
# labels で定義したラベルから設定する
labels:
- CS
- DEV
- Document
- Release
- Hotfix
#
# 省略
#
実行してみる
今回は issue
発行時にラベルを別のリポジトリに登録したい。
issue 発行前後のラベルの状態
issue 発行前と発行後で 2つ のリポジトリに対してラベルが展開されていることを確認する。
対象のリポジトリは次の 2つ。
- ksh-fthr/test_workflow
- ksh-fthr/FileUtilityTools
issue 発行前
issue 発行後
GitHub Action を確認
↑ から Sync labels
のブロックを抜き出したのがこちら。
test_workflow
と FileUtilityTools
の 2 つのリポジトリに対してラベルが展開されているのがわかる。
Sync labels
labeler: 2020/09/19 09:53:36 delete "hoge" in ksh-fthr/test_workflow
Run b4b4r07/github-labeler@master
/usr/bin/docker run --name e3346c5edaf3b074147a293961cd9f86922a1_7b86f7 --label 9e3346 --workdir /github/workspace --rm -e GITHUB_TOKEN -e INPUT_CONFIG -e INPUT_IMPORT -e INPUT_DRYRUN -e HOME -e GITHUB_JOB -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_REPOSITORY_OWNER -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_SERVER_URL -e GITHUB_API_URL -e GITHUB_GRAPHQL_URL -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e GITHUB_PATH -e GITHUB_ENV -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/test_workflow/test_workflow":"/github/workspace" 9e3346:c5edaf3b074147a293961cd9f86922a1
labeler: 2020/09/19 09:53:35 create "CS" in ksh-fthr/test_workflow
labeler: 2020/09/19 09:53:35 create "CS" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:53:35 create "DEV" in ksh-fthr/test_workflow
labeler: 2020/09/19 09:53:35 create "DEV" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:53:35 create "Document" in ksh-fthr/test_workflow
labeler: 2020/09/19 09:53:36 create "Document" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:53:36 create "Release" in ksh-fthr/test_workflow
labeler: 2020/09/19 09:53:36 create "Release" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:53:36 create "Hotfix" in ksh-fthr/test_workflow
labeler: 2020/09/19 09:53:36 create "Hotfix" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:53:36 delete "hoge" in ksh-fthr/test_workflow
注意点
ラベル管理用ファイル( labels.yml
) で設定した内容が反映されるという点に留意しておくこと。
逆に言うと、共有対象のリポジトリですでに登録されているラベルも、 labels.yml
に存在しなければ本フックで実行されたタイミングで削除される。
Sync labels
labeler: 2020/09/19 09:06:35 delete "レビュー待ち" in ksh-fthr/FileUtilityTools
Run b4b4r07/github-labeler@master
/usr/bin/docker run --name e33467193efd91f6f43e2968ecbb4116ba8d7_e802b5 --label 9e3346 --workdir /github/workspace --rm -e GITHUB_TOKEN -e INPUT_CONFIG -e INPUT_IMPORT -e INPUT_DRYRUN -e HOME -e GITHUB_JOB -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_REPOSITORY_OWNER -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_SERVER_URL -e GITHUB_API_URL -e GITHUB_GRAPHQL_URL -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e GITHUB_PATH -e GITHUB_ENV -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/test_workflow/test_workflow":"/github/workspace" 9e3346:7193efd91f6f43e2968ecbb4116ba8d7
labeler: 2020/09/19 09:06:33 create "CS" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:06:34 create "DEV" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:06:34 create "Document" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:06:34 create "Release" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:06:34 create "Hotfix" in ksh-fthr/FileUtilityTools
#
# labels.yml に定義されていないラベルは削除されている
labeler: 2020/09/19 09:06:35 delete "Ship it!" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:06:35 delete "WIP" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:06:35 delete "dependencies" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:06:35 delete "レビュー修正待ち" in ksh-fthr/FileUtilityTools
labeler: 2020/09/19 09:06:35 delete "レビュー待ち" in ksh-fthr/FileUtilityTools
ハマりどころ
事前準備 で扱っている Personal access tokens の作成 をしていても、 作成したトークンのリポジトリへの登録 を行っていないと 403 Resource not accessible by integration
が発生する。
labeler: 2020/09/19 06:16:10 create "WIP" in ksh-fthr/FileUtilityTools
POST https://api.github.com/repos/ksh-fthr/FileUtilityTools/labels: 403 Resource not accessible by integration []
このあとやりたいこと
-
dry-run
との併用-
github-labeler を見るに
dry-run
の機能は提供されている - が、issue 発行時に dry-run フラグを たてる / たてない の制御ができるのかな
-
github-labeler を見るに
ソースコード
今回の記事で動作確認に使用したコードは下記にアップしております。
ご参考まで。
注意事項
本記事の公開にあわせて 作成したトークンのリポジトリへの登録 で登録した Secrets は削除しております。ご承知おきください。