Files

45 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
import { Command } from 'commander';
import chalk from 'chalk';
import { parseWorkflow, pickJob } from './parser.js';
import { runInteractive } from './runner.js';
const program = new Command();
program
.name('cisandbox')
.description('Interactive CI Pipeline Debugger with Local Env Sync')
.version('1.0.0');
program
.argument('<workflow-file>', 'Path to GitHub Actions workflow YAML')
.option('-j, --job <name>', 'Job name to run (required if multiple jobs)')
.option('-w, --workspace <path>', 'Workspace directory to mount', process.cwd())
.option('-e, --env-file <path>', '.env file to load into container')
.option('-n, --dry-run', 'Preview steps without running containers')
.action(async (workflowFile, options) => {
try {
const workflow = parseWorkflow(workflowFile);
const { name: jobName, job } = pickJob(workflow, options.job);
const ctx = {
workflow,
jobName,
job,
stepResults: [],
containerId: null,
env: {},
};
await runInteractive(ctx, {
workflowFile,
jobName,
dryRun: options.dryRun,
workspace: options.workspace,
envFile: options.envFile,
});
const failed = ctx.stepResults.filter(r => r.status === 'failure').length;
process.exit(failed > 0 ? 1 : 0);
}
catch (err) {
console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
process.exit(1);
}
});
program.parse();
//# sourceMappingURL=cli.js.map