🦁

Github Actionsでgolangのcode formatを自動化したのでメモ

2023/04/24に公開

やったこと

Golang で PR オープン時と Push 時にコード整形してコミットを追加することを Github Actions で自動化しました。

動機はなんとなくです。

Github Actions の設定

Github Actions の設定は以下のようになっています

name: Format code
on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  formatter:
    name: formatter
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./app
    steps:
      - name: checkout
        uses: actions/checkout@v3
        with:
          ref: ${{ github.head_ref }}
      - name: set up go
        uses: actions/setup-go@v4
        with:
          go-version: ">=1.17"
      - name: Install goimports
        run: go install golang.org/x/tools/cmd/goimports@latest
      - name: Format code
        run: goimports -w .
      - name: Auto commit
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: "Apply Code formatter changes"

軽く中身を見ていく

主に steps について触れていきます

チェックアウト

steps:
  - name: checkout
    uses: actions/checkout@v3
    with:
      ref: ${{ github.head_ref }}

この部分ではpull requestHEAD ブランチにチェックアウトしています。
nameはタスク名を定義できます。
actions/checkoutはジョブで利用しているリポジトリのチェックアウトするときに使用できるアクションです。
usesでアクションを実行できます。
withキーワードはアクションに対して設定を入力できます。
${{ github.head_ref }}は Pull Request イベントで{HEAD_BRANCH_NAME}が取得できます。
ここではワークフローを実行するブランチをさしています。

golang のセットアップ

- name: set up go
  uses: actions/setup-go@v4
  with:
    go-version: ">=1.17"

この部分では golang の実行環境を用意しています。
actions/set-up-goでセットアップを行っています。
go-versionは今回は適当に>=1.17としていますが、go.modからバージョン取得できるみたいなので、そちらにした方がいいかもなと思っています。

goimports のインストール

- name: Install goimports
  run: go install golang.org/x/tools/cmd/goimports@latest

この部分ではgoimportsをインストールしています。
Go 言語の準標準パッケージ(サブレポジトリ)である Go Tools に内包されている静的解析ツールです。

goimports はおおまかにいうと下記のようなことをしてくれます。

  • 不要なパッケージの import を削除
  • 必要なパッケージの import を追加
  • gofmt のルールに沿ったコードのフォーマット

go コードの自動整形

- name: Format code
  run: goimports -w .

リポジトリ配下の.goファイルをフォーマットをして、変更があれば修正した内容で上書きするというものです(-wオプション)

変更差分をコミット

- name: Auto commit
  uses: stefanzweifel/git-auto-commit-action@v4
  with:
    commit_message: "Apply Code formatter changes"

GitHub Actions でコミットするためにstefanzweifel/git-auto-commit-actionアクションをつかってコミットします。
コミットメッセージをwithキーワードで指定しています。

以上で PR にコミットしたファイルを自動で整形する Actions の設定でした。

最後に

なんとなく個人開発でやっているので筆者にとっては恩恵は大きくはないですが、チーム開発などで設定するようにすれば少しはうれしいかも?
そもそもちゃんと linter を各自入れておけば済む話ではありますが。

当然ですが、goimports による差分が発生した場合はリモートブランチとローカルブランチで差分が発生するので pull を忘れないようにしましょう。

参考

こちらの記事が大変参考になりました。
https://zenn.dev/satto_sann/articles/36c68c73dc5125

GitHubで編集を提案

Discussion