frontend/seed/scripts/sls-deploy.js
2025-05-14 21:49:03 +02:00

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);
});