UNPKG

@launchql/cli

Version:
89 lines (88 loc) 2.99 kB
import { errors, getEnvOptions, getPgEnvOptions, getSpawnEnvWithPg } from '@launchql/types'; import { deploy, deployFast } from '@launchql/core'; import { Logger } from '@launchql/server-utils'; import { execSync } from 'child_process'; import { LaunchQLProject } from '@launchql/core'; export default async (argv, prompter, _options) => { const pgEnv = getPgEnvOptions(); const log = new Logger('cli'); const questions = [ { type: 'text', name: 'database', message: 'Database name', required: true }, { name: 'yes', type: 'confirm', message: 'Are you sure you want to proceed?', required: true } ]; let { database, yes, recursive, createdb, cwd } = await prompter.prompt(argv, questions); if (!yes) { log.info('Operation cancelled.'); return; } cwd = cwd || process.cwd(); log.debug(`Using current directory: ${cwd}`); const project = new LaunchQLProject(cwd); if (createdb) { log.info(`Creating database ${database}...`); execSync(`createdb ${database}`, { env: getSpawnEnvWithPg(pgEnv) }); } const options = getEnvOptions({ pg: { database } }); if (recursive) { const modules = await project.getModules(); const moduleNames = modules.map(mod => mod.getModuleName()); if (!moduleNames.length) { log.error('No modules found in the specified directory.'); prompter.close(); throw errors.NOT_FOUND({}, 'No modules found in the specified directory.'); } const { project: selectedProject } = await prompter.prompt(argv, [ { type: 'autocomplete', name: 'project', message: 'Choose a project to deploy', options: moduleNames, required: true } ]); const selected = modules.find(mod => mod.getModuleName() === selectedProject); if (!selected) { throw new Error(`Module ${selectedProject} not found`); } const dir = selected.getModulePath(); log.success(`Deploying project ${selectedProject} from ${dir} to database ${database}...`); if (argv.fast) { await deployFast({ opts: options, database, dir, name: selectedProject, usePlan: true, cache: false }); } else { await deploy(options, selectedProject, database, dir); } log.success('Deployment complete.'); } else { log.info(`Running: sqitch deploy db:pg:${database}`); execSync(`sqitch deploy db:pg:${database}`, { env: getSpawnEnvWithPg(pgEnv) }); log.success('Deployment complete.'); } return argv; };