본문으로 건너뛰기
cccskills
무료GitHub에 공개

deploy-pipeline

Coordinate end-to-end deployments across Stripe, Supabase, and Vercel using the Composio CLI. Update pricing, apply database migrations, deploy frontend, verify changes, and announce releases from a single script.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md9.1 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Deploy Pipeline (Stripe / Supabase / Vercel)

Use This Skill When

  • Full-stack product launch touching billing, database, and frontend
  • Promoting a preview build to production with Stripe price updates and Supabase migrations
  • Weekly release trains requiring repeatable, reliable deploy sequences
  • Coordinating changes across multiple external services in strict order
  • Need post-deploy verification and automated release announcements

When NOT to Use

  • Single-service deployments (use Vercel/Stripe/Supabase UIs)
  • Manual, one-off changes without automation
  • Deployments requiring complex approval workflows
  • Services not integrated via Composio (unsupported platforms)

Context: Pipeline Automation Maturity

Undeveloped: Manual steps across Stripe, Supabase, Vercel; no coordination; error-prone ordering.

Target: Composio CLI orchestration of Stripe → Supabase → Vercel in correct sequence with basic verification.

Optimized: Automated pipeline with rollback strategies, feature flags, comprehensive post-deploy checks, scheduled releases.

Core Principle

Order matters for full-stack releases. Stripe → Supabase → Vercel ensures billing changes precede database migrations, and migrations precede frontend deployment. One coordinated script prevents cascading failures.

Instructions

Step 1: Install and Link Services

Install Composio CLI:

curl -fsSL https://composio.dev/install | bash
composio login

Link all three services:

composio link stripe
composio link supabase
composio link vercel
composio link slack        # For release announcements

Step 2: Discover and Verify Actions

Search available actions:

ServiceDiscovery Command
Stripecomposio search "create price" --toolkits stripe
Supabasecomposio search "apply migration" --toolkits supabase
Vercelcomposio search "create deployment" --toolkits vercel

Common action slugs:

STRIPE_CREATE_PRODUCT, STRIPE_CREATE_PRICE, STRIPE_UPDATE_PRODUCT
SUPABASE_LIST_PROJECTS, SUPABASE_RUN_SQL_QUERY, SUPABASE_APPLY_MIGRATION
VERCEL_CREATE_A_NEW_DEPLOYMENT, VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL, VERCEL_PROMOTE_DEPLOYMENT

Verify schemas:

composio tools get-schema STRIPE_CREATE_PRICE
composio tools get-schema SUPABASE_APPLY_MIGRATION
composio tools get-schema VERCEL_CREATE_A_NEW_DEPLOYMENT

Step 3: Execute Stripe Actions (Pricing & Products)

Create new price:

composio execute STRIPE_CREATE_PRICE -d '{
  "product": "prod_abc123",
  "unit_amount": 2900,
  "currency": "usd",
  "recurring": { "interval": "month" },
  "lookup_key": "team-plan-v2"
}'

Update product metadata:

composio execute STRIPE_UPDATE_PRODUCT -d '{
  "id": "prod_abc123",
  "name": "Team Plan v2",
  "description": "Enhanced team collaboration features"
}'

List and verify prices:

composio execute STRIPE_LIST_PRICES -d '{
  "product": "prod_abc123",
  "limit": 10
}' | jq '.data[] | {id, lookup_key, unit_amount}'

Step 4: Execute Supabase Actions (Database Migrations)

Apply database migration:

composio execute SUPABASE_APPLY_MIGRATION -d '{
  "project_id": "abcxyz",
  "name": "add_team_tier_column",
  "query": "ALTER TABLE teams ADD COLUMN tier TEXT DEFAULT '"'"'free'"'"';"
}'

Verify schema changes:

composio execute SUPABASE_RUN_SQL_QUERY -d '{
  "project_id": "abcxyz",
  "query": "SELECT column_name FROM information_schema.columns WHERE table_name='"'"'teams'"'"' AND column_name='"'"'tier'"'"';"
}'

Check for data issues:

composio execute SUPABASE_RUN_SQL_QUERY -d '{
  "project_id": "abcxyz",
  "query": "SELECT COUNT(*) FROM teams WHERE tier IS NULL;"
}'

Step 5: Execute Vercel Actions (Frontend Deployment)

Create production deployment:

composio execute VERCEL_CREATE_A_NEW_DEPLOYMENT -d '{
  "name": "web",
  "target": "production",
  "gitSource": {
    "type": "github",
    "ref": "main",
    "repoId": 123456
  }
}'

Poll deployment status:

composio execute VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL -d '{
  "idOrUrl": "dpl_xxx"
}' | jq '.readyState'

Wait for ready state (shell loop):

DEPLOYMENT_ID="dpl_xxx"
while true; do
  STATE=$(composio execute VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL -d "{\"idOrUrl\":\"$DEPLOYMENT_ID\"}" | jq -r '.readyState')
  [ "$STATE" = "READY" ] && break
  [ "$STATE" = "ERROR" ] && exit 1
  sleep 4
done

Step 6: Post-Deployment Verification

Health check:

curl -fsS https://app.acme.com/api/health || exit 1

Database verification:

