GitHub Actionsで"Files changed"のファイルを取得する

GitHub ActionsでPRの"Files changed"タブと同じファイルの内容を取得する方法*1

- uses: actions/checkout@v3
  with:
    # マージベースの探索でコミットをさかのぼるために全コミットを取得しておく
    fetch-depth: 0
- run: |
    # ... でPRのFiles changedと同じ差分
    git diff origin/main...HEAD

    # ファイル名のリストだけ
    git diff --name-only origin/main...HEAD

    # 必要に応じて追加、変更したファイルだけなど
    git diff --diff-filter=AM origin/main...HEAD

やっていることは次と同じ。

# fast-forwardでない可能性があるのでマージベースを見つけておく
merge_base_sha=$(git merge-base origin/main HEAD)

git diff $merge_base_sha HEAD

たぶん実用的にはchanged-filesアクションを使えばよいが、とりあえずインラインで書きたい、なんらかの理由で外部アクションに依存したくないという時用。

*1:2022-11-23に ... を使う方法を追記