🤖

Github Actionsによるprotoファイル整形とコミットを自動化

2023/04/30に公開

初めに

参考文献で紹介させていただいている「Github ActionsによるPythonのコード整形とコミットを自動化」を読みまして、簡単に記載していることを書きます。

Github Actionsでコード整形、コミットの自動化には2種類紹介してくれています。

  • push されたときに自動でコードを整形 & コミットを行う

こちらはmasterブランチのコミットログを汚したくない方にお勧めの方法です。

  • Pull Request がクローズされた時に自動でコードを整形 & コミットを行う

こちらはmasterブランチのコミットログは汚れても良いのでとにかく楽がしたい人におすすめです。

個人的にはmasterブランチのコミットログは汚したくないため、「pushされたときに自動でコードを整形 & コミット」を行うにしようとしましたが、新たな悩みが浮上しました。

pushしたときに自動でコードを整形 & コミットしてしまうと次にコミットするときにgit pullをしてからコミットしないといけないということになってしまいます。あまり、気にしない人はいいですが、私の場合はよく小さなミスを残したままpushしてしまうことがあるので、そのたびにgit pullしていると開発体験がよくないです。

そのため、マージする前に整形と考えました。

Pull Requestのコメントに/formatを入力するとコードを整形 & コミットを行う

こちらは先ほどのメリット・デメリットを感じずにやることができます。
メリットは/formatと入力しないとコード整形されないのでPRのコミットログも増えず、わざわざgit pullしなくてもコード修正が可能です。

デメリットを強いてあげるならば、フォーマットせずにマージしてしまうことだと思います。

これは致命的な気がするので、どこかで「/formatが入力されていない」または、「Github Actionsによるコミットがされていない」とマージできないようにしたほうがいいかもしれません。

以下にbufを用いたprotoファイルの整形のGithub Actionsのworkflowのyamlファイルを記載しておきます。

on:
  issue_comment:
    types:
      - created

jobs:
  formatter:
    name: formatter
    if: ${{ github.event.issue.pull_request }} && startsWith(github.event.comment.body, '/format')
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - name: get upstream branch
        id: upstreambranch
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          echo "branch=$(curl -H "Authorization: token ${GITHUB_TOKEN}" ${{ github.event.issue.pull_request.url }} | jq '.head.ref' | sed 's/\"//g')" >> $GITHUB_OUTPUT
      - uses: actions/checkout@v3
        with: 
          ref: ${{ steps.upstreambranch.outputs.branch }}
      - name: setup buf
        uses: bufbuild/buf-setup-action@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
      - name: format
        run: buf format -w
      - name: commit
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: Apply Code Formatter Change
          ref: ${{ steps.upstreambranch.outputs.branch }}

終わりに

Github Actionsを使用したコード整形とコミットの自動化の方法を調べ、その中で新たな改善点があるのではないかと思ってその一例としてコメントを認識して整形するといった方法を紹介しました。
他にもいい方法があれば教えていただけると幸いです。

参考文献

Github ActionsによるPythonのコード整形とコミットを自動化

Discussion