mirror of
https://github.com/balena-io/balena-cli.git
synced 2025-04-08 03:44:13 +00:00
Merge pull request #2177 from balena-io/livepush-compose-dev-overlay
Add support for docker-compose dev overlay
This commit is contained in:
commit
2a4ff75203
1
lib/utils/compose-types.d.ts
vendored
1
lib/utils/compose-types.d.ts
vendored
@ -55,6 +55,7 @@ export interface ComposeOpts {
|
||||
noParentCheck: boolean;
|
||||
projectName: string;
|
||||
projectPath: string;
|
||||
isLocal?: boolean;
|
||||
}
|
||||
|
||||
export interface ComposeCliFlags {
|
||||
|
@ -136,6 +136,7 @@ export async function loadProject(
|
||||
} else {
|
||||
logger.logDebug('Resolving project...');
|
||||
[composeName, composeStr] = await resolveProject(logger, opts.projectPath);
|
||||
|
||||
if (composeName) {
|
||||
if (opts.dockerfilePath) {
|
||||
logger.logWarn(
|
||||
@ -148,11 +149,52 @@ export async function loadProject(
|
||||
);
|
||||
composeStr = compose.defaultComposition(undefined, opts.dockerfilePath);
|
||||
}
|
||||
|
||||
// If local push, merge dev compose overlay
|
||||
if (opts.isLocal) {
|
||||
composeStr = await mergeDevComposeOverlay(
|
||||
logger,
|
||||
composeStr,
|
||||
opts.projectPath,
|
||||
);
|
||||
}
|
||||
}
|
||||
logger.logDebug('Creating project...');
|
||||
return createProject(opts.projectPath, composeStr, opts.projectName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for existence of docker-compose dev overlay file
|
||||
* and merge in services definitions.
|
||||
*/
|
||||
async function mergeDevComposeOverlay(
|
||||
logger: Logger,
|
||||
composeStr: string,
|
||||
projectRoot: string,
|
||||
) {
|
||||
const devOverlayFilename = 'docker-compose.dev.yml';
|
||||
const devOverlayPath = path.join(projectRoot, devOverlayFilename);
|
||||
|
||||
if (await exists(devOverlayPath)) {
|
||||
logger.logInfo(
|
||||
`Docker compose dev overlay detected (${devOverlayFilename}) - merging.`,
|
||||
);
|
||||
try {
|
||||
const yaml = await import('js-yaml');
|
||||
const compose = yaml.load(composeStr);
|
||||
const devOverlay = yaml.load(await fs.readFile(devOverlayPath, 'utf8'));
|
||||
// We only want to merge the services section
|
||||
compose.services = { ...compose.services, ...devOverlay.services };
|
||||
composeStr = yaml.dump(compose);
|
||||
} catch (err) {
|
||||
err.message = `Error merging docker compose dev overlay file "${devOverlayPath}":\n${err.message}`;
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
return composeStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Look into the given directory for valid compose files and return
|
||||
* the contents of the first one found.
|
||||
@ -181,6 +223,7 @@ async function resolveProject(
|
||||
if (!quiet && !composeFileName) {
|
||||
logger.logInfo(`No "docker-compose.yml" file found at "${projectRoot}"`);
|
||||
}
|
||||
|
||||
return [composeFileName, composeFileContents];
|
||||
}
|
||||
|
||||
|
@ -186,6 +186,7 @@ export async function deployToDevice(opts: DeviceDeployOptions): Promise<void> {
|
||||
noParentCheck: opts.noParentCheck,
|
||||
projectName: 'local',
|
||||
projectPath: opts.source,
|
||||
isLocal: true,
|
||||
});
|
||||
|
||||
// Attempt to attach to the device's docker daemon
|
||||
|
Loading…
x
Reference in New Issue
Block a user