sqlcをCI/CDで使用する
プロジェクトに複数の開発者がいる場合、CI/CDパイプラインの一部としてsqlc
を実行することをお勧めします。実行したい4つのサブコマンドはdiff
、vet
、verify
、push
です。
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 diff
、sqlc vet
、sqlc 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