composio execute SUPABASE_RUN_SQL_QUERY -d '{
  "project_id": "abcxyz",
  "query": "SELECT COUNT(*) as total, COUNT(CASE WHEN tier IS NOT NULL THEN 1 END) as migrated FROM teams;"
}'

Stripe verification:

composio execute STRIPE_LIST_PRICES -d '{
  "product": "prod_abc123",
  "active": true
}' | jq '.data[].lookup_key'

Step 7: Automate with Workflow File

Create scripts/ship.ts:

const ref = process.argv[process.argv.indexOf("--ref") + 1] ?? "main";
const channel = process.argv[process.argv.indexOf("--channel") + 1] ?? "releases";

try {
  // Step 1: Stripe - Create price
  const price = await execute("STRIPE_CREATE_PRICE", {
    product: "prod_abc123",
    unit_amount: 2900,
    currency: "usd",
    recurring: { interval: "month" },
    lookup_key: "team-plan-v2"
  });
  console.log(`✓ Stripe price created: ${price.id}`);

  // Step 2: Supabase - Apply migration
  await execute("SUPABASE_APPLY_MIGRATION", {
    project_id: "abcxyz",
    name: "add_team_tier_column",
    query: "ALTER TABLE teams ADD COLUMN tier TEXT DEFAULT 'free';"
  });
  console.log(`✓ Supabase migration applied`);

  // Step 3: Vercel - Create deployment
  const dep = await execute("VERCEL_CREATE_A_NEW_DEPLOYMENT", {
    name: "web",
    target: "production",
    gitSource: { type: "github", ref, repoId: 123456 }
  });
  console.log(`✓ Vercel deployment created: ${dep.id}`);

  // Step 4: Wait for Vercel ready
  let state = "QUEUED";
  let attempts = 0;
  while (state !== "READY" && state !== "ERROR" && attempts < 60) {
    await new Promise(r => setTimeout(r, 4000));
    const d = await execute("VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL", { idOrUrl: dep.id });
    state = d.readyState;
    attempts++;
  }
  if (state !== "READY") throw new Error(`Vercel deploy failed: ${state}`);
  console.log(`✓ Vercel deployment ready`);

  // Step 5: Announce
  await execute("SLACK_SEND_MESSAGE", {
    channel,
    text: `✅ *Production Release* — Ref: \`${ref}\`\nStripe: ${price.id}\nVercel: ${dep.url}`
  });
  console.log(`✓ Release announced on #${channel}`);

} catch (error) {
  console.error(`✗ Pipeline failed: ${error.message}`);
  await execute("SLACK_SEND_MESSAGE", {
    channel,
    text: `❌ *Release Failed* — ${error.message}`
  });
  throw error;
}

Run the workflow:

composio run --file scripts/ship.ts -- --ref main --channel releases

Step 8: Rollback Strategy

If verification fails, undo in reverse order:

  1. Vercel: Promote previous deployment

    composio execute VERCEL_PROMOTE_DEPLOYMENT -d '{
      "deploymentId": "dpl_previous"
    }'
    
  2. Supabase: Apply down migration

    composio execute SUPABASE_APPLY_MIGRATION -d '{
      "project_id": "abcxyz",
      "name": "rollback_add_team_tier_column",
      "query": "ALTER TABLE teams DROP COLUMN tier;"
    }'
    
  3. Stripe: Hide new price (don't delete)

    composio execute STRIPE_UPDATE_PRODUCT -d '{
      "id": "prod_abc123",
      "metadata": { "rollback": "true" }
    }'
    
  4. Announce rollback

    composio execute SLACK_SEND_MESSAGE -d '{
      "channel": "releases",
      "text": "⚠️ Release rolled back due to verification failure"
    }'
    

Troubleshooting

IssueSolution
Stripe price visible but old price in checkoutCache issue on app side; verify lookup_key matches what checkout fetches
Supabase migration hangsAnother connection holds a lock; check: SELECT pid, state FROM pg_stat_activity WHERE state <> 'idle';
Vercel deployment stuck in QUEUEDCheck build logs; verify git ref exists and permissions are set
Frontend reads column before migration appliesNever parallelize; always serialize Stripe → Supabase → Vercel
Rollback partially failedCheck Slack history for last successful state; manually verify each service

Output

Deliver:

  1. Deployment IDs and timestamps for each service
  2. Verification results (health checks, data counts)
  3. Slack announcement with links to deployments
  4. Rollback reference if needed for quick recovery

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Automate 21risk tasks via Rube MCP (Composio). Always search tools first for current schemas.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

manu14357/zskills162026년 7월 24일 업데이트

Automate 2chat tasks via Rube MCP (Composio). Always search tools first for current schemas.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

manu14357/zskills162026년 7월 24일 업데이트

Automate Ably tasks via Rube MCP (Composio). Always search tools first for current schemas.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

manu14357/zskills162026년 7월 24일 업데이트

Automate Abstract tasks via Rube MCP (Composio). Always search tools first for current schemas.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

manu14357/zskills162026년 7월 24일 업데이트

Automate Abuselpdb tasks via Rube MCP (Composio). Always search tools first for current schemas.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

manu14357/zskills162026년 7월 24일 업데이트

Automate Abyssale tasks via Rube MCP (Composio). Always search tools first for current schemas.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

manu14357/zskills162026년 7월 24일 업데이트

manu14357의 스킬 모두 보기

이 스킬의 문제 신고