3d99940658
Sandbox Deployment Platform — Go control plane + agents, NextJS dashboard, nginx reverse proxy. Cross-compile via Docker; deploy via sshpass to 172.18.136.92 (micro) and 172.18.139.186 (gateway). - control-plane: HTTP API, WS hub, SQLite (modernc.org/sqlite) for progress, .log files for log persistence - agent-micro / agent-gateway: alpine:3.20 + bind-mounted repo, binary exec'd in container, no Dockerfile build step - dashboard: NextJS static export + shadcn/ui components, single WebSocket hook - docker-compose.yml: three services on alpine:latest with docker socket bind for agents - scripts/: build.sh (golang:1.23-alpine cross-compile), deploy.sh, patch-nginx.sh (idempotent nginx splice), ssh wrappers Runtime model: pass-through Bitbucket creds per deploy, never logged or persisted on the agent. Control plane never touches git or docker directly — agents do all the work locally.
36 lines
1.0 KiB
TypeScript
36 lines
1.0 KiB
TypeScript
// lib/api.ts — shared types and fetch helpers
|
|
export type Repo = { name: string; node: string; path: string }
|
|
|
|
export async function listRepos(): Promise<Repo[]> {
|
|
const r = await fetch('/api/repos', { credentials: 'include' })
|
|
if (!r.ok) throw new Error('failed to list repos')
|
|
return r.json()
|
|
}
|
|
|
|
export async function listBranches(repo: string): Promise<string[]> {
|
|
const r = await fetch(`/api/repos/branches?repo=${encodeURIComponent(repo)}`, { credentials: 'include' })
|
|
if (!r.ok) throw new Error('failed to list branches')
|
|
return r.json()
|
|
}
|
|
|
|
export type DeployResponse = { id: string }
|
|
|
|
export async function startDeploy(payload: {
|
|
repository: string
|
|
branch: string
|
|
username: string
|
|
password: string
|
|
}): Promise<DeployResponse> {
|
|
const r = await fetch('/api/deployments', {
|
|
method: 'POST',
|
|
headers: { 'content-type': 'application/json' },
|
|
credentials: 'include',
|
|
body: JSON.stringify(payload),
|
|
})
|
|
if (!r.ok) {
|
|
const text = await r.text()
|
|
throw new Error(text || 'deploy failed')
|
|
}
|
|
return r.json()
|
|
}
|