96 lines
2.8 KiB
JavaScript
96 lines
2.8 KiB
JavaScript
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
const execa = require('execa');
|
|
const Listr = require('listr');
|
|
const package = require('../../package.json');
|
|
|
|
// Arguments checks
|
|
|
|
const stage = process.argv[2] || 'dev';
|
|
|
|
/* eslint-disable */
|
|
if (!package.deploy) throw 'no deploy config in parent package.json';
|
|
if (!package.deploy.awsProfile) throw 'no deploy awsProfile in parent package.json';
|
|
if (!package.deploy[stage]) throw `no deploy config for this stage ${stage} in parent package.json`;
|
|
if (!package.deploy[stage].bucket || package.deploy[stage].bucket === '') throw `no BUCKET config for this stage ${stage} in parent package.json`;
|
|
/* eslint-enable */
|
|
|
|
const awsProfile = package.deploy.awsProfile;
|
|
const bucketUrl = package.deploy[stage].bucket;
|
|
const distributionId = package.deploy[stage].id;
|
|
|
|
const deployBase = function(basePath) {
|
|
return new Listr(
|
|
[
|
|
{
|
|
title: 'Build client-ssr',
|
|
task: async () => {
|
|
const { stdout } = await execa('webpack', ['--environment', stage, '--config', 'config/webpack/ssr/slsClient.js'], {
|
|
all: true,
|
|
});
|
|
console.log(stdout);
|
|
},
|
|
},
|
|
// {
|
|
// title: 'Copy manifest to server-ssr',
|
|
// task: () =>
|
|
// execa('cp', [
|
|
// 'sls/client/loadable-stats.json',
|
|
// 'src/server/loadable-stats.json',
|
|
// ]).then(result => {}),
|
|
// },
|
|
{
|
|
title: 'Deploy client',
|
|
task: async () => {
|
|
const { stdout } = await execa(
|
|
'aws',
|
|
['s3', 'sync', './sls/client', bucketUrl, '--profile', awsProfile, '--sse', '--delete', '--cache-control', 'max-age=31536000,public'],
|
|
{
|
|
all: true,
|
|
},
|
|
);
|
|
console.log(stdout);
|
|
},
|
|
},
|
|
{
|
|
title: 'Deploy server',
|
|
task: async () => {
|
|
const { stdout } = await execa('sls', ['deploy', '--config', './serverless.yaml', '--stage', stage, '--aws-profile', awsProfile], {
|
|
all: true,
|
|
});
|
|
console.log(stdout);
|
|
},
|
|
},
|
|
// {
|
|
// title: 'Invalidate cache',
|
|
// task: async () => {
|
|
// const { stdout } = await execa(
|
|
// 'aws',
|
|
// [
|
|
// 'cloudfront',
|
|
// '--aws-profile',
|
|
// awsProfile,
|
|
// 'create-invalidation',
|
|
// '--distribution-id',
|
|
// distributionId,
|
|
// '--path',
|
|
// '"/*"',
|
|
// ],
|
|
// {
|
|
// all: true,
|
|
// },
|
|
// );
|
|
// console.log(stdout);
|
|
// },
|
|
// },
|
|
],
|
|
{ concurrent: false },
|
|
);
|
|
};
|
|
|
|
deployBase('')
|
|
.run()
|
|
.catch(err => {
|
|
console.error(err);
|
|
});
|