@enspirit/emb
Version:
A replacement for our Makefile-for-monorepos
49 lines (48 loc) • 1.53 kB
JavaScript
import deepmerge from '@fastify/deepmerge';
import { glob } from 'glob';
import { basename, dirname } from 'node:path';
import { MonorepoConfig } from '../index.js';
import { AbstractPlugin } from './plugin.js';
export const AutoDockerPluginDefaultOptions = {
glob: '*/Dockerfile',
};
export class AutoDockerPlugin extends AbstractPlugin {
monorepo;
static name = 'autodocker';
constructor(config, monorepo) {
super({
...AutoDockerPluginDefaultOptions,
...config,
}, monorepo);
this.monorepo = monorepo;
}
async extendConfig(config) {
const files = await glob(this.config.glob || AutoDockerPluginDefaultOptions.glob, {
...this.config,
cwd: this.monorepo.rootDir,
});
const overrides = files.reduce((cmps, path) => {
const rootDir = dirname(path);
const name = basename(rootDir);
const component = config.components[name];
const cfg = {
rootDir,
resources: {
image: {
type: 'docker/image',
params: {},
},
},
};
cmps[name] = component ? deepmerge()(component, cfg) : cfg;
return cmps;
}, {});
return new MonorepoConfig({
...config,
components: {
...config.components,
...overrides,
},
});
}
}