LoginSignup
3
2

概要

前回、PR作成時にラベルを自動付与するワークフローを作成しました。

ブランチ名は自由に設定したいとかあるかもしれません。
自動付与だと強制できないので、PRにラベルが設定されない可能性はあります。

そこでPRに特定のラベルが付与されてない場合はマージできないようにするワークフローを作成します。

Gitシリーズ記事まとめ

利用ツール

今回、ツールは未使用です。

実装

前回作成した .github/workflows/assign-label.yaml に追記します。
ラベル付与された後に、ラベルの必須チェックが実行されて欲しいためです。

丸々コードを上書きしてもらえればokです。

.github/workflows/assign-label.yaml

.github/workflows/assign-label.yaml
name: Assign Label
on:
  pull_request:
    types: [opened, labeled, unlabeled, synchronize, reopened]
jobs:
  assign-label:
    permissions:
      contents: read
      pull-requests: write
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

	  - uses: actions/labeler@v5
        if: ${{ github.event.action == 'opened' }}
        with:
          configuration-path: .github/labeler-branch.yaml
      - uses: actions/labeler@v5
        if: ${{ contains(fromJson('["opened", "synchronize"]'), github.event.action) }}
        with:
          configuration-path: .github/labeler-files.yaml
  check-require-label:
    needs: assign-label
    permissions:
      pull-requests: read
    runs-on: ubuntu-latest
    steps:
      - id: labels
        shell: bash
        env:
          GH_REPO: ${{ github.repository }}
          GH_TOKEN: ${{ github.token }}
          PR_NUMBER: ${{ github.event.number }}
        run: |
          json=$(gh pr view "$PR_NUMBER" --json labels | jq -c '.labels|map(.name)')
          echo "json=$json" >> "$GITHUB_OUTPUT"
      - name: Echo Label
        run: echo "${{steps.labels.outputs.json}}"
      - name: bug, feature, document, chore, refactor, dependencies, release の中からいずれかのラベルを指定してください。
        if: >-
          ! contains(fromJSON(steps.labels.outputs.json), 'bug') &&
          ! contains(fromJSON(steps.labels.outputs.json), 'feature') &&
          ! contains(fromJSON(steps.labels.outputs.json), 'document') &&
          ! contains(fromJSON(steps.labels.outputs.json), 'chore') &&
          ! contains(fromJSON(steps.labels.outputs.json), 'refactor') &&
          ! contains(fromJSON(steps.labels.outputs.json), 'dependencies') &&
          ! contains(fromJSON(steps.labels.outputs.json), 'release')
        run: exit 1
      - name: Successfully
        run: exit 0

実行結果

ScreenShot 2024-04-05 10.57.21.png

ラベルを設定しないとCI通らないんやでと怒られるようになりました。

ScreenShot 2024-04-05 11.00.00.png

ラベルが設定されてる時はステップがskipされるので、怒られません。

補足

needs: assign-label が設定されているので、 assign-label ジョブが実行された後に check-require-label が実行されます。

id: labels ではPRに設定されているラベルを取得しています。

自動付与した上で必須チェックしています。
自動付与が不要な場合は assign-label のジョブと関連の設定を削除してください。

ラベルの取得について

${{ fromJSON(github.event.pull_request.labels.*.name) }} でラベルを取得することも可能ですが、こちらだと最新のラベルを取得できませんでした。

出力パラメータ

$GITHUB_OUTPUT
https://docs.github.com/ja/actions/using-workflows/workflow-commands-for-github-actions#setting-an-output-parameter

業務改善度: ★★★☆☆

星3つです。
ラベル付与を強制できるので、便利は便利になったと思います。

ただ、作っておいてなんですが、必須チェックまでしなくてもいいんじゃないかとは個人的に思います笑

手動で付与するのもそもそも負担ないですからね

せっかくラベルをファイル管理するようにしたので、良い使い方ができないかなと考えてみました。

なんだか業務改善に繋がるのか怪しくなってきたので使ってみた感想とかあったらフィードバックコメント欲しいです。

3
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
3
2