CollabOps

Supabase

Supabase DB 마이그레이션, Edge Functions 배포

collabops/supabase-migration@v1

On-Premise: ❌ — Supabase SaaS 연결 필요

Supabase DB 마이그레이션을 실행합니다. 스키마 검증(lint) 후 마이그레이션을 적용합니다.

InputRequiredDefaultDescription
access-tokenYES-Supabase Access Token. $\{\{ secrets.SUPABASE_ACCESS_TOKEN \}\} 권장
project-refYES-Supabase 프로젝트 참조 ID
db-passwordYES-Supabase DB 비밀번호. $\{\{ secrets.SUPABASE_DB_PASSWORD \}\} 권장
lint-levelNO"warning"린트 실패 기준 (none, warning, error)
dry-runNO"false"미리보기 (적용 없이 확인만)

예시

기본 — staging 환경 마이그레이션

jobs:
  migrate:
    steps:
      - name: checkout
        uses: "collabops/checkout@v2"
        with:
          repo-url: "https://<collabops-host>/<workspace>/<repository>.git"
      - name: supabase-migrate
        uses: "collabops/supabase-migration@v1"
        with:
          access-token: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
          project-ref: ${{ secrets.SUPABASE_PROJECT_REF_STAGING }}
          db-password: ${{ secrets.SUPABASE_DB_PASSWORD_STAGING }}

PR 검증 — dry-run + error 수준

# Change Request 트리거 — supabase/migrations/ 변경에만 동작.
triggers:
  change_request:
    branches: [main]
    paths: ["supabase/migrations/**"]

jobs:
  migrate-preview:
    steps:
      - name: checkout
        uses: "collabops/checkout@v2"
        with:
          repo-url: "https://<collabops-host>/<workspace>/<repository>.git"
      - name: supabase-dry-run
        uses: "collabops/supabase-migration@v1"
        with:
          access-token: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
          project-ref: ${{ secrets.SUPABASE_PROJECT_REF_STAGING }}
          db-password: ${{ secrets.SUPABASE_DB_PASSWORD_STAGING }}
          # error 만 차단 — warning 으로는 PR 막지 않음.
          lint-level: error
          # 실제 적용하지 않고 검증만 수행.
          dry-run: "true"

포인트 — 환경(prod/staging) 마다 project-ref + db-password 를 별도 secret 으로 관리. PR 단계에서는 dry-run: "true" 로 lint + plan 만 — 실제 적용은 main 머지 후 별도 Job. lint-levelwarning|error — 어느 수준에서 PR 을 막을지 사전 합의.

collabops/supabase-functions-deploy@v1

On-Premise: ❌ — Supabase SaaS 연결 필요

Supabase Edge Functions를 배포합니다. 특정 함수 또는 전체 함수를 배포할 수 있습니다.

InputRequiredDefaultDescription
access-tokenYES-Supabase Access Token. $\{\{ secrets.SUPABASE_ACCESS_TOKEN \}\} 권장
project-refYES-Supabase 프로젝트 참조 ID
function-nameNO""배포할 함수 이름 (미지정 시 전체 배포)

예시

전체 Edge Functions 배포

jobs:
  deploy-functions:
    steps:
      - name: checkout
        uses: "collabops/checkout@v2"
        with:
          repo-url: "https://<collabops-host>/<workspace>/<repository>.git"
      # function-name 미지정 → supabase/functions/ 아래 전체 배포.
      - name: deploy-edge-functions
        uses: "collabops/supabase-functions-deploy@v1"
        with:
          access-token: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
          project-ref: ${{ secrets.SUPABASE_PROJECT_REF_PROD }}

특정 함수만 부분 배포

jobs:
  deploy-one:
    steps:
      - name: checkout
        uses: "collabops/checkout@v2"
        with:
          repo-url: "https://<collabops-host>/<workspace>/<repository>.git"
      - name: deploy-single-fn
        uses: "collabops/supabase-functions-deploy@v1"
        with:
          access-token: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
          project-ref: ${{ secrets.SUPABASE_PROJECT_REF_PROD }}
          # 핫픽스 등 단일 함수만 빠르게 배포할 때.
          function-name: send-webhook

포인트function-name 생략 시 supabase/functions/ 전체가 배포 대상. 환경 변수는 함수별 secret 으로 별도 관리 — 본 템플릿에서는 다루지 않음. 큰 변경은 위 마이그레이션 흐름과 분리해 별도 Job 으로 두는 것이 안전.

목차