概要
前回、PR作成時にラベルを自動付与するワークフローを作成しました。
ブランチ名は自由に設定したいとかあるかもしれません。
自動付与だと強制できないので、PRにラベルが設定されない可能性はあります。
そこでPRに特定のラベルが付与されてない場合はマージできないようにするワークフローを作成します。
Gitシリーズ記事まとめ
利用ツール
今回、ツールは未使用です。
実装
前回作成した .github/workflows/assign-label.yaml
に追記します。
ラベル付与された後に、ラベルの必須チェックが実行されて欲しいためです。
丸々コードを上書きしてもらえればokです。
.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
実行結果
ラベルを設定しないとCI通らないんやでと怒られるようになりました。
ラベルが設定されてる時はステップが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つです。
ラベル付与を強制できるので、便利は便利になったと思います。
ただ、作っておいてなんですが、必須チェックまでしなくてもいいんじゃないかとは個人的に思います笑
手動で付与するのもそもそも負担ないですからね
せっかくラベルをファイル管理するようにしたので、良い使い方ができないかなと考えてみました。
なんだか業務改善に繋がるのか怪しくなってきたので使ってみた感想とかあったらフィードバックコメント欲しいです。