GitHub には CI/CD の機能を提供する Actions とカンバンツールであるプロジェクトボードがありますので、これらの機能をつかって issue を管理してみたいと思います。
プロジェクトボードを作る
適当なリポジトリを作り、[Projects]タブを選択し、[New project]からプロジェクトボードを作成できます。
プロジェクトボードを作成できたら、ステータス毎に issue を分類するために「Backlog」「In Progress」「Done」の列を作成します。
ワークフローを作成する
issue が新しく作成されたら「Backlog」へ、issue に担当者がアサインされたら「In Progress」、issue がクローズしたら「Done」へプロジェクトボード上にマッピングされるように Actions でワークフローを作成します。ワークフローはyaml
ファイルに記述し.github/workflows/issue-status-label.yml
で保存します。${{ secrets.PAT }}
はGitHub
のPersonal access token
になりますので事前に用意し、Actions から使用できるようにsecrets
に設定しておく必要があります。
name: Label issues
on:
issues:
types:
- reopened
- opened
- closed
- assigned
env:
PROJECT_NAME: todo
jobs:
issue_labels:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Add backlog label
if: "github.event.action == 'opened'"
uses: andymckay/labeler@1.0.2
with:
add-labels: "backlog"
remove-labels: "inprogress, close"
repo-token: ${{ secrets.PAT }}
- name: Add inprogress label
if: "github.event.action == 'assigned' || github.event.action == 'reopened'"
uses: andymckay/labeler@1.0.2
with:
add-labels: "inprogress"
remove-labels: "backlog, close"
repo-token: ${{ secrets.PAT }}
- name: Add close label
if: "github.event.action == 'closed'"
uses: andymckay/labeler@1.0.2
with:
add-labels: "close"
remove-labels: "inprogress, backlog"
repo-token: ${{ secrets.PAT }}
assign_issue_to_project:
name: Assign issues to project
runs-on: ubuntu-latest
steps:
- name: Assign issues to project
uses: technote-space/create-project-card-action@v1
if: "github.event.action == 'opened'"
with:
PROJECT: ${{env.PROJECT_NAME}}
COLUMN: Backlog
move_assigned_card:
runs-on: ubuntu-latest
name: Move assigned card
steps:
- uses: alex-page/github-project-automation-plus@v0.3.0
if: "github.event.action == 'assigned'"
with:
project: ${{env.PROJECT_NAME}}
column: In Progress
repo-token: ${{ secrets.PAT }}
- uses: alex-page/github-project-automation-plus@v0.3.0
if: "github.event.action == 'reopened'"
with:
project: ${{env.PROJECT_NAME}}
column: In Progress
repo-token: ${{ secrets.PAT }}
env.PROJECT_NAME
には作成したプロジェクトの名前を設定します。ワークフローを作成したらリポジトリにプッシュしておきます。
issue の作成
ワークフローのテストのために適当な issue を作成します。issue が作成されるとワークフローが実行されて issue に backlog ラベルが付与されます。
プロジェクトボードを確認すると、「Backlog」列に作成した issue が配置されています。
担当者アサイン
作成した issue に担当者をアサインしてみます。すると、backlog ラベルが削除されて inprogress ラベルが付与されます。プロジェクトボードを見ると「In Progress」列に issue が移動されているのが確認できます。
issue クローズ
issue をクローズしてみます。プロジェクトボードで確認すると、「Done」列に issue が移動し close がラベルが付与されています。
参考
issue を作成したらプロジェクトに追加
https://github.com/marketplace/actions/create-project-card-action
カードがプロジェクトボードの列に追加されたときにラベルを削除する
https://docs.github.com/ja/actions/guides/removing-a-label-when-a-card-is-added-to-a-project-board-column
label の作成
https://github.com/marketplace/actions/simple-issue-labeler