Deterministic-first modernization control plane for upgrade campaigns with policy gates, verifier checks, async workers, and auditable evidence bundles.
docker compose up --buildAPI default:
http://localhost:3000
npm run db:up
npm run db:migrate
npm run api:start
npm run worker:startRun start endpoints (/campaigns/:id/plan, /campaigns/:id/apply) now enqueue and return status: queued.
Track progress with:
GET /runs/:idGET /runs/:id/eventsPOST /runs/:id/cancelPOST /campaigns/:id/pausePOST /campaigns/:id/resumeGET /projects/:id/summaryGET /campaigns/:id/summary
Prometheus metrics:
GET /metrics
# 1) Register GitHub project
PROJECT_ID=$(curl -s -X POST http://localhost:3000/projects/github \
-H "Content-Type: application/json" \
-d '{
"name":"code-porter",
"owner":"Coreledger-tech",
"repo":"code-porter"
}' | jq -r '.id')
# 2) Create campaign
CAMPAIGN_ID=$(curl -s -X POST http://localhost:3000/campaigns \
-H "Content-Type: application/json" \
-d "{
\"projectId\":\"$PROJECT_ID\",
\"policyId\":\"default\",
\"recipePack\":\"java-maven-core\",
\"targetSelector\":\"main\"
}" | jq -r '.id')
# 3) Apply
RUN_ID=$(curl -s -X POST http://localhost:3000/campaigns/$CAMPAIGN_ID/apply | jq -r '.runId')
# 4) Inspect run
curl -s http://localhost:3000/runs/$RUN_ID | jqRun response includes:
prUrlwhen GitHub PR creation succeedsevidenceZipUrlandevidenceManifestUrlevidenceStorageandevidenceUrlMode
npm test
npm run test:integrationnpm run cleanup:workspaces
npm run cleanup:evidence