UNPKG

@blinkmobile/client-cli

Version:

CLI to deploy client-side web applications with BlinkMobile

76 lines (66 loc) 2.23 kB
/* @flow */ 'use strict' const path = require('path') const ora = require('ora') const chalk = require('chalk') const upload = require('@blinkmobile/aws-s3').upload const confirm = require('../lib/utils/confirm.js') const bucketParams = require('../lib/s3-bucket-params.js') const s3Factory = require('../lib/s3-bucket-factory.js') function getFQDN ( project /* : string */, env /* : string */ ) /* : string */ { if (env.toLowerCase() === 'prod') { return project } const arr = project.split('.') arr[0] += `-${env}` return arr.join('.') } module.exports = function ( input /* : string[] */, flags /* : Object */ ) /* : Promise<void> */ { return bucketParams.read(flags.cwd) .then((bucketDetails) => { const fqdn = getFQDN(bucketDetails.params.Bucket, flags.env) return confirm(flags.force, flags.env) .then((confirmation) => { if (!confirmation) { return } const spinner = ora({spinner: 'dots', text: 'Uploading to CDN'}) return s3Factory(bucketDetails, flags.env) .then((s3) => { const uploadParams = { s3, skip: flags.skip, prune: flags.prune, // Allow deployment of files in a sub directory to the current working directory cwd: path.join(flags.cwd, (input[0] || '.')), bucketPathPrefix: flags.env } spinner.start() const task = upload(uploadParams) task.on('skipped', (fileName) => { spinner.warn(`skipped: ${fileName}`) }) task.on('uploaded', (fileName) => { spinner.succeed(`uploaded: ${fileName}`) }) task.on('deleted', (fileName) => { spinner.warn(`deleted: ${fileName}`) }) return task.promise }) .then(() => { spinner.succeed('Deployment complete - Origin: ' + chalk.bold(`https://${fqdn}`)) }) .catch((err) => { spinner.fail('Deployment failed!') return Promise.reject(err) }) }) }) }