LoginSignup
4
2

More than 1 year has passed since last update.

【GitHub】Actions と Projects を使って issue の状態を可視化する

Posted at

GitHub には CI/CD の機能を提供する Actions とカンバンツールであるプロジェクトボードがありますので、これらの機能をつかって issue を管理してみたいと思います。

プロジェクトボードを作る

適当なリポジトリを作り、[Projects]タブを選択し、[New project]からプロジェクトボードを作成できます。
create-project.png

プロジェクトボードを作成できたら、ステータス毎に issue を分類するために「Backlog」「In Progress」「Done」の列を作成します。
project-board.png

ワークフローを作成する

issue が新しく作成されたら「Backlog」へ、issue に担当者がアサインされたら「In Progress」、issue がクローズしたら「Done」へプロジェクトボード上にマッピングされるように Actions でワークフローを作成します。ワークフローはyamlファイルに記述し.github/workflows/issue-status-label.ymlで保存します。${{ secrets.PAT }}GitHubPersonal access tokenになりますので事前に用意し、Actions から使用できるようにsecretsに設定しておく必要があります。

.github/workflows/issue-status-label.yml
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 ラベルが付与されます。
issue-create.png

プロジェクトボードを確認すると、「Backlog」列に作成した issue が配置されています。
issue-project-board.png

担当者アサイン

作成した issue に担当者をアサインしてみます。すると、backlog ラベルが削除されて inprogress ラベルが付与されます。プロジェクトボードを見ると「In Progress」列に issue が移動されているのが確認できます。
issue-moved.png

issue クローズ

issue をクローズしてみます。プロジェクトボードで確認すると、「Done」列に issue が移動し close がラベルが付与されています。
issue-done.png

参考

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

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2