Table of Contents

デッドロックの状況

ブランチ保護設定

  • ステータスチェック: unit-tests(必須)

GitHub Actionsワークフロー

ワークフロー.github/workflows/tests.ymlは、src/またはtests/が変更された場合にのみ実行される。

name: Tests

on:
  pull_request:
    branches: [main]
    # ソースコードとテストが変更された場合にのみ実行
    paths:
      - "src/**"
      - "tests/**"

jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
      # テストを実行する
...

Pull Request

  • src/tests/変更されていない場合。

結果

  • ステータスチェックunit-testsトリガーされない
  • 必須ステータスチェックunit-testsが成功していないため、pull requestをマージできない。
  • pull requestがデッドロック状態になる。

解決策

スキップワークフローを作成する

paths-ignoreオプションを使い、スキップワークフロー.github/workflows/tests-skip.ymlを作成する。

name: Tests (skip)

on:
  pull_request:
    branches: [main]
    # ソースコードとテスト”以外”が変更された場合に実行する
    paths-ignore:
      - "src/**"
      - "tests/**"

jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
      # メッセージ出力のみ(テストは実行しない)
      - run: echo "No source changes — skipping tests"

スキップワークフローを使った結果

  • src/tests/変更されていない場合、スキップワークフローがトリガーされ、ステータスチェックunit-testsが成功する。
  • pull requestがマージ可能となる。
  • デッドロックが発生しない。