Files
firecamp/scripts/build.js

182 lines
4.9 KiB
JavaScript

/* eslint-disable no-console */
require('dotenv').config();
const fs = require('fs');
const path = require('path');
const colors = require('colors');
const { Environment, AppFormat } = require('./environment');
const build = require('../webpack.prod');
require('shelljs/global');
module.exports = async () => {
try {
// const replaceTasks = [
// {
// from: path.join(
// __dirname,
// '../webpack/replace/JsonpMainTemplate.runtime.js'
// ),
// to: path.join(
// __dirname,
// '../node_modules/webpack/lib/JsonpMainTemplate.runtime.js'
// ),
// },
// {
// from: path.join(__dirname, '../webpack/replace/process-update.js'),
// to: path.join(
// __dirname,
// '../node_modules/webpack-hot-middleware/process-update.js'
// ),
// },
// ];
// // Replace webpack config path
// replaceTasks.forEach((task) => cp(task.from, task.to));
// Copy project assets and generate config.
const directoryPaths = [
path.join(`${__dirname}/../build`),
path.join(`${__dirname}/../build/development`),
path.join(`${__dirname}/../build/production`),
path.join(`${__dirname}/../build/development/build-scripts`),
path.join(`${__dirname}/../build/production/build-scripts`),
path.join(`${__dirname}/../build/production/services`),
path.join(`${__dirname}/../build/production/packages-executors`),
];
// Hold the build path as per the environment mode
const buildPath =
process.env.NODE_ENV === Environment.Development
? directoryPaths[1]
: directoryPaths[2];
// Remove all builds before start bundle
rm('-rf', buildPath);
// Create build directories
directoryPaths.forEach((directoryPath) => {
if (!fs.existsSync(directoryPath)) mkdir(directoryPath);
});
// Copy build-scripts to generate build
// cp(
// '-R',
// path.join(
// `${__dirname}/../packages/firecamp-desktop-app/src/build-scripts/*`
// ),
// `${buildPath}/build-scripts`
// );
// Copy react app assets
cp(
'-R',
path.join(`${__dirname}/../packages/firecamp-core/public/assets/*`),
buildPath
);
// generate package.json and manifest based on app environment
if (process.env.NODE_ENV === Environment.Development)
exec(`node ${buildPath}/build-scripts/init-package.js`);
else exec(`node ${buildPath}/build-scripts/init-package.js`);
// Generate .html
exec(
`pug -O "{ env: '${process.env.NODE_ENV}' }" -o ${buildPath} ${path.join(
__dirname,
'../packages/firecamp-core/public/views/'
)}`
);
cp(
'-R',
path.join(
`${__dirname}/../packages/firecamp-desktop-app/public/splashscreen.html`
),
`${buildPath}`
);
// Copy electron agent assets, config and services
if (
process.env.NODE_ENV === Environment.Production &&
process.env.APP_FORMAT !== AppFormat.WebApp
) {
// Copy electron agent services
cp(
'-R',
path.join(
`${__dirname}/../packages/firecamp-desktop-app/dist/services/*`
),
`${buildPath}/services`
);
// Copy http executor
cp(
'-R',
path.join(`${__dirname}/../packages-executors/*`),
`${buildPath}/packages-executors`
);
// Copy dmg app assets
if (process.env.APP_FORMAT === AppFormat.Dmg) {
mkdir(`${buildPath}/build`);
cp(
'-R',
path.join(
`${__dirname}/../packages/firecamp-desktop-app/public/assets/${process.env.NODE_ENV}/mac/*`
),
`${buildPath}/build`
);
}
// Copy common assets
cp(
'-R',
path.join(
`${__dirname}/../packages/firecamp-desktop-app/public/assets/${
[...Object.values(Environment)].includes(process.env.NODE_ENV)
? 'production'
: 'canary'
}`
),
`${buildPath}/assets`
);
}
if (process.env.NODE_ENV === 'production') {
await build();
}
return Promise.resolve();
} catch (error) {
return Promise.reject(error);
}
};
if (process.env.NODE_ENV === 'development') {
if (process.env.NODE_ENV === Environment.Production) {
console.log(
`${colors.red(
'Error:'
)} Invalid value set for env. variable (NODE_ENV: ${colors.yellow(
process.env.NODE_ENV
)})`
);
process.exit();
}
if (process.env.NODE_ENV === Environment.Development) module.exports();
}
if (process.env.NODE_ENV === 'production') {
if (process.env.NODE_ENV === Environment.Development) {
console.log(
`${colors.red(
'Error:'
)} Invalid value set for env. variable (NODE_ENV: ${colors.yellow(
process.env.NODE_ENV
)})`
);
process.exit();
}
}