diff --git a/src/apps/build-runner.service.ts b/src/apps/build-runner.service.ts index 819ec87..cc45697 100644 --- a/src/apps/build-runner.service.ts +++ b/src/apps/build-runner.service.ts @@ -300,6 +300,25 @@ export class BuildRunnerService implements OnModuleInit, OnModuleDestroy { const contextPath = this.configService.get('BUILD_CONTEXT_PATH', '.'); const contextDir = path.resolve(workDir, contextPath); const pushEnabled = this.configService.get('BUILD_PUSH_ENABLED', 'true') !== 'false'; + const viteBuildVariables = job.component.buildVariables + .filter((variable) => !variable.isSecret && variable.key.trim().startsWith('VITE_')); + const buildArgs = job.component.buildVariables + .filter((variable) => !variable.isSecret && variable.key.trim()) + .filter((variable) => !variable.key.trim().startsWith('VITE_')) + .flatMap((variable) => ['--build-arg', `${variable.key}=${variable.value}`]); + + if (viteBuildVariables.length > 0) { + await fs.writeFile( + path.join(contextDir, '.env.production.local'), + `${viteBuildVariables.map((variable) => `${variable.key}=${JSON.stringify(variable.value)}`).join('\n')}\n`, + 'utf8', + ); + await append(`[image] Vite build env ${viteBuildVariables.map((variable) => variable.key).join(', ')}`); + } + + if (buildArgs.length > 0) { + await append(`[image] build args ${job.component.buildVariables.filter((variable) => !variable.isSecret && variable.key.trim() && !variable.key.trim().startsWith('VITE_')).map((variable) => variable.key).join(', ')}`); + } if (image !== job.image) { await this.prisma.buildJob.update({ @@ -316,7 +335,7 @@ export class BuildRunnerService implements OnModuleInit, OnModuleDestroy { await runCommand({ jobId: job.id, command: this.configService.get('NERDCTL_BIN', 'nerdctl'), - args: [...prefix, 'build', '-t', image, '-f', dockerfile, '.'], + args: [...prefix, 'build', ...buildArgs, '-t', image, '-f', dockerfile, '.'], cwd: contextDir, append, onProcess: (child) => this.activeProcesses.set(job.id, child), @@ -340,7 +359,7 @@ export class BuildRunnerService implements OnModuleInit, OnModuleDestroy { await runCommand({ jobId: job.id, command: this.configService.get('DOCKER_BIN', 'docker'), - args: ['build', '-t', image, '-f', dockerfile, '.'], + args: ['build', ...buildArgs, '-t', image, '-f', dockerfile, '.'], cwd: contextDir, append, onProcess: (child) => this.activeProcesses.set(job.id, child),