# Features - Build environment variables for NodeJS builds - Initial monorepo support (more tests needed!) # Fixes - Fix wrong redirects - Logout fix for the session manager
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import { docker, streamEvents } from '$lib/api/docker';
|
|
import { promises as fs } from 'fs';
|
|
|
|
const buildImageNodeDocker = (configuration, prodBuild, generateEnvs) => {
|
|
return [
|
|
'FROM node:lts',
|
|
...generateEnvs,
|
|
'WORKDIR /usr/src/app',
|
|
`COPY ${configuration.build.directory}/package*.json ./`,
|
|
configuration.build.command.installation && `RUN ${configuration.build.command.installation}`,
|
|
`COPY ./${configuration.build.directory} ./`,
|
|
`RUN ${configuration.build.command.build}`,
|
|
prodBuild && `RUN rm -fr node_modules && ${configuration.build.command.installation} --prod`
|
|
].join('\n');
|
|
};
|
|
export async function buildImage(configuration, cacheBuild?: boolean, prodBuild?: boolean) {
|
|
// TODO: Edit secrets
|
|
// TODO: Add secret from .env file / json
|
|
const generateEnvs = [];
|
|
const dotEnv = []
|
|
for (const secret of configuration.publish.secrets) {
|
|
dotEnv.push(`${secret.name}=${secret.value}`)
|
|
if (secret.isBuild) generateEnvs.push(`ENV ${secret.name}=${secret.value}`)
|
|
}
|
|
await fs.writeFile(
|
|
`${configuration.general.workdir}/.env`,
|
|
dotEnv.join('\n')
|
|
)
|
|
await fs.writeFile(
|
|
`${configuration.general.workdir}/Dockerfile`,
|
|
buildImageNodeDocker(configuration, prodBuild, generateEnvs)
|
|
);
|
|
const stream = await docker.engine.buildImage(
|
|
{ src: ['.'], context: configuration.general.workdir },
|
|
{
|
|
t: `${configuration.build.container.name}:${cacheBuild
|
|
? `${configuration.build.container.tag}-cache`
|
|
: configuration.build.container.tag
|
|
}`
|
|
}
|
|
);
|
|
await streamEvents(stream, configuration);
|
|
}
|