Files
wehub-resource-sync 3a28426bf4
Lint and Format Check / lint-and-format (push) Failing after 0s
Check Migrations / Check for duplicate migration numbers (push) Failing after 1s
CI Pre-merge Check / CI Pre-merge Check (push) Failing after 2m17s
chore: import upstream snapshot with attribution
2026-07-13 12:23:40 +08:00

170 lines
6.4 KiB
Markdown

# InsForge Deployment - Agent Documentation
## Overview
Deploy frontend applications to InsForge with the `create-deployment` MCP tool. The tool uploads the source directory through InsForge's direct deployment flow, starts a Vercel-backed production build, and records the result in `deployments.runs`.
Use the source directory, not a pre-built artifact directory. The backend validates the manifest, streams each file to the provider, verifies file size and SHA-1 digest, then starts the deployment after all files are uploaded.
The REST API still supports the legacy source-zip flow for older clients. Do not use it from agents unless the direct MCP tool is unavailable.
## Deploy With MCP
Call `create-deployment` with:
| Parameter | Required | Description |
|-----------|----------|-------------|
| `sourceDirectory` | Yes | Absolute path to the app source directory, for example `/Users/me/project/frontend`. |
| `projectSettings.buildCommand` | No | Build command, for example `npm run build`. Omit to use provider defaults. |
| `projectSettings.outputDirectory` | No | Static output directory, for example `dist` or `build`. |
| `projectSettings.installCommand` | No | Install command, for example `npm install` or `pnpm install`. |
| `projectSettings.devCommand` | No | Development command metadata for framework-aware builds. |
| `projectSettings.rootDirectory` | No | Root directory inside the uploaded source tree. |
| `envVars` | No | Array of `{ "key": "...", "value": "..." }` variables to create or update before build. |
| `meta` | No | String key-value metadata for provider deployment creation. |
Example:
```json
{
"sourceDirectory": "/Users/me/project/frontend",
"projectSettings": {
"buildCommand": "npm run build",
"outputDirectory": "dist"
},
"envVars": [
{
"key": "VITE_INSFORGE_BASE_URL",
"value": "https://your-project.region.insforge.app"
},
{
"key": "VITE_INSFORGE_ANON_KEY",
"value": "your-anon-key"
}
],
"meta": {
"source": "agent"
}
}
```
Important:
- `sourceDirectory` must be an absolute path.
- Upload app source files, not only `dist`, unless the project is intentionally a plain static site.
- Include framework files needed by Vercel, such as `package.json`, lock file, framework config, and `vercel.json` when needed.
- Prefix browser-exposed variables correctly, for example `VITE_` for Vite and `NEXT_PUBLIC_` for Next.js.
- Do not put service-role keys, admin tokens, or private provider keys in browser-exposed variables.
- Tailwind projects should stay on Tailwind CSS 3.4 unless the app already supports v4.
## What The Tool Does
The current deployment path maps to these backend steps:
1. Register a direct upload manifest in `POST /api/deployments/direct`.
2. Upload each file with `PUT /api/deployments/:id/files/:fileId/content`.
3. Start the provider build with `POST /api/deployments/:id/start`.
4. Poll or sync status until the run reaches `READY`, `ERROR`, or `CANCELED`.
The direct file upload endpoint requires `Content-Type: application/octet-stream`. The backend rejects missing files, size mismatches, SHA mismatches, invalid relative paths, and attempts to start before every file has `uploaded_at`.
## Check Deployment Status
Use the Dashboard, MCP SQL tools, or the REST API. For SQL:
```sql
SELECT id, provider_deployment_id, status, url, metadata, created_at, updated_at
FROM deployments.runs
ORDER BY created_at DESC
LIMIT 5;
```
To inspect an interrupted direct upload:
```sql
SELECT file_path, size_bytes, uploaded_at
FROM deployments.files
WHERE deployment_id = '<deployment-id>'
ORDER BY file_path;
```
If a deployment has a provider ID but the status looks stale, sync it through the API:
```http
POST /api/deployments/<deployment-id>/sync
```
## Status Values
| Status | Description |
|--------|-------------|
| `WAITING` | Run exists and is waiting for source uploads. |
| `UPLOADING` | Source files are uploading or provider deployment creation is in progress. |
| `QUEUED` | Provider accepted the deployment and queued the build. |
| `BUILDING` | Provider is building the app. |
| `READY` | Deployment completed. The `url` column contains the live URL. |
| `ERROR` | Upload, build, provider, or webhook processing failed. |
| `CANCELED` | Deployment was canceled. |
## Get The Live URL
After status is `READY`, read the URL:
```sql
SELECT url
FROM deployments.runs
WHERE id = '<deployment-id>';
```
The Dashboard may show a friendlier domain when a custom `.insforge.site` slug or user-owned domain is configured.
## Environment Variables
You can pass `envVars` during deployment or manage them from the Dashboard. Deployment env vars are Vercel encrypted environment variables, not database rows.
Rules:
- Lists show keys and metadata only. Values are hidden unless a single variable is fetched for editing.
- Duplicate keys in one create-or-update request are rejected.
- Values are applied to `production`, `preview`, and `development` targets.
- Use public prefixes only for values that browser code may read.
## SPA Routing
For React, Vue, Svelte, or other single-page apps that need client-side routing, add `vercel.json` at the app root:
```json
{
"rewrites": [
{
"source": "/(.*)",
"destination": "/index.html"
}
]
}
```
Do not add this rewrite to frameworks that already own routing, such as Next.js.
## Common Failures
| Symptom | Check |
|---------|-------|
| Deployment service is not configured | Self-hosted backend needs `VERCEL_TOKEN`, `VERCEL_TEAM_ID`, and `VERCEL_PROJECT_ID`. |
| Upload fails with content type error | Direct file upload must use `application/octet-stream`. |
| Upload fails with size or SHA mismatch | Recompute the manifest from the exact bytes being uploaded. |
| Start fails before provider build | Query `deployments.files` and confirm every row has `uploaded_at`. |
| Build cannot find scripts | Confirm `package.json`, lock file, root directory, and build command. |
| SPA route returns 404 | Add the `vercel.json` rewrite for static SPA apps. |
| Provider rate limit | Retry the failed upload/start step with a fresh request. |
## Quick Reference
| Task | Preferred tool |
|------|----------------|
| Deploy app | `create-deployment` MCP tool |
| Check latest runs | Dashboard or `SELECT * FROM deployments.runs ORDER BY created_at DESC` |
| Inspect direct file upload state | `SELECT * FROM deployments.files WHERE deployment_id = '...'` |
| Manage env vars | Dashboard Sites -> Environment Variables |
| Manage domains | Dashboard Sites -> Domains |