Skip to content

ブランチ組み合わせの検証を required status check にする #5369

Description

@KentaHizume

概要

validate-pr-branch-combination による git-flow のブランチ組み合わせ検証が、どの ruleset でも required status check に指定されていません。そのため検証が失敗しても PR をマージできます。git-flow から逸脱したマージを設定で防げるようにします。

#5336 から分離した Issue です。

詳細

現状

  • ruleset は 3 つ存在しますが、いずれにも required_status_checks ルールがありません
    • Protect default branch (id: 2802479)
    • Code Quality Copilot review for default branch (id: 19494024)
    • v* タグの削除禁止 (id: 2802528、target: tag)
  • Protect default branchbypass_actorsnull(バイパス許可なし)です。つまり検証が無視できるのはバイパスによるものではなく、required でないことが原因です
  • validate-pr-branch-combination.ymlpull_requestbranches: [main, develop, 'release/*'] で起動します
  • release/* を保護する ruleset は存在しません

実際に発生した逸脱

PR #5338fix/リリースパイプラインを修正するmain です。許可リストは hotfix/* のみで fix/* を含まないため検証は失敗しますが、マージされています。

validate-pr-branch-combination/action.yml の許可リストは以下です。

feature/*:develop
dependabot/*:develop
hotfix/*:develop
hotfix/*:main
hotfix/*:release/*
release/*:develop
release/*:main

影響

#5336main を merge commit のみに揃えますが、許可外のブランチから main へ直接マージされると、再び main の履歴が想定と異なる形になります。リリースノートの自動生成は main の履歴に依存するため、#5336 の対策が無効化される可能性があります。

検討事項

  1. 許可リスト自体の見直し
    • fix/* を許可リストに追加するのか、hotfix/* に寄せるのか
    • 現行の 7 パターンが git-flow の運用実態と一致しているか
  2. required にする対象 ruleset
  3. 指定する check 名
    • ワークフローのジョブ名は PR のブランチ組み合わせの検証 です。非 ASCII の check 名が required_status_checks で正しく機能するか確認が必要
  4. 既存のオープン PR への影響
    • required 化した時点で、当該チェックが実行されていない既存 PR はマージできなくなります。dependabot PR を含めた影響範囲と、再実行の手順を確認する

完了条件

ここにこの Issue の完了条件を箇条書きで記載します。

Metadata

Metadata

Assignees

No one assigned

    Labels

    CI/CDGithub Actionsなどの修正not triaged精緻化、分析がされていない

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions