🍑

github actions上でコミットする

2024/09/26に公開

はじめに

github actions上でchangesetlintを走らせ、その変更内容をコミットしたい場合があると思います。今回は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も用意されているので、そちらを利用したほうがよさそうです。
https://github.com/changesets/action

リポジトリのSettings → Actions → GeneralWorkflow permissionsのセクションでワークフローの権限設定ができます。デフォルトではRead権限のみになっており、Read and write permissionsのほうにチェックを入れると書き込み権限を付与することができます。
ただし、この方法だと、contents: write以外の書き込み権限も付与されるため、こちらの設定は使用しないほうがよいと思います。

workflow-permissions

今回検証に利用したリポジトリ

https://github.com/108yen/changeset/tree/a6fe93e94941cd7ab76efb2c6753f7553df6ce17

GitHubで編集を提案

Discussion