はるさめ.dev

Github Actions と Supabase CLI でスキーマをデプロイ

投稿日:Sun Jun 23 2024 07:25:22 GMT+0000 (Coordinated Universal Time)

Supabase CLI でマイグレーションを管理していることを前提としています。
Prisma などを使用している場合は対象外です。

Supabase の準備

Github Actions からデプロイするためには、Project Reference ID と DB のパスワード、アクセストークンが必要です。

アクセスキーの払い出し

Supabase ダッシュボードトップ > サイドメニューの Access Tokensのページで Generate new tokenをクリックしてアクセストークンを生成する。

Project Reference ID

Supabase のダッシュボードトップ > 対象のプロジェクト > サイドメニューの Project Settings(歯車アイコン)> Generalのページで Reference ID をコピーする。

DB パスワード

パスワードはどこかに保管してあると思うのでそれを使用する。
忘れた場合は Supabase のダッシュボードトップ > 対象のプロジェクト > サイドメニューの Project Settings(歯車アイコン)> Databaseのページで Reset database password をクリックしてパスワードをリセットする。

Github Actions Secrets の準備

リポジトリの Settings > Secrets and variables > Actionsのページで New repository secret をクリックして新しいシークレットを登録する。

  • SUPABASE_ACCESS_TOKEN:アクセストークン
  • SUPABASE_PROJECT_ID:Project Reference ID
  • SUPABASE_PASSWORD:DB パスワード

ワークフローの作成

.github > workflows > db-migration.yml を作成する。

main に push されるときに、マイグレーションファイルに変更があれば実行。
手動で実行したいこともあるので workflow_dispatch も指定。

name: DB マイグレーション

on:
  push:
    branches: [main]
    paths:
      - supabase/migrations/**
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  db-migration:
    timeout-minutes: 2
    runs-on: ubuntu-latest
    env:
      SUPABASE_PROJECT_ID: ${{ secrets.SUPABASE_PROJECT_ID }}
      SUPABASE_DB_PASSWORD: ${{ secrets.SUPABASE_PASSWORD }}
      SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}

    steps:
      - name: チェックアウト
        uses: actions/checkout@v4

      - name: Supabase CLI セットアップ
        uses: supabase/setup-cli@v1

      - name: Supabase Link
        run: supabase link --project-ref $SUPABASE_PROJECT_ID

      - name: マイグレーション
        run: supabase db push

参考

Supabase CLI | supabase DOCS