codify-plugin-test 0.0.53-beta15 → 0.0.53-beta16
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/dist/plugin-tester.d.ts +1 -0
- package/dist/plugin-tester.js +50 -3
- package/dist/plugin-tester.js.map +1 -1
- package/dist/spawn.js +1 -1
- package/dist/spawn.js.map +1 -1
- package/dist/test-utils.d.ts +1 -0
- package/dist/test-utils.js +9 -1
- package/dist/test-utils.js.map +1 -1
- package/package.json +1 -1
- package/src/plugin-tester.ts +66 -9
- package/src/spawn.ts +1 -1
- package/src/test-utils.ts +10 -1
package/dist/plugin-tester.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export declare class PluginTester {
|
|
|
12
12
|
validateModify?: (plans: PlanResponseData[]) => Promise<void> | void;
|
|
13
13
|
};
|
|
14
14
|
}): Promise<void>;
|
|
15
|
+
static install(pluginPath: string, configs: ResourceConfig[]): Promise<void>;
|
|
15
16
|
static uninstall(pluginPath: string, configs: ResourceConfig[], options?: {
|
|
16
17
|
validateDestroy?: (plans: PlanResponseData[]) => Promise<void> | void;
|
|
17
18
|
}): Promise<void>;
|
package/dist/plugin-tester.js
CHANGED
|
@@ -21,10 +21,12 @@ export class PluginTester {
|
|
|
21
21
|
}
|
|
22
22
|
// configs = configs.filter((c) => initializeResult.resourceDefinitions.find((rd) => rd.type === c.type)?.operatingSystems?.includes(os.platform() as OS));
|
|
23
23
|
console.info(chalk.cyan('Testing validate...'));
|
|
24
|
-
const validate = await plugin.validate({
|
|
24
|
+
const validate = await plugin.validate({
|
|
25
|
+
configs: configs.map((c) => {
|
|
25
26
|
const { coreParameters, parameters } = splitUserConfig(c);
|
|
26
27
|
return { core: coreParameters, parameters };
|
|
27
|
-
})
|
|
28
|
+
})
|
|
29
|
+
});
|
|
28
30
|
const invalidConfigs = validate.resourceValidations.filter((v) => !v.isValid);
|
|
29
31
|
if (invalidConfigs.length > 0) {
|
|
30
32
|
throw new Error(`The following configs did not validate:\n ${JSON.stringify(invalidConfigs, null, 2)}`);
|
|
@@ -116,6 +118,49 @@ ${JSON.stringify(modifyPlans, null, 2)}`);
|
|
|
116
118
|
await this.uninstall(pluginPath, configsToDestroy.toReversed(), options);
|
|
117
119
|
}
|
|
118
120
|
}
|
|
121
|
+
static async install(pluginPath, configs) {
|
|
122
|
+
const plugin = new PluginProcess(pluginPath);
|
|
123
|
+
try {
|
|
124
|
+
console.info(chalk.cyan('Testing initialization...'));
|
|
125
|
+
const initializeResult = await plugin.initialize();
|
|
126
|
+
const unsupportedConfigs = configs.filter((c) => !initializeResult.resourceDefinitions.some((rd) => rd.type === c.type));
|
|
127
|
+
if (unsupportedConfigs.length > 0) {
|
|
128
|
+
throw new Error(`The plugin does not support the following configs supplied:\n ${JSON.stringify(unsupportedConfigs, null, 2)}\n Initialize result: ${JSON.stringify(initializeResult)}`);
|
|
129
|
+
}
|
|
130
|
+
// configs = configs.filter((c) => initializeResult.resourceDefinitions.find((rd) => rd.type === c.type)?.operatingSystems?.includes(os.platform() as OS));
|
|
131
|
+
console.info(chalk.cyan('Testing validate...'));
|
|
132
|
+
const validate = await plugin.validate({
|
|
133
|
+
configs: configs.map((c) => {
|
|
134
|
+
const { coreParameters, parameters } = splitUserConfig(c);
|
|
135
|
+
return { core: coreParameters, parameters };
|
|
136
|
+
})
|
|
137
|
+
});
|
|
138
|
+
const invalidConfigs = validate.resourceValidations.filter((v) => !v.isValid);
|
|
139
|
+
if (invalidConfigs.length > 0) {
|
|
140
|
+
throw new Error(`The following configs did not validate:\n ${JSON.stringify(invalidConfigs, null, 2)}`);
|
|
141
|
+
}
|
|
142
|
+
console.info(chalk.cyan('Testing plan...'));
|
|
143
|
+
const plans = [];
|
|
144
|
+
for (const config of configs) {
|
|
145
|
+
const { coreParameters, parameters } = splitUserConfig(config);
|
|
146
|
+
plans.push(await plugin.plan({
|
|
147
|
+
core: coreParameters,
|
|
148
|
+
desired: parameters,
|
|
149
|
+
isStateful: false,
|
|
150
|
+
state: undefined,
|
|
151
|
+
}));
|
|
152
|
+
}
|
|
153
|
+
console.info(chalk.cyan('Testing apply...'));
|
|
154
|
+
for (const plan of plans) {
|
|
155
|
+
await plugin.apply({
|
|
156
|
+
planId: plan.planId
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
plugin.kill();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
119
164
|
static async uninstall(pluginPath, configs, options) {
|
|
120
165
|
const destroyPlugin = new PluginProcess(pluginPath);
|
|
121
166
|
try {
|
|
@@ -153,7 +198,9 @@ ${JSON.stringify(modifyPlans, null, 2)}`);
|
|
|
153
198
|
for (const type of typeSet) {
|
|
154
199
|
const sameTypeConfigs = configs.filter((c) => c.type === type);
|
|
155
200
|
if (sameTypeConfigs.length > 1) {
|
|
156
|
-
sameTypeConfigs.forEach((c, idx) => {
|
|
201
|
+
sameTypeConfigs.forEach((c, idx) => {
|
|
202
|
+
c.name = c.name ?? idx.toString();
|
|
203
|
+
});
|
|
157
204
|
}
|
|
158
205
|
configsWithNames.push(...sameTypeConfigs);
|
|
159
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-tester.js","sourceRoot":"","sources":["../src/plugin-tester.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAIL,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG5D,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,KAAK,CAAC,QAAQ,CACnB,UAAkB,EAClB,OAAyB,EACzB,
|
|
1
|
+
{"version":3,"file":"plugin-tester.js","sourceRoot":"","sources":["../src/plugin-tester.ts"],"names":[],"mappings":"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"}
|
package/dist/spawn.js
CHANGED
|
@@ -9,7 +9,7 @@ export function spawnSafe(cmd, options) {
|
|
|
9
9
|
if (cmd.toLowerCase().includes('sudo')) {
|
|
10
10
|
throw new Error('Command must not include sudo');
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
console.log(`Running command: ${options?.requiresRoot ? 'sudo' : ''} ${cmd}` + (options?.cwd ? `(${options?.cwd})` : ''));
|
|
13
13
|
return new Promise((resolve) => {
|
|
14
14
|
const output = [];
|
|
15
15
|
const historyIgnore = ShellUtils.getShell() === Shell.ZSH ? { HISTORY_IGNORE: '*' } : { HISTIGNORE: '*' };
|
package/dist/spawn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,yCAAyC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAgB/C,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,OAAsB;IAC3D,OAAO,SAAS,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,GAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,OAAsB;IAC3D,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,yCAAyC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAgB/C,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,OAAsB;IAC3D,OAAO,SAAS,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,GAAI,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,OAAsB;IAC3D,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAEzH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QAE1G,oFAAoF;QACpF,mBAAmB;QACnB,MAAM,GAAG,GAAG;YACV,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG;YAC/B,YAAY,EAAE,QAAQ;YACtB,YAAY,EAAE,UAAU;YACxB,SAAS,EAAE,WAAW;YACtB,GAAG,aAAa;SACjB,CAAA;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;QACnD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QAE9C,MAAM,OAAO,GAAG,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAE3E,6CAA6C;QAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE;YACzD,GAAG,OAAO;YACV,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,WAAW;YACjB,GAAG;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAA;QAEF,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAA;QAED,MAAM,aAAa,GAAG,CAAC,IAAS,EAAE,EAAE;YAClC,sCAAsC;YACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAA;QAED,mDAAmD;QACnD,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC5C,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;QACzC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YACrB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC7C,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAC3C,CAAC;YAED,OAAO,CAAC;gBACN,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK;gBACvE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;aAC1C,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/test-utils.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ import { IpcMessageV2 } from 'codify-schemas';
|
|
|
2
2
|
import { ChildProcess } from 'node:child_process';
|
|
3
3
|
export declare const CodifyTestUtils: {
|
|
4
4
|
sendMessageAndAwaitResponse(process: ChildProcess, message: IpcMessageV2): Promise<any>;
|
|
5
|
+
ensureHomebrewInstalled(pluginPath: string): Promise<void>;
|
|
5
6
|
};
|
package/dist/test-utils.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import Ajv from 'ajv';
|
|
2
|
-
import { IpcMessageSchema, MessageStatus } from 'codify-schemas';
|
|
2
|
+
import { IpcMessageSchema, MessageStatus, SpawnStatus } from 'codify-schemas';
|
|
3
|
+
import { testSpawn } from './spawn.js';
|
|
4
|
+
import { PluginTester } from './plugin-tester.js';
|
|
3
5
|
const ajv = new Ajv.default({
|
|
4
6
|
strict: true
|
|
5
7
|
});
|
|
@@ -25,5 +27,11 @@ export const CodifyTestUtils = {
|
|
|
25
27
|
process.send(message);
|
|
26
28
|
});
|
|
27
29
|
},
|
|
30
|
+
async ensureHomebrewInstalled(pluginPath) {
|
|
31
|
+
const homebrewQuery = await testSpawn('which homebrew');
|
|
32
|
+
if (homebrewQuery.status !== SpawnStatus.SUCCESS) {
|
|
33
|
+
await PluginTester.install(pluginPath, [{ type: 'homebrew' }]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
28
36
|
};
|
|
29
37
|
//# sourceMappingURL=test-utils.js.map
|
package/dist/test-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAgB,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAgB,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE5F,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;IAC1B,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AACH,MAAM,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,2BAA2B,CAAC,OAAqB,EAAE,OAAqB;QACtE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,QAAsB,EAAE,EAAE;gBAC/C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACnC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtF,CAAC;gBAED,4GAA4G;gBAC5G,IAAI,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;oBAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;wBAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;oBACxB,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBAC1C,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,2DAA2D;YAC3D,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,UAAkB;QAC9C,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACxD,IAAI,aAAa,CAAC,MAAM,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;CAEF,CAAC"}
|
package/package.json
CHANGED
package/src/plugin-tester.ts
CHANGED
|
@@ -26,7 +26,7 @@ export class PluginTester {
|
|
|
26
26
|
modifiedConfigs: ResourceConfig[],
|
|
27
27
|
validateModify?: (plans: PlanResponseData[]) => Promise<void> | void,
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
}): Promise<void> {
|
|
30
30
|
configs = configs.filter((c) => !c.os || c.os.includes(getPlatformOs()));
|
|
31
31
|
const ids = configs
|
|
32
32
|
.map((c) => `${c.type}${c.name ? `.${c.name}` : ''}`)
|
|
@@ -54,10 +54,12 @@ export class PluginTester {
|
|
|
54
54
|
// configs = configs.filter((c) => initializeResult.resourceDefinitions.find((rd) => rd.type === c.type)?.operatingSystems?.includes(os.platform() as OS));
|
|
55
55
|
|
|
56
56
|
console.info(chalk.cyan('Testing validate...'))
|
|
57
|
-
const validate = await plugin.validate({
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
const validate = await plugin.validate({
|
|
58
|
+
configs: configs.map((c) => {
|
|
59
|
+
const { coreParameters, parameters } = splitUserConfig(c)
|
|
60
|
+
return { core: coreParameters, parameters };
|
|
61
|
+
})
|
|
62
|
+
});
|
|
61
63
|
|
|
62
64
|
const invalidConfigs = validate.resourceValidations.filter((v) => !v.isValid)
|
|
63
65
|
if (invalidConfigs.length > 0) {
|
|
@@ -68,7 +70,7 @@ export class PluginTester {
|
|
|
68
70
|
const plans = [];
|
|
69
71
|
for (const config of configs) {
|
|
70
72
|
const { coreParameters, parameters } = splitUserConfig(config);
|
|
71
|
-
|
|
73
|
+
|
|
72
74
|
plans.push(await plugin.plan({
|
|
73
75
|
core: coreParameters,
|
|
74
76
|
desired: parameters,
|
|
@@ -127,7 +129,7 @@ export class PluginTester {
|
|
|
127
129
|
const modifyPlans = [];
|
|
128
130
|
for (const config of options.testModify.modifiedConfigs) {
|
|
129
131
|
const { coreParameters, parameters } = splitUserConfig(config);
|
|
130
|
-
|
|
132
|
+
|
|
131
133
|
modifyPlans.push(await modifyPlugin.plan({
|
|
132
134
|
core: coreParameters,
|
|
133
135
|
desired: parameters,
|
|
@@ -167,6 +169,59 @@ ${JSON.stringify(modifyPlans, null, 2)}`)
|
|
|
167
169
|
}
|
|
168
170
|
}
|
|
169
171
|
|
|
172
|
+
static async install(pluginPath: string, configs: ResourceConfig[]) {
|
|
173
|
+
const plugin = new PluginProcess(pluginPath);
|
|
174
|
+
|
|
175
|
+
try {
|
|
176
|
+
console.info(chalk.cyan('Testing initialization...'))
|
|
177
|
+
const initializeResult = await plugin.initialize();
|
|
178
|
+
|
|
179
|
+
const unsupportedConfigs = configs.filter((c) =>
|
|
180
|
+
!initializeResult.resourceDefinitions.some((rd) => rd.type === c.type)
|
|
181
|
+
)
|
|
182
|
+
if (unsupportedConfigs.length > 0) {
|
|
183
|
+
throw new Error(`The plugin does not support the following configs supplied:\n ${JSON.stringify(unsupportedConfigs, null, 2)}\n Initialize result: ${JSON.stringify(initializeResult)}`)
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// configs = configs.filter((c) => initializeResult.resourceDefinitions.find((rd) => rd.type === c.type)?.operatingSystems?.includes(os.platform() as OS));
|
|
187
|
+
|
|
188
|
+
console.info(chalk.cyan('Testing validate...'))
|
|
189
|
+
const validate = await plugin.validate({
|
|
190
|
+
configs: configs.map((c) => {
|
|
191
|
+
const { coreParameters, parameters } = splitUserConfig(c)
|
|
192
|
+
return { core: coreParameters, parameters };
|
|
193
|
+
})
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
const invalidConfigs = validate.resourceValidations.filter((v) => !v.isValid)
|
|
197
|
+
if (invalidConfigs.length > 0) {
|
|
198
|
+
throw new Error(`The following configs did not validate:\n ${JSON.stringify(invalidConfigs, null, 2)}`)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
console.info(chalk.cyan('Testing plan...'))
|
|
202
|
+
const plans = [];
|
|
203
|
+
for (const config of configs) {
|
|
204
|
+
const { coreParameters, parameters } = splitUserConfig(config);
|
|
205
|
+
|
|
206
|
+
plans.push(await plugin.plan({
|
|
207
|
+
core: coreParameters,
|
|
208
|
+
desired: parameters,
|
|
209
|
+
isStateful: false,
|
|
210
|
+
state: undefined,
|
|
211
|
+
}));
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
console.info(chalk.cyan('Testing apply...'))
|
|
215
|
+
for (const plan of plans) {
|
|
216
|
+
await plugin.apply({
|
|
217
|
+
planId: plan.planId
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
} finally {
|
|
221
|
+
plugin.kill();
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
170
225
|
static async uninstall(pluginPath: string, configs: ResourceConfig[], options?: {
|
|
171
226
|
validateDestroy?: (plans: PlanResponseData[]) => Promise<void> | void
|
|
172
227
|
}) {
|
|
@@ -179,7 +234,7 @@ ${JSON.stringify(modifyPlans, null, 2)}`)
|
|
|
179
234
|
const plans = [];
|
|
180
235
|
for (const config of configs) {
|
|
181
236
|
const { coreParameters, parameters } = splitUserConfig(config);
|
|
182
|
-
|
|
237
|
+
|
|
183
238
|
plans.push(await destroyPlugin.plan({
|
|
184
239
|
core: coreParameters,
|
|
185
240
|
isStateful: true,
|
|
@@ -213,7 +268,9 @@ ${JSON.stringify(modifyPlans, null, 2)}`)
|
|
|
213
268
|
for (const type of typeSet) {
|
|
214
269
|
const sameTypeConfigs = configs.filter((c) => c.type === type);
|
|
215
270
|
if (sameTypeConfigs.length > 1) {
|
|
216
|
-
sameTypeConfigs.forEach((c, idx) => {
|
|
271
|
+
sameTypeConfigs.forEach((c, idx) => {
|
|
272
|
+
c.name = c.name ?? idx.toString()
|
|
273
|
+
});
|
|
217
274
|
}
|
|
218
275
|
|
|
219
276
|
configsWithNames.push(...sameTypeConfigs);
|
package/src/spawn.ts
CHANGED
|
@@ -27,7 +27,7 @@ export function spawnSafe(cmd: string, options?: SpawnOptions): Promise<SpawnRes
|
|
|
27
27
|
throw new Error('Command must not include sudo')
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
console.log(`Running command: ${options?.requiresRoot ? 'sudo' : ''} ${cmd}` + (options?.cwd ? `(${options?.cwd})` : ''))
|
|
31
31
|
|
|
32
32
|
return new Promise((resolve) => {
|
|
33
33
|
const output: string[] = [];
|
package/src/test-utils.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import Ajv from 'ajv';
|
|
2
|
-
import { IpcMessageSchema, IpcMessageV2, MessageStatus } from 'codify-schemas';
|
|
2
|
+
import { IpcMessageSchema, IpcMessageV2, MessageStatus, SpawnStatus } from 'codify-schemas';
|
|
3
3
|
import { ChildProcess } from 'node:child_process';
|
|
4
|
+
import { testSpawn } from './spawn.js';
|
|
5
|
+
import { PluginTester } from './plugin-tester.js';
|
|
4
6
|
|
|
5
7
|
const ajv = new Ajv.default({
|
|
6
8
|
strict: true
|
|
@@ -30,4 +32,11 @@ export const CodifyTestUtils = {
|
|
|
30
32
|
});
|
|
31
33
|
},
|
|
32
34
|
|
|
35
|
+
async ensureHomebrewInstalled(pluginPath: string) {
|
|
36
|
+
const homebrewQuery = await testSpawn('which homebrew');
|
|
37
|
+
if (homebrewQuery.status !== SpawnStatus.SUCCESS) {
|
|
38
|
+
await PluginTester.install(pluginPath, [{ type: 'homebrew' }])
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
33
42
|
};
|