fix: build env variables with docker compose
This commit is contained in:
@@ -26,8 +26,10 @@ export default async function (data) {
|
|||||||
throw 'No Services found in docker-compose file.';
|
throw 'No Services found in docker-compose file.';
|
||||||
}
|
}
|
||||||
let envs = [];
|
let envs = [];
|
||||||
|
let buildEnvs = [];
|
||||||
if (secrets.length > 0) {
|
if (secrets.length > 0) {
|
||||||
envs = [...envs, ...generateSecrets(secrets, pullmergeRequestId, false, null)];
|
envs = [...envs, ...generateSecrets(secrets, pullmergeRequestId, false, null)];
|
||||||
|
buildEnvs = [...buildEnvs, ...generateSecrets(secrets, pullmergeRequestId, true, null, true)];
|
||||||
}
|
}
|
||||||
|
|
||||||
const composeVolumes = [];
|
const composeVolumes = [];
|
||||||
@@ -43,11 +45,22 @@ export default async function (data) {
|
|||||||
let networks = {};
|
let networks = {};
|
||||||
for (let [key, value] of Object.entries(dockerComposeYaml.services)) {
|
for (let [key, value] of Object.entries(dockerComposeYaml.services)) {
|
||||||
value['container_name'] = `${applicationId}-${key}`;
|
value['container_name'] = `${applicationId}-${key}`;
|
||||||
|
|
||||||
let environment = typeof value['environment'] === 'undefined' ? [] : value['environment'];
|
let environment = typeof value['environment'] === 'undefined' ? [] : value['environment'];
|
||||||
if (Object.keys(environment).length > 0) {
|
if (Object.keys(environment).length > 0) {
|
||||||
environment = Object.entries(environment).map(([key, value]) => `${key}=${value}`);
|
environment = Object.entries(environment).map(([key, value]) => `${key}=${value}`);
|
||||||
}
|
}
|
||||||
value['environment'] = [...environment, ...envs];
|
value['environment'] = [...environment, ...envs];
|
||||||
|
|
||||||
|
let build = typeof value['build'] === 'undefined' ? [] : value['build'];
|
||||||
|
if (Object.keys(build).length > 0) {
|
||||||
|
build = Object.entries(build).map(([key, value]) => `${key}=${value}`);
|
||||||
|
}
|
||||||
|
value['build'] = {
|
||||||
|
...build,
|
||||||
|
args: [...(build?.args || []), ...buildEnvs]
|
||||||
|
};
|
||||||
|
|
||||||
value['labels'] = labels;
|
value['labels'] = labels;
|
||||||
// TODO: If we support separated volume for each service, we need to add it here
|
// TODO: If we support separated volume for each service, we need to add it here
|
||||||
if (value['volumes']?.length > 0) {
|
if (value['volumes']?.length > 0) {
|
||||||
@@ -93,6 +106,7 @@ export default async function (data) {
|
|||||||
dockerComposeYaml['networks'] = Object.assign({ ...networks }, { [network]: { external: true } });
|
dockerComposeYaml['networks'] = Object.assign({ ...networks }, { [network]: { external: true } });
|
||||||
|
|
||||||
await fs.writeFile(fileYaml, yaml.dump(dockerComposeYaml));
|
await fs.writeFile(fileYaml, yaml.dump(dockerComposeYaml));
|
||||||
|
console.log(yaml.dump(dockerComposeYaml));
|
||||||
await executeCommand({
|
await executeCommand({
|
||||||
debug,
|
debug,
|
||||||
buildId,
|
buildId,
|
||||||
|
@@ -1912,27 +1912,28 @@ export function generateSecrets(
|
|||||||
secrets: Array<any>,
|
secrets: Array<any>,
|
||||||
pullmergeRequestId: string,
|
pullmergeRequestId: string,
|
||||||
isBuild = false,
|
isBuild = false,
|
||||||
port = null
|
port = null,
|
||||||
|
compose = false
|
||||||
): Array<string> {
|
): Array<string> {
|
||||||
const envs = [];
|
const envs = [];
|
||||||
const isPRMRSecret = secrets.filter((s) => s.isPRMRSecret);
|
const isPRMRSecret = secrets.filter((s) => s.isPRMRSecret);
|
||||||
const normalSecrets = secrets.filter((s) => !s.isPRMRSecret);
|
const normalSecrets = secrets.filter((s) => !s.isPRMRSecret);
|
||||||
if (pullmergeRequestId && isPRMRSecret.length > 0) {
|
if (pullmergeRequestId && isPRMRSecret.length > 0) {
|
||||||
isPRMRSecret.forEach((secret) => {
|
isPRMRSecret.forEach((secret) => {
|
||||||
if (isBuild && !secret.isBuildSecret) {
|
if ((isBuild && !secret.isBuildSecret) || (!isBuild && secret.isBuildSecret)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const build = isBuild && secret.isBuildSecret;
|
const build = isBuild && secret.isBuildSecret;
|
||||||
envs.push(parseSecret(secret, build));
|
envs.push(parseSecret(secret, compose ? false : build));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (!pullmergeRequestId && normalSecrets.length > 0) {
|
if (!pullmergeRequestId && normalSecrets.length > 0) {
|
||||||
normalSecrets.forEach((secret) => {
|
normalSecrets.forEach((secret) => {
|
||||||
if (isBuild && !secret.isBuildSecret) {
|
if ((isBuild && !secret.isBuildSecret) || (!isBuild && secret.isBuildSecret)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const build = isBuild && secret.isBuildSecret;
|
const build = isBuild && secret.isBuildSecret;
|
||||||
envs.push(parseSecret(secret, build));
|
envs.push(parseSecret(secret, compose ? false : build));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const portFound = envs.filter((env) => env.startsWith('PORT'));
|
const portFound = envs.filter((env) => env.startsWith('PORT'));
|
||||||
|
@@ -28,8 +28,10 @@ export default async function (data) {
|
|||||||
throw 'No Services found in docker-compose file.';
|
throw 'No Services found in docker-compose file.';
|
||||||
}
|
}
|
||||||
let envs = [];
|
let envs = [];
|
||||||
|
let buildEnvs = [];
|
||||||
if (secrets.length > 0) {
|
if (secrets.length > 0) {
|
||||||
envs = [...envs, ...generateSecrets(secrets, pullmergeRequestId, false, null)];
|
envs = [...envs, ...generateSecrets(secrets, pullmergeRequestId, false, null)];
|
||||||
|
buildEnvs = [...buildEnvs, ...generateSecrets(secrets, pullmergeRequestId, true, null, true)];
|
||||||
}
|
}
|
||||||
|
|
||||||
const composeVolumes = [];
|
const composeVolumes = [];
|
||||||
@@ -45,11 +47,22 @@ export default async function (data) {
|
|||||||
let networks = {};
|
let networks = {};
|
||||||
for (let [key, value] of Object.entries(dockerComposeYaml.services)) {
|
for (let [key, value] of Object.entries(dockerComposeYaml.services)) {
|
||||||
value['container_name'] = `${applicationId}-${key}`;
|
value['container_name'] = `${applicationId}-${key}`;
|
||||||
|
|
||||||
let environment = typeof value['environment'] === 'undefined' ? [] : value['environment'];
|
let environment = typeof value['environment'] === 'undefined' ? [] : value['environment'];
|
||||||
if (Object.keys(environment).length > 0) {
|
if (Object.keys(environment).length > 0) {
|
||||||
environment = Object.entries(environment).map(([key, value]) => `${key}=${value}`);
|
environment = Object.entries(environment).map(([key, value]) => `${key}=${value}`);
|
||||||
}
|
}
|
||||||
value['environment'] = [...environment, ...envs];
|
value['environment'] = [...environment, ...envs];
|
||||||
|
|
||||||
|
let build = typeof value['build'] === 'undefined' ? [] : value['build'];
|
||||||
|
if (Object.keys(build).length > 0) {
|
||||||
|
build = Object.entries(build).map(([key, value]) => `${key}=${value}`);
|
||||||
|
}
|
||||||
|
value['build'] = {
|
||||||
|
...build,
|
||||||
|
args: [...(build?.args || []), ...buildEnvs]
|
||||||
|
};
|
||||||
|
|
||||||
value['labels'] = labels;
|
value['labels'] = labels;
|
||||||
// TODO: If we support separated volume for each service, we need to add it here
|
// TODO: If we support separated volume for each service, we need to add it here
|
||||||
if (value['volumes']?.length > 0) {
|
if (value['volumes']?.length > 0) {
|
||||||
|
@@ -603,27 +603,28 @@ export function generateSecrets(
|
|||||||
secrets: Array<any>,
|
secrets: Array<any>,
|
||||||
pullmergeRequestId: string,
|
pullmergeRequestId: string,
|
||||||
isBuild = false,
|
isBuild = false,
|
||||||
port = null
|
port = null,
|
||||||
|
compose = false
|
||||||
): Array<string> {
|
): Array<string> {
|
||||||
const envs = [];
|
const envs = [];
|
||||||
const isPRMRSecret = secrets.filter((s) => s.isPRMRSecret);
|
const isPRMRSecret = secrets.filter((s) => s.isPRMRSecret);
|
||||||
const normalSecrets = secrets.filter((s) => !s.isPRMRSecret);
|
const normalSecrets = secrets.filter((s) => !s.isPRMRSecret);
|
||||||
if (pullmergeRequestId && isPRMRSecret.length > 0) {
|
if (pullmergeRequestId && isPRMRSecret.length > 0) {
|
||||||
isPRMRSecret.forEach((secret) => {
|
isPRMRSecret.forEach((secret) => {
|
||||||
if (isBuild && !secret.isBuildSecret) {
|
if ((isBuild && !secret.isBuildSecret) || (!isBuild && secret.isBuildSecret)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const build = isBuild && secret.isBuildSecret;
|
const build = isBuild && secret.isBuildSecret;
|
||||||
envs.push(parseSecret(secret, build));
|
envs.push(parseSecret(secret, compose ? false : build));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (!pullmergeRequestId && normalSecrets.length > 0) {
|
if (!pullmergeRequestId && normalSecrets.length > 0) {
|
||||||
normalSecrets.forEach((secret) => {
|
normalSecrets.forEach((secret) => {
|
||||||
if (isBuild && !secret.isBuildSecret) {
|
if ((isBuild && !secret.isBuildSecret) || (!isBuild && secret.isBuildSecret)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const build = isBuild && secret.isBuildSecret;
|
const build = isBuild && secret.isBuildSecret;
|
||||||
envs.push(parseSecret(secret, build));
|
envs.push(parseSecret(secret, compose ? false : build));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const portFound = envs.filter((env) => env.startsWith('PORT'));
|
const portFound = envs.filter((env) => env.startsWith('PORT'));
|
||||||
|
Reference in New Issue
Block a user