Skip to content

Commit 0989f29

Browse files
committed
feat(all): implement GitHub deployment validation and enhanced wizard flow
Add comprehensive deployment validation and improved wizard UX: - Backend: Add repository validation service with runtime detection - Backend: Implement satellite validation service for deployment checks - Backend: Enhance deployment event handling (success/failure) - Backend: Improve log streaming with timestamp handling - Frontend: Add validation step with error handling and retry logic - Frontend: Implement deployment progress tracking - Frontend: Add RadioCard components for improved selection UI - Frontend: Enhance DsProgressSteps with collapsible steps and footer - Frontend: Add LogsTable component for better log display - Frontend: Remove GitHub connect step and streamline wizard flow
1 parent 96bd80a commit 0989f29

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+4367
-1394
lines changed

services/backend/api-spec.json

Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15419,6 +15419,277 @@
1541915419
}
1542015420
}
1542115421
},
15422+
"/api/teams/{teamId}/deploy/validate": {
15423+
"post": {
15424+
"summary": "Validate GitHub repository for deployment",
15425+
"tags": [
15426+
"Deployment"
15427+
],
15428+
"description": "Validates GitHub repository without creating any database entries. Returns repository metadata including runtime, MCP SDK, and build scripts. This is a lightweight validation endpoint used before the actual deployment.",
15429+
"requestBody": {
15430+
"content": {
15431+
"application/json": {
15432+
"schema": {
15433+
"type": "object",
15434+
"properties": {
15435+
"repository_url": {
15436+
"type": "string",
15437+
"minLength": 1,
15438+
"description": "GitHub repository URL (e.g., https://github.com/user/repo)"
15439+
},
15440+
"branch": {
15441+
"type": "string",
15442+
"minLength": 1,
15443+
"description": "Git branch to validate (e.g., main)"
15444+
}
15445+
},
15446+
"required": [
15447+
"repository_url",
15448+
"branch"
15449+
],
15450+
"additionalProperties": false
15451+
}
15452+
}
15453+
},
15454+
"required": true
15455+
},
15456+
"parameters": [
15457+
{
15458+
"schema": {
15459+
"type": "string",
15460+
"minLength": 1
15461+
},
15462+
"in": "path",
15463+
"name": "teamId",
15464+
"required": true
15465+
}
15466+
],
15467+
"security": [
15468+
{
15469+
"cookieAuth": []
15470+
},
15471+
{
15472+
"bearerAuth": []
15473+
}
15474+
],
15475+
"responses": {
15476+
"200": {
15477+
"description": "Repository validated successfully",
15478+
"content": {
15479+
"application/json": {
15480+
"schema": {
15481+
"type": "object",
15482+
"properties": {
15483+
"valid": {
15484+
"type": "boolean"
15485+
},
15486+
"metadata": {
15487+
"type": "object",
15488+
"properties": {
15489+
"name": {
15490+
"type": "string"
15491+
},
15492+
"version": {
15493+
"type": "string"
15494+
},
15495+
"description": {
15496+
"type": "string"
15497+
},
15498+
"runtime": {
15499+
"type": "string",
15500+
"enum": [
15501+
"node",
15502+
"python",
15503+
"go",
15504+
"unknown"
15505+
]
15506+
},
15507+
"mcp_sdk": {
15508+
"type": "object",
15509+
"properties": {
15510+
"detected": {
15511+
"type": "boolean"
15512+
},
15513+
"version": {
15514+
"type": "string"
15515+
},
15516+
"package": {
15517+
"type": "string"
15518+
},
15519+
"runtime": {
15520+
"type": "string",
15521+
"enum": [
15522+
"node",
15523+
"python",
15524+
"go",
15525+
"unknown"
15526+
]
15527+
}
15528+
},
15529+
"required": [
15530+
"detected",
15531+
"runtime"
15532+
]
15533+
},
15534+
"scripts": {
15535+
"type": "object",
15536+
"additionalProperties": {
15537+
"type": "string"
15538+
}
15539+
},
15540+
"commit_sha": {
15541+
"type": "string"
15542+
}
15543+
},
15544+
"required": [
15545+
"runtime",
15546+
"mcp_sdk",
15547+
"commit_sha"
15548+
]
15549+
}
15550+
},
15551+
"required": [
15552+
"valid",
15553+
"metadata"
15554+
],
15555+
"description": "Repository validated successfully"
15556+
}
15557+
}
15558+
}
15559+
},
15560+
"400": {
15561+
"description": "Validation error (missing package.json, invalid MCP SDK, etc.)",
15562+
"content": {
15563+
"application/json": {
15564+
"schema": {
15565+
"type": "object",
15566+
"properties": {
15567+
"valid": {
15568+
"type": "boolean"
15569+
},
15570+
"error": {
15571+
"type": "string"
15572+
},
15573+
"step": {
15574+
"type": "string"
15575+
}
15576+
},
15577+
"required": [
15578+
"valid",
15579+
"error"
15580+
],
15581+
"description": "Validation error (missing package.json, invalid MCP SDK, etc.)"
15582+
}
15583+
}
15584+
}
15585+
},
15586+
"401": {
15587+
"description": "Unauthorized",
15588+
"content": {
15589+
"application/json": {
15590+
"schema": {
15591+
"type": "object",
15592+
"properties": {
15593+
"valid": {
15594+
"type": "boolean"
15595+
},
15596+
"error": {
15597+
"type": "string"
15598+
},
15599+
"step": {
15600+
"type": "string"
15601+
}
15602+
},
15603+
"required": [
15604+
"valid",
15605+
"error"
15606+
],
15607+
"description": "Unauthorized"
15608+
}
15609+
}
15610+
}
15611+
},
15612+
"403": {
15613+
"description": "Forbidden",
15614+
"content": {
15615+
"application/json": {
15616+
"schema": {
15617+
"type": "object",
15618+
"properties": {
15619+
"valid": {
15620+
"type": "boolean"
15621+
},
15622+
"error": {
15623+
"type": "string"
15624+
},
15625+
"step": {
15626+
"type": "string"
15627+
}
15628+
},
15629+
"required": [
15630+
"valid",
15631+
"error"
15632+
],
15633+
"description": "Forbidden"
15634+
}
15635+
}
15636+
}
15637+
},
15638+
"404": {
15639+
"description": "Team not found",
15640+
"content": {
15641+
"application/json": {
15642+
"schema": {
15643+
"type": "object",
15644+
"properties": {
15645+
"valid": {
15646+
"type": "boolean"
15647+
},
15648+
"error": {
15649+
"type": "string"
15650+
},
15651+
"step": {
15652+
"type": "string"
15653+
}
15654+
},
15655+
"required": [
15656+
"valid",
15657+
"error"
15658+
],
15659+
"description": "Team not found"
15660+
}
15661+
}
15662+
}
15663+
},
15664+
"500": {
15665+
"description": "Internal Server Error",
15666+
"content": {
15667+
"application/json": {
15668+
"schema": {
15669+
"type": "object",
15670+
"properties": {
15671+
"valid": {
15672+
"type": "boolean"
15673+
},
15674+
"error": {
15675+
"type": "string"
15676+
},
15677+
"step": {
15678+
"type": "string"
15679+
}
15680+
},
15681+
"required": [
15682+
"valid",
15683+
"error"
15684+
],
15685+
"description": "Internal Server Error"
15686+
}
15687+
}
15688+
}
15689+
}
15690+
}
15691+
}
15692+
},
1542215693
"/api/teams/{teamId}/deploy": {
1542315694
"post": {
1542415695
"summary": "Deploy MCP server from GitHub (synchronous)",

0 commit comments

Comments
 (0)