sqlcをCI/CDで使用する

プロジェクトに複数の開発者がいる場合、CI/CDパイプラインの一部としてsqlcを実行することをお勧めします。実行したい4つのサブコマンドはdiffvetverifypushです。

sqlc diffは、生成されたコードが最新であることを確認します。プロジェクトの新しい開発者は、クエリを追加したりスキーマを更新した後にsqlc generateを実行することを忘れる場合があります。また、生成されたコードを編集する場合もあります。sqlc diffは、sqlc generateからの期待される出力とディスク上にあるものを比較することで、両方のエラーをキャッチします。

% sqlc diff
--- a/postgresql/query.sql.go
+++ b/postgresql/query.sql.go
@@ -55,7 +55,7 @@

 const listAuthors = `-- name: ListAuthors :many
 SELECT id, name, bio FROM authors
-ORDER BY name
+ORDER BY bio
 `

sqlc vetは、SQLクエリに対してリントルールのセットを実行します。これらのルールは、アンチパターンが本番環境に入る前にキャッチするのに役立ちます。プロジェクトにリントルールを追加する完全なガイドについては、vetドキュメントを参照してください。

sqlc verifyは、スキーマの変更が本番環境を壊さないことを確認します。既存のクエリは、正確性について新しいスキーマの変更に対してチェックされます。完全なガイドについては、verifyドキュメントを参照してください。

sqlc pushは、データベーススキーマ、クエリ、設定をsqlc Cloudにプッシュします。これらのアーカイブは、データベーススキーマへの破壊的変更をキャッチするためにverifyによって使用されます。プロジェクトのアップロードについて詳しくはこちらをご覧ください。

一般的なセットアップ

推奨手順を使用してsqlcをインストールします。

sqlc diffsqlc vetsqlc verifyのためにパイプラインに3つのステップを作成します。mainブランチでのマージ後にsqlc pushを実行します。

GitHub Actions

sqlcをインストールするためのsetup-sqlc GitHub Actionを提供しています。このアクションは、インストールプロセスを高速化するために組み込みのtool-cacheを使用します。

diff

以下のGitHub Workflowの設定は、すべてのプッシュでsqlc diffを実行します。

name: sqlc
on: [push]
jobs:
  diff:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: sqlc-dev/setup-sqlc@v3
      with:
        sqlc-version: '1.29.0'
    - run: sqlc diff

vet

以下のGitHub Workflowの設定は、すべてのプッシュでsqlc vetを実行します。データベース接続なしでsqlc vetを使用できますが、sqlc設定が組み込みのsqlc/db-prepareリントルールを参照している場合は、データベース接続が必要です。

name: sqlc
on: [push]
jobs:
  vet:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: sqlc-dev/setup-sqlc@v3
      with:
        sqlc-version: '1.29.0'
    # PostgreSQLサーバーを開始
    - uses: sqlc-dev/action-setup-postgres@master
      with:
        postgres-version: "16"
      id: postgres
    - run: sqlc vet
      env:
        POSTGRESQL_SERVER_URI: ${{ steps.postgres.outputs.connection-uri }}?sslmode=disable

push

注意: プロジェクトのプッシュはsqlc Cloudによって提供されています。今すぐ無料でサインアップしてください。

以下のGitHub Workflowの設定は、mainへのすべてのプッシュで sqlc pushを実行します。ダッシュボード経由で認証トークンを作成してください。

name: sqlc
on: [push]
jobs:
  push:
    runs-on: ubuntu-latest
    if: ${{ github.ref == 'refs/heads/main' }}
    steps:
    - uses: actions/checkout@v3
    - uses: sqlc-dev/setup-sqlc@v3
      with:
        sqlc-version: '1.29.0'
    - run: sqlc push
      env:
        SQLC_AUTH_TOKEN: ${{ secrets.SQLC_AUTH_TOKEN }}

verify

注意: データベースマイグレーションの検証はsqlc Cloudによって提供されています。今すぐ無料でサインアップしてください。

name: sqlc
on: [push]
jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: sqlc-dev/setup-sqlc@v3
      with:
        sqlc-version: '1.29.0'
    - uses: sqlc-dev/action-setup-postgres@master
      with:
        postgres-version: "16"
      id: postgres
    - run: sqlc verify
      env:
        POSTGRESQL_SERVER_URI: ${{ steps.postgres.outputs.connection-uri }}?sslmode=disable
        SQLC_AUTH_TOKEN: ${{ secrets.SQLC_AUTH_TOKEN }}
  push:
    runs-on: ubuntu-latest
    if: ${{ github.ref == 'refs/heads/main' }}
    steps:
    - uses: sqlc-dev/setup-sqlc@v3
      with:
        sqlc-version: '1.29.0'
    - run: sqlc push
      env:
        SQLC_AUTH_TOKEN: ${{ secrets.SQLC_AUTH_TOKEN }}

原文:https://docs.sqlc.dev/en/latest/howto/ci-cd.html