Deploy Pipeline (Stripe / Supabase / Vercel)
Koordinieren Sie gestaffelte Releases über Stripe, Supabase und Vercel direkt von der Shell aus mit der Composio CLI. Ein einziges Skript startet die gesamte „Ship it“-Sequenz: Produkt-/Preisaktualisierungen, DB-Migrationen, Frontend-Deployment, Smoke-Tests und Changelog-Post.
Wann verwenden
- Full-Stack-Produkteinführung, die Abrechnung, Datenbank und Frontend gleichzeitig betrifft.
- Promotion eines Vorschau-Vercel-Builds in die Produktion mit einem Stripe-Preiswechsel und einer Supabase-Migration.
- Wöchentliche Release-Züge, bei denen sich dieselbe Sequenz wiederholt und zuverlässig sein soll.
Voraussetzungen
curl -fsSL https://composio.dev/install | bash
composio login
composio link stripe
composio link supabase
composio link vercel
composio link slack # für Release-Ankündigungen
Tools entdecken
composio search "create price" --toolkits stripe
composio search "apply migration" --toolkits supabase
composio search "create deployment" --toolkits vercel
composio tools list stripe
composio tools list supabase
composio tools list vercel
Häufige Slugs (mit --get-schema überprüfen):
Stripe
STRIPE_CREATE_PRODUCTSTRIPE_CREATE_PRICESTRIPE_UPDATE_PRODUCTSTRIPE_LIST_PRICES
Supabase
SUPABASE_LIST_PROJECTSSUPABASE_RUN_SQL_QUERYSUPABASE_LIST_MIGRATIONSSUPABASE_APPLY_MIGRATION
Vercel
VERCEL_CREATE_A_NEW_DEPLOYMENTVERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URLVERCEL_LIST_DEPLOYMENTSVERCEL_PROMOTE_DEPLOYMENT
Die Pipeline
Die Reihenfolge ist wichtig: Stripe → Supabase → Vercel → Verifizieren → Ankündigen. Abrechnungsänderungen vor der DB, DB vor dem Frontend.
1. Stripe: Preis erstellen oder aktualisieren
composio execute STRIPE_CREATE_PRICE -d '{
"product":"prod_abc123",
"unit_amount":2900,
"currency":"usd",
"recurring":{"interval":"month"},
"lookup_key":"team-plan-v2"
}'
2. Supabase: Migrationen anwenden
composio execute SUPABASE_APPLY_MIGRATION -d '{
"project_id":"abcxyz",
"name":"add_team_tier_column",
"query":"alter table teams add column tier text default '\''free'\'';"
}'
Schema nach der Migration überprüfen:
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'\'';"
}'
3. Vercel: Deployment auslösen + promoten
# Produktions-Deployment von einem Git-Ref auslösen
composio execute VERCEL_CREATE_A_NEW_DEPLOYMENT -d '{
"name":"web",
"target":"production",
"gitSource":{"type":"github","ref":"main","repoId":123456}
}'
Warten, bis es bereit ist:
composio execute VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL -d '{"idOrUrl":"dpl_xxx"}' \
| jq '.readyState'
4. Verifizieren
curl -fsS https://app.acme.com/api/health
composio execute SUPABASE_RUN_SQL_QUERY -d '{
"project_id":"abcxyz","query":"select count(*) from teams where tier is null;"
}'
5. Ankündigen
composio execute SLACK_SEND_MESSAGE -d '{
"channel":"releases",
"text":"✅ Team Plan v2 ausgeliefert. Stripe-Preis `team-plan-v2` live, Supabase-Migration angewendet, Vercel-Produktion promoted."
}'
Pipeline als Workflow-Datei
scripts/ship.ts, ausführen mit composio run --file scripts/ship.ts -- --ref main:
const ref = process.argv[process.argv.indexOf("--ref") + 1] ?? "main";
// 1. Stripe
const price = await execute("STRIPE_CREATE_PRICE", {
product: "prod_abc123", unit_amount: 2900, currency: "usd",
recurring: { interval: "month" }, lookup_key: "team-plan-v2"
});
// 2. Supabase
await execute("SUPABASE_APPLY_MIGRATION", {
project_id: "abcxyz",
name: "add_team_tier_column",
query: "alter table teams add column tier text default 'free';"
});
// 3. Vercel
const dep = await execute("VERCEL_CREATE_A_NEW_DEPLOYMENT", {
name: "web", target: "production",
gitSource: { type: "github", ref, repoId: 123456 }
});
// 4. Auf Bereitschaft warten
let state = "QUEUED";
while (state !== "READY" && state !== "ERROR") {
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;
}
if (state !== "READY") throw new Error("Vercel-Deployment fehlgeschlagen");
// 5. Ankündigen
await execute("SLACK_SEND_MESSAGE", {
channel: "releases",
text: `✅ ${ref} ausgeliefert. Stripe-Preis ${price.id}, Vercel ${dep.url}.`
});
Rollback-Plan
Falls die Verifikation fehlschlägt, in umgekehrter Reihenfolge rückgängig machen:
- Vercel:
VERCEL_PROMOTE_DEPLOYMENTauf die vorherige Deployment-ID. - Supabase: die Down-Migration anwenden (immer das zugehörige
down.sqlvor dem Ausliefern schreiben). - Stripe:
STRIPE_UPDATE_PRODUCT, um den neuen Preis zu verstecken (active:false); nicht löschen – Stripe-Objekte sind in der Praxis unveränderlich und beeinflussen historische Rechnungen. - Slack: Rollback ankündigen.
Fehlerbehebung
- Stripe-Preis sichtbar, aber Checkout zeigt noch alten → Cache auf Ihrer App-Seite; prüfen, ob der
lookup_keydem entspricht, was der Checkout abruft. - Supabase-Migration hängt → Eine andere Verbindung hält eine Sperre; führen Sie
select pid, state, query from pg_stat_activity where state <> 'idle';aus. - Vercel-Deployment bleibt in
QUEUED→ Build-Logs überVERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URLmit?logs=1prüfen. - Reihenfolge-Fehler (Frontend liest eine Spalte, bevor die Migration angewendet wird) → Pipeline immer serialisieren; niemals
--parallelüber Stripe/Supabase/Vercel verwenden.
Vollständige CLI-Referenz: docs.composio.dev/docs/cli