Appearance
一键发布全栈产品:连接 Stripe、Supabase 与 Vercel
解决全栈发布割裂问题:通过单条命令或脚本,自动编排 Stripe 计费更新、Supabase 数据库迁移与 Vercel 前端部署,并在发布后进行健康检查与公告通知。
为什么需要这个技能
现代全栈项目常涉及三个核心环节:向 Stripe 创建价格或更新产品配置、向 Supabase 运行数据库迁移脚本、将新代码部署至 Vercel。以往需手动登录各个平台操作,不仅效率低下,还容易遗漏顺序(如先更新 DB 再部署前端)。
本技能利用 Composio CLI 将上述分散的工具连接成线,确保发布流程的原子性与顺序正确性,适合需要频繁迭代全栈产品的团队。
适用场景
- 全栈产品发布:同步更新账单逻辑、数据库结构与新版本前端代码。
- 紧急热点修复:快速推进修复构建到生产环境,并立即验证功能正常。
- 自动化日常发布:配合 CI/CD 管道,在代码合并后自动触发带验证的发布序列。
核心工作流
环境初始化
首先确保本地已安装 Composio CLI 并完成账号链接。连接必须包含 Stripe、Supabase 和 Vercel,建议额外链接 Slack 用于发布公告。
bash
curl -fsSL https://composio.dev/install | bash
composio login
composio link stripe
composio link supabase
composio link vercel
composio link slack # 用于发布通知发现可用工具
确认各平台支持的 Slug 名称,以便在后续脚本中调用:
bash
composio search "create price" --toolkits stripe
composio search "apply migration" --toolkits supabase
composio search "create deployment" --toolkits vercel执行发布步骤
发布顺序至关重要:Stripe 调整 → Supabase 迁移 → Vercel 部署 → 验证健康 → Slack 通知。
1. Stripe:创建或更新价格
定义新的订阅价格或更新现有产品配置:
bash
composio execute STRIPE_CREATE_PRICE -d '{
"product":"prod_abc123",
"unit_amount":2900,
"currency":"usd",
"recurring":{"interval":"month"},
"lookup_key":"team-plan-v2"
}'2. Supabase:应用迁移
执行数据库结构的变更,随后运行校验查询:
bash
composio execute SUPABASE_APPLY_MIGRATION -d '{
"project_id":"abcxyz",
"name":"add_team_tier_column",
"query":"alter table teams add column tier text default '\''free'\'';"
}'验证字段是否成功添加:
bash
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:触发部署并轮询状态
向 Vercel 推送新代码并等待部署完成:
bash
# Trigger a production deployment from a git ref
composio execute VERCEL_CREATE_A_NEW_DEPLOYMENT -d '{
"name":"web",
"target":"production",
"gitSource":{"type":"github","ref":"main","repoId":123456}
}'轮询部署状态直到准备就绪:
bash
composio execute VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL -d '{"idOrUrl":"dpl_xxx"}' \
| jq '.readyState'4. 验证与通知
检查应用健康状态及数据库数据完整性,最后发送 Slack 通知:
bash
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;"
}'bash
composio execute SLACK_SEND_MESSAGE -d '{
"channel":"releases",
"text":"✅ Team Plan v2 shipped. Stripe price `team-plan-v2` live, Supabase migration applied, Vercel production promoted."
}'作为工作流文件运行
为便于复用,可将上述逻辑封装为 scripts/ship.ts。通过 composio run 配合参数指定分支:
ts
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. Wait for ready
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 deploy failed");
// 5. Announce
await execute("SLACK_SEND_MESSAGE", {
channel: "releases",
text: `✅ Shipped ${ref}. Stripe price ${price.id}, Vercel ${dep.url}.`
});回滚与排错
若验证失败,需按反向顺序撤销:先在 Vercel 回滚部署,再应用数据库反向迁移,最后在 Stripe 停用新价格(注意不可删除对象)。常见问题包括缓存导致的订单错乱或迁移锁导致的挂起,可通过检查 pg_stat_activity 或构建日志排查。
下载 deploy-pipeline 中文版 Skill ZIP
你可能还需要
暂无推荐