Files
SuperCharged-Claude-Code-Up…/skills/plugins/examples/docker-helper/commands/deploy.ts
admin b723e2bd7d Reorganize: Move all skills to skills/ folder
- Created skills/ directory
- Moved 272 skills to skills/ subfolder
- Kept agents/ at root level
- Kept installation scripts and docs at root level

Repository structure:
- skills/           - All 272 skills from skills.sh
- agents/           - Agent definitions
- *.sh, *.ps1       - Installation scripts
- README.md, etc.   - Documentation

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-23 18:05:17 +00:00

75 lines
2.3 KiB
TypeScript

/**
* Docker Deploy Command
* Deploy containers with zero-downtime support
*/
import { exec } from 'child_process'
import { promisify } from 'util'
import { readFileSync, writeFileSync } from 'fs'
const execAsync = promisify(exec)
export interface DeployOptions {
env?: string
noDowntime?: boolean
force?: boolean
build?: boolean
scale?: number
}
export async function handle(args: DeployOptions, context: any): Promise<string> {
const { env = 'production', noDowntime = true, force = false, build = true, scale } = args
try {
const results: string[] = []
// Build if requested
if (build) {
results.push('Building Docker image...')
const { stdout: buildOutput } = await execAsync('docker-compose build')
results.push(buildOutput)
}
if (noDowntime && !force) {
// Zero-downtime deployment
results.push('Starting zero-downtime deployment...')
// Get current running containers
const { stdout: psOutput } = await execAsync('docker-compose ps -q')
const hasRunning = psOutput.trim().length > 0
if (hasRunning) {
// Start new containers alongside old ones
results.push('Starting new containers...')
await execAsync(`docker-compose up -d --scale app=${scale || 2} --no-recreate`)
// Wait for health checks
await new Promise(resolve => setTimeout(resolve, 5000))
// Stop old containers gracefully
results.push('Stopping old containers...')
await execAsync('docker-compose up -d --scale app=1 --no-recreate')
} else {
// First deployment
results.push('Initial deployment...')
await execAsync('docker-compose up -d')
}
} else {
// Standard deployment with potential downtime
results.push('Deploying with potential downtime...')
await execAsync('docker-compose up -d --force-recreate')
}
// Show status
const { stdout: statusOutput } = await execAsync('docker-compose ps')
results.push('\n✓ Deployment complete!\n')
results.push(statusOutput)
return results.join('\n')
} catch (error: any) {
throw new Error(`Docker deployment failed: ${error.message}`)
}
}
export default { handle }