UNPKG

@crazyrabbitltc/railway-mcp

Version:

Railway MCP Server - 146+ tools with 100% Railway API coverage, comprehensive MCP testing framework, and real infrastructure management through AI assistants. Enhanced version with enterprise features, based on original work by Jason Tan.

268 lines (267 loc) 7.75 kB
export class DeploymentAdvancedRepository { client; constructor(client) { this.client = client; } async listDeploymentVersions(serviceId, limit = 20) { const query = ` query listDeploymentVersions($serviceId: String!, $limit: Int!) { service(id: $serviceId) { deploymentVersions(first: $limit, orderBy: { createdAt: DESC }) { edges { node { id serviceId deploymentId version gitSha gitBranch buildId status environment buildTime deployTime createdAt activatedAt deactivatedAt } } } } } `; const response = await this.client.request(query, { serviceId, limit }); return response.service.deploymentVersions.edges.map(edge => edge.node); } async createRollback(serviceId, toVersionId, reason, strategy) { const query = ` mutation createRollback($serviceId: String!, $toVersionId: String!, $reason: String!, $strategy: RollbackStrategy!) { rollbackCreate(serviceId: $serviceId, toVersionId: $toVersionId, reason: $reason, strategy: $strategy) { id serviceId fromVersionId toVersionId status reason triggeredBy rollbackStrategy progress createdAt } } `; const response = await this.client.request(query, { serviceId, toVersionId, reason, strategy }); return response.rollbackCreate; } async getRollbackStatus(rollbackId) { const query = ` query getRollbackStatus($rollbackId: String!) { rollback(id: $rollbackId) { id serviceId fromVersionId toVersionId status reason triggeredBy rollbackStrategy progress createdAt completedAt errorMessage } } `; const response = await this.client.request(query, { rollbackId }); return response.rollback; } async listRollbacks(serviceId) { const query = ` query listRollbacks($serviceId: String!) { service(id: $serviceId) { rollbacks { edges { node { id serviceId fromVersionId toVersionId status reason triggeredBy rollbackStrategy progress createdAt completedAt errorMessage } } } } } `; const response = await this.client.request(query, { serviceId }); return response.service.rollbacks.edges.map(edge => edge.node); } async listBuildJobs(serviceId, limit = 20) { const query = ` query listBuildJobs($serviceId: String!, $limit: Int!) { service(id: $serviceId) { buildJobs(first: $limit, orderBy: { createdAt: DESC }) { edges { node { id serviceId status gitSha gitBranch buildConfig { buildCommand dockerfilePath buildArgs cacheEnabled } buildTime queueTime logs artifacts { type path size } createdAt startedAt completedAt } } } } } `; const response = await this.client.request(query, { serviceId, limit }); return response.service.buildJobs.edges.map(edge => edge.node); } async triggerBuild(serviceId, gitSha, buildConfig) { const query = ` mutation triggerBuild($serviceId: String!, $gitSha: String, $buildConfig: BuildConfigInput) { buildTrigger(serviceId: $serviceId, gitSha: $gitSha, buildConfig: $buildConfig) { id serviceId status gitSha gitBranch buildConfig { buildCommand dockerfilePath buildArgs cacheEnabled } queueTime createdAt } } `; const response = await this.client.request(query, { serviceId, gitSha, buildConfig }); return response.buildTrigger; } async cancelBuild(buildId) { const query = ` mutation cancelBuild($buildId: String!) { buildCancel(id: $buildId) } `; const response = await this.client.request(query, { buildId }); return response.buildCancel; } async getBuildLogs(buildId, lines) { const query = ` query getBuildLogs($buildId: String!, $lines: Int) { buildJob(id: $buildId) { logs(lines: $lines) } } `; const response = await this.client.request(query, { buildId, lines }); return response.buildJob.logs; } async createCanaryDeployment(serviceId, newVersionId, trafficSplit, rules) { const query = ` mutation createCanaryDeployment($serviceId: String!, $newVersionId: String!, $trafficSplit: Int!, $rules: [CanaryRuleInput!]!) { canaryDeploymentCreate(serviceId: $serviceId, newVersionId: $newVersionId, trafficSplit: $trafficSplit, rules: $rules) { id serviceId newVersionId currentVersionId trafficSplit status metrics { errorRate responseTime throughput } rules { metric threshold action } createdAt } } `; const response = await this.client.request(query, { serviceId, newVersionId, trafficSplit, rules }); return response.canaryDeploymentCreate; } async promoteCanaryDeployment(canaryId) { const query = ` mutation promoteCanaryDeployment($canaryId: String!) { canaryDeploymentPromote(id: $canaryId) { id status promotedAt } } `; const response = await this.client.request(query, { canaryId }); return response.canaryDeploymentPromote; } async createBlueGreenDeployment(serviceId, newVersionId) { const query = ` mutation createBlueGreenDeployment($serviceId: String!, $newVersionId: String!) { blueGreenDeploymentCreate(serviceId: $serviceId, newVersionId: $newVersionId) { id serviceId blueVersionId greenVersionId activeSlot status createdAt } } `; const response = await this.client.request(query, { serviceId, newVersionId }); return response.blueGreenDeploymentCreate; } async switchBlueGreenDeployment(blueGreenId) { const query = ` mutation switchBlueGreenDeployment($blueGreenId: String!) { blueGreenDeploymentSwitch(id: $blueGreenId) { id activeSlot status switchTime completedAt } } `; const response = await this.client.request(query, { blueGreenId }); return response.blueGreenDeploymentSwitch; } }