UNPKG

saasify-bulk-deploy

Version:

Bulk deployment utility for Saasify.

90 lines (73 loc) 2.47 kB
'use strict' const { Confirm } = require('enquirer') const pluralize = require('pluralize') const pMap = require('p-map') const tempy = require('tempy') const formatWhoami = require('./format-whoami') const getProjects = require('./get-projects') const deployProject = require('./deploy-project') const publishDeployment = require('./publish-deployment') const whoami = require('./saasify/whoami') module.exports = async (repos, opts = {}) => { const { user, team } = await whoami(opts) const reposLabel = pluralize('repo', repos.length) const whoamiLabel = formatWhoami({ user, team }) const { temp = tempy.directory(), debug = false, publish = false } = opts console.log(`Aggregating saasify projects from ${repos.length} ${reposLabel}`) console.log(temp) const projects = await getProjects(repos, { temp }) const projectNames = projects.map((project) => project.config.name) const projectsLabel = pluralize('project', projects.length) console.log(`Found ${projects.length} saasify ${projectsLabel}`) console.log(JSON.stringify(projectNames, null, 2)) if (!opts.yes) { const prompt = new Confirm({ message: `Are you sure you want to deploy ${projects.length} ${projectsLabel} under ${whoamiLabel}?`, initial: true }) const answer = await prompt.run() if (!answer) { process.exit(1) } } const deployments = [] const errors = [] await pMap( projects, async (project) => { try { const deployment = await deployProject(project, { debug }) deployments.push(deployment) if (publish) { await publishDeployment(deployment, { debug }) } } catch (err) { errors.push({ project, error: err }) console.error() console.error() console.error(err) console.error() console.error() } }, { concurrency: 1 } ) const deploymentsLabel = pluralize('deployment', deployments.length) const errorsLabel = pluralize('error', errors.length) const publishInfo = publish ? 'and published ' : '' console.log() console.log( `Deployed ${publishInfo}${projects.length} saasify ${deploymentsLabel}` ) console.log() if (errors.length) { const errs = errors.map((e) => ({ name: e.project.config.name })) console.log(`Error: encountered ${errors.length} ${errorsLabel}`) console.log(JSON.stringify(errs, null, 2)) } return deployments }