🍑
github actions上でコミットする
はじめに
github actions上でchangeset
やlint
を走らせ、その変更内容をコミットしたい場合があると思います。今回はchangeset
で実施してみたので、その内容を記録として残します。
workflowの実装
特にgithubの設定を変える必要はなく、workflowのyaml上で完結できます。ポイントはpermissions
を設定していることで、contents: write
を指定することで、このjobにコミットを許可しています。
.github/workflows/version.yml
name: Version
on:
push:
branches:
- main
concurrency: ${{ github.workflow }}-${{ github.ref }}
jobs:
version:
name: Version
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
# pnpmのセットアップ
# npmやyarnを使用する場合は変更してください
- name: Setup PNPM
uses: pnpm/action-setup@v3.0.0
with:
version: 8 # package.jsonでバージョン指定している場合は不要
# nodeのセットアップ
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
# コミット+プッシュするので、そのためのgitのユーザー設定
# xxx@example.comとuserは自分のものに書き換えてください
- name: Setup Git user
shell: bash
run: |
git config --global user.email "xxx@example.com"
git config --global user.name "user"
# パッケージのインストール
# npmやyarnを使用する場合は変更してください
- name: Install dependencies
run: pnpm install
# 変更、コミット、プッシュ
# changesetを実行して、その変更内容をgit add .でステージし、
# 変更があれば、コミット+プッシュを実行しています
- name: Version Update
run: |
pnpm changeset version
git add .
git diff --staged --exit-code || (git commit -m 'ci(changelog): update version' && git push)
補足
手動で設定してみましたが、changesetはgithub actionsも用意されているので、そちらを利用したほうがよさそうです。
リポジトリのSettings → Actions → General
のWorkflow permissions
のセクションでワークフローの権限設定ができます。デフォルトではRead権限のみになっており、Read and write permissions
のほうにチェックを入れると書き込み権限を付与することができます。
ただし、この方法だと、contents: write
以外の書き込み権限も付与されるため、こちらの設定は使用しないほうがよいと思います。
今回検証に利用したリポジトリ
Discussion