Home/Git & GitHub/deploy-agent

deploy-agent

Unbound
Git & GitHub

Multi-step deployment agent for full-stack apps.

SKILL.md

# deploy-agent Deploy full-stack applications via a multi-step workflow with human approval at each stage. ## Quick Start ```bash # Install via ClawdHub clawdhub install deploy-agent # Initialize a new deployment deploy-agent init my-app # Check status deploy-agent status my-app # Continue through steps deploy-agent continue my-app ``` ## Workflow Steps | Step | Command | Description | Requires Approval | |------|---------|-------------|-------------------| | 1 | `deploy-agent init <name>` | Start deployment | āœ… Design phase | | 2 | `deploy-agent build <name>` | Build app | āœ… Before testing | | 3 | `deploy-agent test <name>` | Test locally | āœ… Before GitHub | | 4 | `deploy-agent push <name>` | Push to GitHub | āœ… Before Cloudflare | | 5 | `deploy-agent deploy <name>` | Deploy to Cloudflare | āœ… Final | ## Commands ### Initialize Deployment ```bash deploy-agent init my-app ``` Creates a new deployment state and waits for design input. ### Check Status ```bash deploy-agent status my-app ``` Shows current step, approvals, and deployment info. ### Continue ```bash deploy-agent continue my-app ``` Get guidance on what to do next in the current step. ### Build (Step 2) ```bash deploy-agent build my-app ``` After designing with C.R.A.B, run this to build the app. ### Test (Step 3) ```bash deploy-agent test my-app ``` Verify the app is running locally before pushing. ### Push to GitHub (Step 4) ```bash deploy-agent push my-app [repo-name] ``` Creates GitHub repo and pushes code. Default repo name = app name. ### Deploy to Cloudflare (Step 5) ```bash deploy-agent deploy my-app [custom-domain] ``` Deploys to Cloudflare Pages. Default domain: `{name}.sheraj.org` ### Cancel ```bash deploy-agent cancel my-app ``` Aborts and cleans up the deployment. ### List ```bash deploy-agent list ``` Shows all active deployments. ## Example Session ```bash # Start new deployment $ deploy-agent init my-blog šŸš€ Deployment initialized: my-blog Step 1: Design your app with C.R.A.B # ... design phase with C.R.A.B ... $ deploy-agent build my-blog šŸš€ Build complete! Step 2: Local Testing Start dev server: cd my-blog && npm run dev # ... test locally ... $ deploy-agent push my-blog šŸš€ GitHub repository ready! Say 'deploy-agent deploy my-blog' to deploy to Cloudflare $ deploy-agent deploy my-blog my-blog.sheraj.org šŸŽ‰ Deployment complete! App live at: https://my-blog.sheraj.org ``` ## State Management State stored in: `~/.clawdbot/skills/deploy-agent/state/{deployment-name}.json` ```json { "name": "my-blog", "step": 5, "status": "deployed", "created_at": "2026-01-18T08:00:00Z", "repo_url": "https://github.com/user/my-blog", "domain": "https://my-blog.sheraj.org" } ``` ## Requirements | Tool | Purpose | |------|---------| | `gh` | GitHub repo creation and management | | `wrangler` | Cloudflare Pages deployment | | `git` | Version control | | `jq` | JSON parsing (for state management) | ## Configuration Cloudflare token should be configured in `~/.wrangler.toml`: ```toml [account] api_token = "your-cloudflare-token" ``` ## Notes - Each deployment is independent - State persists across sessions - Human approval required at each major step - Use "cancel" to abort anytime --- ## Next.js + Cloudflare D1 Deployment Guide This section covers common pitfalls and fixes for deploying Next.js apps with D1 on Cloudflare Pages. ### Pre-Deployment Checklist | Check | Command | Fix if Failed | |-------|---------|---------------| | Next.js version | `npm list next` | `npm install next@15.5.2` | | Package lock sync | `rm -rf node_modules package-lock.json && npm install` | Commit lock file | | Cloudflare adapter | `npm list @cloudflare/next-on-pages` | `npm install -D @cloudflare/next-on-pages` | | wrangler installed | `npm list wrangler` | `npm install -D wrangler` | ### Required Configuration **1. package.json** ```json { "dependencies": { "next": "15.5.2", "react": "^18.3.1", "react-dom": "^18.3.1" }, "devDependencies": { "@cloudflare/next-on-pages": "^1.13.16", "wrangler": "^4.x" } } ``` **2. wrangler.toml** ```toml name = "my-app" compatibility_date = "2026-01-18" compatibility_flags = ["nodejs_compat"] [[d1_databases]] binding = "DB" database_name = "my-db" database_id = "your-db-id" ``` **3. API Routes (each file)** ```typescript import { getRequestContext } from '@cloudflare/next-on-pages'; export const runtime = 'edge'; export async function GET() { const { env } = getRequestContext(); const { results } = await env.DB.prepare("SELECT * FROM tasks").all(); return Response.json({ data: results }); } ``` ### Cloudflare Pages Build Settings | Setting | Value | |---------|-------| | Build command | `npx @cloudflare/next-on-pages` | | Output directory | `.vercel/output/static` | | Functions | Enable (for D1 API routes) | ### Common Issues & Fixes | Issue | Error | Fix | |-------|-------|-----| | Lock file mismatch | `npm ci can only install packages when your package.json and package-lock.json are in sync` | `rm -rf node_modules package-lock.json && npm install && git add package-lock.json` | | Next.js version | `peer next@">=14.3.0 && <=15.5.2"` from @cloudflare/next-on-pages | Downgrade to `next: "15.5.2"` | | API routes not edge | `The following routes were not configured to run with the Edge Runtime` | Add `export const runtime = 'edge';` | | D1 access pattern | Using `context.env.DB` | Use `getRequestContext().env.DB` | | Missing types | TypeScript errors for D1 bindings | Create `env.d.ts` with CloudflareEnv interface | ### CSS Fix (Scrollbar Flicker) ```css html { overflow-x: hidden; scrollbar-gutter: stable; } body { overflow-x: hidden; } ``` ### Post-Deployment 1. Cloudflare Dashboard → Settings → Functions 2. Add D1 binding: Variable name `DB` → Select your database ### Reference Documents - Full guide: `docs/issues/nextjs-cloudflare-d1-deployment.md` - Cloudflare docs: https://developers.cloudflare.com/pages/framework-guides/nextjs/

More in Git & GitHub