UNPKG

fin

Version:

Developer CLI for Fin. Fin is the easiest way to launch your own SaaS.

73 lines (58 loc) 2.29 kB
'use strict' const { Confirm } = require('enquirer') const pluralize = require('pluralize') const pMap = require('p-map') const { parseFaasIdentifier } = require('fin-utils') const handleError = require('../handle-error') const spinner = require('../spinner') module.exports = (program, client) => { program .command('rm [deploymentId|deploymentUrl...]') .alias('remove') .description('Removes deployments') .option('-y, --yes', 'Skip confirmation') .option('-s, --safe', 'Skip deployments with an active alias') .action(async (args, opts) => { program.requireAuthentication() try { const deploymentsLabel = pluralize('deployment', args.length) const parsedArgs = args.map((identifier) => parseFaasIdentifier(identifier, { namespace: client.user.username })) const invalid = args.filter((_, index) => !parsedArgs[index]) if (invalid.length) { const invalidLabel = pluralize('deployment', invalid.length) console.log(`Error invalid ${invalidLabel} [${invalid.join(', ')}]`) process.exit(1) } // TODO: if any projects are specified without deployment version info, then // expand them out to include all deployments in those projects // TODO: currently if you specify a project, it'll do project@latest... const deployments = parsedArgs.map(({ deploymentId }) => deploymentId) if (!opts.yes) { console.log(`${deploymentsLabel}:`, deployments.join(', ')) const prompt = new Confirm({ message: `Are you sure you want to delete these ${deployments.length} ${deploymentsLabel}?`, initial: true }) const answer = await prompt.run() if (!answer) { process.exit(1) } } await spinner( pMap(deployments, (deploymentId) => { return client.removeDeployment(deploymentId, { safe: opts.safe }) }, { concurrency: 1 }), `Removing ${deployments.length} ${deploymentsLabel}` ) console.log(`Deleted ${deployments.length} ${deploymentsLabel}`) } catch (err) { handleError(err) } }) }