issue_comment によって発火したジョブで、PRのブランチにCheckoutする方法

# 注意
この記事では、PR内のコメントに起因するジョブが発火したときに、そのPRのブランチにチェックアウトする方法を紹介しています。
ただし、注意してほしいのは、「ワークフローファイル自体の変更」の動作確認は、そのPR内では完結しません。ワークフローファイルの内容は、常にデフォルトブランチのものが使用されます。
例えば、あなたがジョブに新しいステップを追加して、PRにpushして、PR内でコメントして、そのコメントによってジョブを発火させても、新しく追加されたステップは実行されないです。
ワークフローファイル自体の変更に対する動作確認は、デフォルトブランチにマージした後しか行えません。非常に面倒ですが、これ以外に方法はありません。

(そもそも、ワークフローファイルのジョブが発火するのは、ジョブ内で特定のブランチにチェックアウトする前なので、ワークフローファイルの変更は、チェックアウトしたところで反映されるはずがないことはすぐに分かるでしょう。）

# 目的
ワークフローファイルが下記のようになっている場合、PR 内のコメントでジョブが発火したとき、デフォルトブランチにCheckoutする。
デフォルトブランチではなくて、特定のブランチにチェックアウトする方法を知る。
```
on:
  issue_comment:
    types: [created]

...

    steps:
      - name: Checkout code
        uses: actions/checkout@v3
```

# 結論
下記のいずれかがよさそう。
後で説明するが、二つ目はブランチを切り替えているので、こっちの方がいいと思う。

```
    steps:
      - name: Checkout code (1)
        uses: actions/checkout@v3
        with:
          ref: refs/pull/${{ github.event.issue.number }}/head
          fetch-depth: 0  
```
```
    steps:
      - name: Checkout code (2)
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: gh pr checkout
        run: |
          gh pr checkout ${{ github.event.issue.number }}
        env:
          GH_TOKEN: ${{ github.token }}
```

# 説明

下記のワークフローファイルを用意して、デバッグしてみた。
`/test` とコメントすれば、ジョブが発火します。

※ `issue_comment` によってジョブが発火する場合、デフォルトブランチのコードが使われるので、下記のコードを書いたら必ずマージして、次のPRで動作確認してください。

``` .github/workflows/test.yml
name: pr-checkout Workflow

on:
  issue_comment:
    types: [created]

jobs:
  pr-checkout-job:
    runs-on: ubuntu-latest
    if: >
      github.event_name == 'issue_comment' &&
        (contains(github.event.comment.body, '/test') || contains(github.event.comment.body, '/test'))

    steps:
      - name: Checkout code (1)
        uses: actions/checkout@v3
        with:
          ref: refs/pull/${{ github.event.issue.number }}/head
          fetch-depth: 0  

      - name: Display current branch and commit
        run: |
          echo "git branch: $(git branch)"
          echo "Branch: $(git rev-parse --abbrev-ref HEAD)"
          echo "Commit: $(git rev-parse HEAD)"

      - name: Checkout code (2)
        uses: actions/checkout@v3
        # 試してみたが、fetch-depth の指定は必要なかった
        with:
          fetch-depth: 0

      - name: gh pr checkout
        run: |
          gh pr checkout ${{ github.event.issue.number }}
        env:
          GH_TOKEN: ${{ github.token }}

      - name: Display current branch and commit
        run: |
          echo "git branch: $(git branch)"
          echo "Branch: $(git rev-parse --abbrev-ref HEAD)"
          echo "Commit: $(git rev-parse HEAD)"
```

Checkout code (1) では、下記のようにログが出た。
`git checkout c97c4e6eeb4971b87519f76f5f69c23848fdeab6` で特定のコミットに移動しているイメージ。
```
git branch: * (HEAD detached at pull/64/head)
Branch: HEAD
Commit: c97c4e6eeb4971b87519f76f5f69c23848fdeab6
```

Checkout code (2) では、下記のようにログが出た。
`git switch 20241016-pr-checkout-test` でブランチを切り替えているイメージ。
```
git branch: * 20241016-pr-checkout-test
  develop
Branch: 20241016-pr-checkout-test
Commit: c97c4e6eeb4971b87519f76f5f69c23848fdeab6
```

# ついで
`hub` コマンドは使えない。
`gh` コマンドを代わりに使うみたい。

```
      # hub is not available on GitHub actions
      # https://github.com/mislav/hub/issues/3338
      # https://github.com/actions/runner-images/issues/8362
      #
      # - name: Checkout code
      #   uses: actions/checkout@v3
      #   with:
      #     fetch-depth: 0
      
      # - name: hub pr checkout
      #   run: |
      #     hub pr checkout ${{ github.event.issue.number }}

      # - name: Display current branch and commit
      #   run: |
      #     echo "git branch: $(git branch)"
      #     echo "Branch: $(git rev-parse --abbrev-ref HEAD)"
      #     echo "Commit: $(git rev-parse HEAD)"
```

https://github.com/mislav/hub/issues/3338

https://github.com/actions/runner-images/issues/8362

> Consider migrating to gh cli tool.


# 参考

https://github.com/actions/checkout/issues/331

https://github.com/actions/checkout/issues/1108