@enspirit/emb 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -31
- package/dist/src/cli/commands/clean.d.ts +3 -1
- package/dist/src/cli/commands/clean.js +13 -2
- package/dist/src/cli/commands/components/build.d.ts +6 -2
- package/dist/src/cli/commands/components/build.js +16 -7
- package/dist/src/cli/commands/config/print.js +2 -3
- package/dist/src/cli/commands/down.d.ts +2 -2
- package/dist/src/cli/commands/down.js +5 -25
- package/dist/src/cli/commands/tasks/index.js +11 -5
- package/dist/src/cli/commands/tasks/run.d.ts +1 -3
- package/dist/src/cli/commands/tasks/run.js +11 -93
- package/dist/src/cli/commands/up.d.ts +1 -1
- package/dist/src/cli/commands/up.js +12 -34
- package/dist/src/config/convert.d.ts +2 -3
- package/dist/src/config/convert.js +4 -11
- package/dist/src/config/index.d.ts +1 -0
- package/dist/src/config/index.js +1 -0
- package/dist/src/config/schema.d.ts +36 -29
- package/dist/src/config/schema.json +42 -25
- package/dist/src/config/types.d.ts +11 -7
- package/dist/src/config/validation.d.ts +2 -0
- package/dist/src/config/validation.js +26 -1
- package/dist/src/docker/compose/index.d.ts +1 -7
- package/dist/src/docker/compose/index.js +1 -13
- package/dist/src/docker/compose/operations/ComposeDownOperation.d.ts +12 -0
- package/dist/src/docker/compose/operations/ComposeDownOperation.js +21 -0
- package/dist/src/docker/compose/operations/ComposeUpOperation.d.ts +13 -0
- package/dist/src/docker/compose/operations/ComposeUpOperation.js +39 -0
- package/dist/src/docker/compose/operations/index.d.ts +2 -0
- package/dist/src/docker/compose/operations/index.js +2 -0
- package/dist/src/docker/operations/containers/ExecContainerOperation.d.ts +22 -0
- package/dist/src/docker/operations/containers/ExecContainerOperation.js +78 -0
- package/dist/src/docker/operations/containers/index.d.ts +1 -0
- package/dist/src/docker/operations/containers/index.js +1 -0
- package/dist/src/monorepo/component.d.ts +2 -2
- package/dist/src/monorepo/component.js +6 -6
- package/dist/src/monorepo/config.d.ts +6 -3
- package/dist/src/monorepo/config.js +22 -4
- package/dist/src/monorepo/index.d.ts +2 -0
- package/dist/src/monorepo/index.js +2 -0
- package/dist/src/monorepo/monorepo.d.ts +4 -2
- package/dist/src/monorepo/monorepo.js +30 -6
- package/dist/src/monorepo/operations/components/BuildComponentsOperation.d.ts +11 -2
- package/dist/src/monorepo/operations/components/BuildComponentsOperation.js +45 -59
- package/dist/src/monorepo/operations/components/GetComponentContainerOperation.d.ts +6 -0
- package/dist/src/monorepo/operations/components/GetComponentContainerOperation.js +21 -0
- package/dist/src/monorepo/operations/components/index.d.ts +1 -0
- package/dist/src/monorepo/operations/components/index.js +1 -0
- package/dist/src/monorepo/operations/index.d.ts +2 -0
- package/dist/src/monorepo/operations/index.js +2 -0
- package/dist/src/monorepo/operations/shell/ExecuteLocalCommandOperation.d.ts +16 -0
- package/dist/src/monorepo/operations/shell/ExecuteLocalCommandOperation.js +30 -0
- package/dist/src/monorepo/operations/shell/index.d.ts +1 -0
- package/dist/src/monorepo/operations/shell/index.js +1 -0
- package/dist/src/monorepo/operations/tasks/RunTasksOperation.d.ts +21 -0
- package/dist/src/monorepo/operations/tasks/RunTasksOperation.js +84 -0
- package/dist/src/monorepo/operations/tasks/index.d.ts +1 -0
- package/dist/src/monorepo/operations/tasks/index.js +1 -0
- package/dist/src/monorepo/plugins/ComponentDiscoverPlugin.d.ts +15 -0
- package/dist/src/monorepo/plugins/{ComponentsDiscover.js → ComponentDiscoverPlugin.js} +16 -2
- package/dist/src/monorepo/plugins/EmbfileLoaderPlugin.d.ts +14 -0
- package/dist/src/monorepo/plugins/EmbfileLoaderPlugin.js +37 -0
- package/dist/src/monorepo/plugins/index.d.ts +3 -2
- package/dist/src/monorepo/plugins/index.js +5 -2
- package/dist/src/monorepo/store/index.js +5 -3
- package/dist/src/monorepo/taskManagerFactory.d.ts +3 -0
- package/dist/src/monorepo/taskManagerFactory.js +20 -0
- package/dist/src/monorepo/types.d.ts +2 -1
- package/dist/src/monorepo/utils/findRunOrder.d.ts +34 -0
- package/dist/src/monorepo/utils/findRunOrder.js +165 -0
- package/dist/src/monorepo/utils/index.d.ts +1 -1
- package/dist/src/monorepo/utils/index.js +1 -1
- package/dist/src/operations/abstract/AbstractOperation.d.ts +1 -1
- package/dist/src/utils/deepMergeArray.d.ts +3 -0
- package/dist/src/utils/deepMergeArray.js +1 -0
- package/oclif.manifest.json +63 -74
- package/package.json +4 -2
- package/dist/src/cli/commands/run/index.d.ts +0 -10
- package/dist/src/cli/commands/run/index.js +0 -49
- package/dist/src/executors/docker.d.ts +0 -6
- package/dist/src/executors/docker.js +0 -14
- package/dist/src/executors/index.d.ts +0 -6
- package/dist/src/executors/index.js +0 -7
- package/dist/src/executors/shell.d.ts +0 -2
- package/dist/src/executors/shell.js +0 -14
- package/dist/src/executors/types.d.ts +0 -8
- package/dist/src/executors/types.js +0 -1
- package/dist/src/monorepo/plugins/ComponentsDiscover.d.ts +0 -6
- package/dist/src/monorepo/utils/findBuildOrder.d.ts +0 -2
- package/dist/src/monorepo/utils/findBuildOrder.js +0 -41
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enspirit/emb",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.7",
|
|
5
5
|
"keywords": ["monorepo", "docker", "taskrunner", "ci", "docker compose", "sentinel", "makefile"],
|
|
6
6
|
"author": "Louis Lambeau <louis.lambeau@enspirit.be>",
|
|
7
7
|
"license": "ISC",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"@oclif/plugin-autocomplete": "^3.2.34",
|
|
36
36
|
"@oclif/plugin-help": "^6.2.32",
|
|
37
37
|
"@oclif/plugin-not-found": "^3.2.63",
|
|
38
|
+
"@oclif/plugin-update": "^4.7.3",
|
|
38
39
|
"@oclif/table": "^0.4.12",
|
|
39
40
|
"ajv": "^8.17.1",
|
|
40
41
|
"colorette": "^2.0.20",
|
|
@@ -103,7 +104,8 @@
|
|
|
103
104
|
"plugins": [
|
|
104
105
|
"@oclif/plugin-help",
|
|
105
106
|
"@oclif/plugin-autocomplete",
|
|
106
|
-
"@oclif/plugin-not-found"
|
|
107
|
+
"@oclif/plugin-not-found",
|
|
108
|
+
"@oclif/plugin-update"
|
|
107
109
|
],
|
|
108
110
|
"topicSeparator": " ",
|
|
109
111
|
"topics": {
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
2
|
-
export default class RunComponentScript extends Command {
|
|
3
|
-
static args: {
|
|
4
|
-
component: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
5
|
-
script: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
-
};
|
|
7
|
-
static description: string;
|
|
8
|
-
static strict: boolean;
|
|
9
|
-
run(): Promise<void>;
|
|
10
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { getContext } from '../../../index.js';
|
|
2
|
-
import { Args, Command } from '@oclif/core';
|
|
3
|
-
import { Listr } from 'listr2';
|
|
4
|
-
import { spawn } from 'node:child_process';
|
|
5
|
-
import fs from 'node:fs/promises';
|
|
6
|
-
export default class RunComponentScript extends Command {
|
|
7
|
-
static args = {
|
|
8
|
-
component: Args.string({
|
|
9
|
-
description: 'Component name',
|
|
10
|
-
required: true,
|
|
11
|
-
}),
|
|
12
|
-
script: Args.string({ description: 'NPM script to run', required: true }),
|
|
13
|
-
};
|
|
14
|
-
static description = "Run an npm script from a component's package.json";
|
|
15
|
-
static strict = true;
|
|
16
|
-
async run() {
|
|
17
|
-
const { args } = await this.parse(RunComponentScript);
|
|
18
|
-
const { monorepo } = getContext();
|
|
19
|
-
const component = monorepo.component(args.component);
|
|
20
|
-
const pkgPath = component.join('package.json');
|
|
21
|
-
const tasks = new Listr([
|
|
22
|
-
{
|
|
23
|
-
rendererOptions: {
|
|
24
|
-
persistentOutput: true,
|
|
25
|
-
},
|
|
26
|
-
async task(_ctx, _task) {
|
|
27
|
-
try {
|
|
28
|
-
const pkgRaw = await fs.readFile(pkgPath, 'utf8');
|
|
29
|
-
const pkg = JSON.parse(pkgRaw);
|
|
30
|
-
if (!pkg.scripts?.[args.script]) {
|
|
31
|
-
throw new Error(`Script "${args.script}" not found in ${component.name}/package.json`);
|
|
32
|
-
}
|
|
33
|
-
return spawn('npm', ['run', args.script], {
|
|
34
|
-
cwd: component.rootdir,
|
|
35
|
-
}).stdout;
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
const error_ = error instanceof Error
|
|
39
|
-
? new TypeError(`Failed to run ${component.name}:${args.script}\n${error.message}`)
|
|
40
|
-
: new Error(`Failed to run ${component.name}:${args.script}\n${error}`);
|
|
41
|
-
throw error_;
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
title: `Running npm script '${args.script}' on ${args.component}`,
|
|
45
|
-
},
|
|
46
|
-
], { concurrent: false });
|
|
47
|
-
await tasks.run();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export const dockerExecutor = {
|
|
2
|
-
async run(script, options) {
|
|
3
|
-
const exec = await options.container.exec({
|
|
4
|
-
AttachStderr: true,
|
|
5
|
-
AttachStdout: true,
|
|
6
|
-
Cmd: ['bash', '-c', script],
|
|
7
|
-
});
|
|
8
|
-
const stream = await exec.start({});
|
|
9
|
-
if (options.out) {
|
|
10
|
-
options.container.modem.demuxStream(stream, options.out, options.out);
|
|
11
|
-
}
|
|
12
|
-
return stream;
|
|
13
|
-
},
|
|
14
|
-
};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { execa } from 'execa';
|
|
2
|
-
export const shellExecutor = {
|
|
3
|
-
async run(script, options) {
|
|
4
|
-
const process = execa(script, {
|
|
5
|
-
all: true,
|
|
6
|
-
cwd: options.cwd,
|
|
7
|
-
shell: true,
|
|
8
|
-
});
|
|
9
|
-
if (options.out) {
|
|
10
|
-
process.all?.pipe(options.out);
|
|
11
|
-
}
|
|
12
|
-
return process;
|
|
13
|
-
},
|
|
14
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import graphlib from 'graphlib';
|
|
2
|
-
const toGraph = (components) => {
|
|
3
|
-
const graph = new graphlib.Graph();
|
|
4
|
-
// Add all components as nodes
|
|
5
|
-
for (const comp of components) {
|
|
6
|
-
graph.setNode(comp.name);
|
|
7
|
-
}
|
|
8
|
-
// Add edges
|
|
9
|
-
for (const comp of components) {
|
|
10
|
-
for (const dep of comp.dependencies ?? []) {
|
|
11
|
-
graph.setEdge(dep.name, comp.name);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return graph;
|
|
15
|
-
};
|
|
16
|
-
export const findBuildOrder = (components, selection) => {
|
|
17
|
-
const hash = components.reduce((cmps, cmp) => {
|
|
18
|
-
cmps[cmp.name] = cmp;
|
|
19
|
-
return cmps;
|
|
20
|
-
}, {});
|
|
21
|
-
const graph = toGraph(components);
|
|
22
|
-
// Detect cycles
|
|
23
|
-
const cycles = graphlib.alg.findCycles(graph);
|
|
24
|
-
if (cycles.length > 0) {
|
|
25
|
-
throw new Error('Circular dependencies detected: ' + JSON.stringify(cycles));
|
|
26
|
-
}
|
|
27
|
-
// Pick nodes that we want to build and rebuild a graph only with these
|
|
28
|
-
const toBuild = selection || components.map((c) => c.name);
|
|
29
|
-
const includingDeps = toBuild
|
|
30
|
-
.reduce((set, name) => {
|
|
31
|
-
graph.predecessors(name)?.forEach((name) => {
|
|
32
|
-
set.add(name);
|
|
33
|
-
});
|
|
34
|
-
return set;
|
|
35
|
-
}, new Set(toBuild))
|
|
36
|
-
.values();
|
|
37
|
-
const newGraph = toGraph([...includingDeps].map((name) => hash[name]));
|
|
38
|
-
// Get build order
|
|
39
|
-
const order = graphlib.alg.topsort(newGraph);
|
|
40
|
-
return order.map((name) => hash[name]);
|
|
41
|
-
};
|