tblsによるデータベースドキュメントの更新をGitHub Actionsで自動化してみる

tblsという非常に便利なデータベースドキュメント生成ツールがあり、よく利用させてもらっている。「tbls is 何?」という人は各自で調べてみてほしい。

github.com

これまでドキュメントを更新するときは、ローカルでtbls doc -fして、差分をpushしていた。しかし、これではドキュメントの更新し忘れが発生するため、自動化したいと思い、GitHub Actionsと組み合わせてみることにした。

name: ci

on: push

jobs:
  test:
    runs-on: ubuntu-latest

    services:
      database:
        image: mysql:5.7
        ports:
          - 3306:3306
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
          MYSQL_DATABASE: "testdb"
        options: --health-cmd "mysqladmin ping -h localhost" --health-interval 10s --health-timeout 5s --health-retries 5

    steps:
      - uses: actions/checkout@v2

      - name: setup git
        run: |
          git config --local user.email "メールアドレス"
          git config --local user.name "ユーザー名"

      - name: setup db
        run: |
          mysql -uroot -h127.0.0.1 -P3306 testdb < schema.sql

      - name: tbls
        run: |
          curl -sL https://git.io/use-tbls > /tmp/use-tbls.tmp && . /tmp/use-tbls.tmp
          tbls diff || (tbls doc -f && git add . && git commit -m 'auto commit' && git push)

こんな感じ。メインの処理は下2行のみ。公式のREADMEに書いてあるような方法でtblsコマンドを使える状態にし、tbls diffで差分が出ていればドキュメントを再生成してコミットとプッシュをするようにしている。

やっている事自体はとてもシンプルなんだけど、このような自動化によってドキュメントの更新し忘れを防ぐことができるので便利。

今回はtblsについての話だったが、例えば、フォーマッター関連処理も同じような感じで自動化しても良いかもしれない。