この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
GitHub Actionsを使って、 プルリクエスト作成時(もしくは commit push時)に ベースブランチからの差分ファイルを取得したいです。
例えば base:main ← compare:fix
のプルリクエストを作成したとします。 このとき mainブランチとfixブランチの差分ファイル一覧を取得、 差分ファイルに対して Lintを行う、といったことを実現したいです。
以下にそれを実現するワークフローのテンプレート、および活用例を書いてみました。
テンプレート
name: run-actions-using-diff-files
on:
pull_request:
types: [opened, synchronize, reopened]
branches: [ main ]
paths: [ 'docs/**.md' ]
env:
base_branch: main
diff_path: 'docs/**.md'
jobs:
run-actions:
runs-on: ubuntu-latest
steps:
- name: Switch to pull request branch
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Fetch base branch
run: git fetch origin ${base_branch}:${base_branch}
- name: Run actions using diff_files
run: |
diff_files=$(git diff --name-only HEAD ${base_branch} -- "${diff_path}" \
| tr "\n" " ")
echo "# diff_files: ${diff_files}"
####
# ここから先に ${diff_files} を使った処理を記載
on:
にて自動トリガーの設定を pull_request
イベントに絞っています。 branches, paths
を書いてブランチ・ファイルパスでフィルターしています。 このフィルターは用途に合わせて変えてください。
env:
にて環境変数を定義します。 baseブランチ( base_branch
)、および git diff
の範囲 ( diff_path
)を用途に合わせて指定します。
jobs:
にて「差分ファイル一覧を取得する」ところまでを記載しています。
- Switch to pull request branch - actions/checkout を使ってcompareブランチに切り替えています
- Fetch base branch - baseブランチをローカルにコピーしています
- Run actions using diff_files -
git diff
コマンドを使って差分ファイル一覧を取得します。 取得した一覧(${diff_files}
)を使って "何かの処理" を実現します。
活用例(MarkdownファイルのLint)
以下ワークフローは Markdownファイルを textlint を使って 校正する一例です。 docs
ディレクトリ配下のmdファイルに対してチェックを行います。 ※今回はシンプルに 「ら抜き言葉」チェック のみ。
name: run-actions-using-diff-files
on:
pull_request:
types: [opened, synchronize, reopened]
branches: [ main ]
paths: [ 'docs/**.md' ]
env:
base_branch: main
diff_path: 'docs/**.md'
jobs:
run-actions:
runs-on: ubuntu-latest
steps:
- name: Switch to pull request branch
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 14
- name: Install textlint
run: npm install textlint textlint-rule-no-dropping-the-ra
- name: Fetch base branch
run: git fetch origin ${base_branch}:${base_branch}
- name: Run actions using diff_files
run: |
diff_files=$(git diff --name-only HEAD ${base_branch} -- "${diff_path}" \
| tr "\n" " ")
echo "# diff_files: ${diff_files}"
####
# ここから先に ${diff_files} を使った処理を記載
npx textlint ${diff_files} --rule textlint-rule-no-dropping-the-ra
実際にプルリクエストを作成して、GitHub Actions を走らせてみます。 以下キャプチャの Run actions using diff_files
ステップから、 差分ファイルの一覧が取得できていることが分かります。
※ちなみに、 textlint (Markdown自動校正) 周りの話は以下ブログに細かく書いています。
おわりに
「プルリクエスト時に差分ファイルの一覧を取得する」GitHub Actionsワークフローを作ってみました。
更新予定のファイルに対してプルリクエスト上で何かチェックをしたいときに役立つと思います。