k6ctl 1.0.0 → 1.1.0
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/cli.js +20 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/delete.d.ts +7 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +27 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/logs.d.ts +7 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +39 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +10 -0
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +26 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/services/kubernetes.service.d.ts +5 -0
- package/dist/services/kubernetes.service.d.ts.map +1 -1
- package/dist/services/kubernetes.service.js +60 -21
- package/dist/services/kubernetes.service.js.map +1 -1
- package/dist/types/lastRun.types.d.ts +8 -0
- package/dist/types/lastRun.types.d.ts.map +1 -0
- package/dist/types/lastRun.types.js +3 -0
- package/dist/types/lastRun.types.js.map +1 -0
- package/dist/utils/lastRunStore.d.ts +5 -0
- package/dist/utils/lastRunStore.d.ts.map +1 -0
- package/dist/utils/lastRunStore.js +41 -0
- package/dist/utils/lastRunStore.js.map +1 -0
- package/package.json +1 -1
- package/src/cli.ts +23 -0
- package/src/commands/delete.ts +31 -0
- package/src/commands/logs.ts +41 -0
- package/src/commands/run.ts +11 -0
- package/src/commands/status.ts +28 -0
- package/src/services/kubernetes.service.ts +62 -20
- package/src/types/lastRun.types.ts +7 -0
- package/src/utils/lastRunStore.ts +36 -0
- package/test/integration/kubernetes.service.test.ts +24 -19
package/dist/cli.js
CHANGED
|
@@ -4,6 +4,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
5
|
const run_1 = require("./commands/run");
|
|
6
6
|
const list_1 = require("./commands/list");
|
|
7
|
+
const logs_1 = require("./commands/logs");
|
|
8
|
+
const status_1 = require("./commands/status");
|
|
9
|
+
const delete_1 = require("./commands/delete");
|
|
7
10
|
const package_json_1 = require("../package.json");
|
|
8
11
|
const program = new commander_1.Command();
|
|
9
12
|
program
|
|
@@ -24,5 +27,22 @@ program
|
|
|
24
27
|
.addArgument(new commander_1.Argument('[type]', 'Resource type').choices(['pods', 'testruns', 'configmaps']).default('all'))
|
|
25
28
|
.option('-n, --namespace <namespace>', 'Kubernetes namespace', 'default')
|
|
26
29
|
.action(list_1.list);
|
|
30
|
+
program
|
|
31
|
+
.command('logs')
|
|
32
|
+
.description('Show logs from the last test run pods')
|
|
33
|
+
.option('-n, --namespace <namespace>', 'Kubernetes namespace (overrides saved value)')
|
|
34
|
+
.option('-c, --container <name>', 'Container name to fetch logs from')
|
|
35
|
+
.action(logs_1.logs);
|
|
36
|
+
program
|
|
37
|
+
.command('status')
|
|
38
|
+
.description('Show status of the last test run')
|
|
39
|
+
.option('-n, --namespace <namespace>', 'Kubernetes namespace (overrides saved value)')
|
|
40
|
+
.action(status_1.status);
|
|
41
|
+
program
|
|
42
|
+
.command('delete')
|
|
43
|
+
.description('Delete the last test run (TestRun + ConfigMap)')
|
|
44
|
+
.option('-n, --namespace <namespace>', 'Kubernetes namespace (overrides saved value)')
|
|
45
|
+
.option('--keep-configmap', 'Skip deletion of the associated ConfigMap')
|
|
46
|
+
.action(delete_1.deleteLastRun);
|
|
27
47
|
program.parse();
|
|
28
48
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAA8C;AAC9C,wCAAyC;AACzC,0CAAuC;AACvC,kDAA0C;AAE1C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,sBAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,iBAAiB,CAAC;KACvE,MAAM,CAAC,6BAA6B,EAAE,sBAAsB,CAAC;KAC7D,MAAM,CAAC,4BAA4B,EAAE,8BAA8B,CAAC;KACpE,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;KAC/C,MAAM,CAAC,aAAO,CAAC,CAAC;AAEnB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oBAAoB,CAAC;KACjC,WAAW,CAAC,IAAI,oBAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC/G,MAAM,CAAC,6BAA6B,EAAE,sBAAsB,EAAE,SAAS,CAAC;KACxE,MAAM,CAAC,WAAI,CAAC,CAAC;AAEhB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAA8C;AAC9C,wCAAyC;AACzC,0CAAuC;AACvC,0CAAuC;AACvC,8CAA2C;AAC3C,8CAAkD;AAClD,kDAA0C;AAE1C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,sBAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,iBAAiB,CAAC;KACvE,MAAM,CAAC,6BAA6B,EAAE,sBAAsB,CAAC;KAC7D,MAAM,CAAC,4BAA4B,EAAE,8BAA8B,CAAC;KACpE,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;KAC/C,MAAM,CAAC,aAAO,CAAC,CAAC;AAEnB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oBAAoB,CAAC;KACjC,WAAW,CAAC,IAAI,oBAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC/G,MAAM,CAAC,6BAA6B,EAAE,sBAAsB,EAAE,SAAS,CAAC;KACxE,MAAM,CAAC,WAAI,CAAC,CAAC;AAEhB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,6BAA6B,EAAE,8CAA8C,CAAC;KACrF,MAAM,CAAC,wBAAwB,EAAE,mCAAmC,CAAC;KACrE,MAAM,CAAC,WAAI,CAAC,CAAC;AAEhB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,6BAA6B,EAAE,8CAA8C,CAAC;KACrF,MAAM,CAAC,eAAM,CAAC,CAAC;AAElB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,6BAA6B,EAAE,8CAA8C,CAAC;KACrF,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;KACvE,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAIA,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,iBAqBzD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.deleteLastRun = deleteLastRun;
|
|
7
|
+
const kubernetes_service_1 = require("../services/kubernetes.service");
|
|
8
|
+
const lastRunStore_1 = require("../utils/lastRunStore");
|
|
9
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
10
|
+
async function deleteLastRun(options) {
|
|
11
|
+
const lastRun = await (0, lastRunStore_1.loadLastRun)();
|
|
12
|
+
if (!lastRun) {
|
|
13
|
+
logger_1.default.error('No last run found. Run a test first with: k6ctl run <script>');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
const namespace = options.namespace ?? lastRun.namespace;
|
|
17
|
+
logger_1.default.info(`Deleting TestRun: ${lastRun.testRunName} (namespace: ${namespace})`);
|
|
18
|
+
const kubernetesService = (0, kubernetes_service_1.createDefaultKubernetesService)();
|
|
19
|
+
await kubernetesService.deleteTestRunByName(lastRun.testRunName, namespace);
|
|
20
|
+
if (!options.keepConfigmap) {
|
|
21
|
+
logger_1.default.info(`Deleting ConfigMap: ${lastRun.configMapName} (namespace: ${namespace})`);
|
|
22
|
+
await kubernetesService.deleteConfigMap(lastRun.configMapName, namespace);
|
|
23
|
+
}
|
|
24
|
+
await (0, lastRunStore_1.clearLastRun)();
|
|
25
|
+
logger_1.default.info('Last run state cleared.');
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":";;;;;AASA,sCAqBC;AA9BD,uEAAgF;AAChF,wDAAkE;AAClE,6DAAqC;AAO9B,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAW,GAAE,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,gBAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;IACzD,gBAAM,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,WAAW,gBAAgB,SAAS,GAAG,CAAC,CAAC;IAElF,MAAM,iBAAiB,GAAG,IAAA,mDAA8B,GAAE,CAAC;IAE3D,MAAM,iBAAiB,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAE5E,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3B,gBAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,aAAa,gBAAgB,SAAS,GAAG,CAAC,CAAC;QACtF,MAAM,iBAAiB,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,IAAA,2BAAY,GAAE,CAAC;IACrB,gBAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,iBA+B9C"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logs = logs;
|
|
7
|
+
const kubernetes_service_1 = require("../services/kubernetes.service");
|
|
8
|
+
const lastRunStore_1 = require("../utils/lastRunStore");
|
|
9
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
10
|
+
async function logs(options) {
|
|
11
|
+
const lastRun = await (0, lastRunStore_1.loadLastRun)();
|
|
12
|
+
if (!lastRun) {
|
|
13
|
+
logger_1.default.error('No last run found. Run a test first with: k6ctl run <script>');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
const namespace = options.namespace ?? lastRun.namespace;
|
|
17
|
+
logger_1.default.info(`Fetching logs for TestRun: ${lastRun.testRunName} (namespace: ${namespace})`);
|
|
18
|
+
const kubernetesService = (0, kubernetes_service_1.createDefaultKubernetesService)();
|
|
19
|
+
const podList = await kubernetesService.getPodsForTestRun(lastRun.testRunName, namespace);
|
|
20
|
+
const pods = podList.items ?? [];
|
|
21
|
+
if (pods.length === 0) {
|
|
22
|
+
logger_1.default.warn(`No pods found for TestRun ${lastRun.testRunName}. The run may have already cleaned up.`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
for (const pod of pods) {
|
|
26
|
+
const podName = pod.metadata?.name ?? 'unknown';
|
|
27
|
+
console.log(`\n${'─'.repeat(60)}`);
|
|
28
|
+
console.log(`Pod: ${podName}`);
|
|
29
|
+
console.log('─'.repeat(60));
|
|
30
|
+
try {
|
|
31
|
+
const podLogs = await kubernetesService.getPodLogs(podName, namespace, options.container);
|
|
32
|
+
console.log(podLogs);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
logger_1.default.error(`Failed to get logs for pod ${podName}: ${error instanceof Error ? error.message : String(error)}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":";;;;;AASA,oBA+BC;AAxCD,uEAAgF;AAChF,wDAAoD;AACpD,6DAAqC;AAO9B,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC7C,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAW,GAAE,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,gBAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;IACzD,gBAAM,CAAC,IAAI,CAAC,8BAA8B,OAAO,CAAC,WAAW,gBAAgB,SAAS,GAAG,CAAC,CAAC;IAE3F,MAAM,iBAAiB,GAAG,IAAA,mDAA8B,GAAE,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC1F,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,gBAAM,CAAC,IAAI,CAAC,6BAA6B,OAAO,CAAC,WAAW,wCAAwC,CAAC,CAAC;QACtG,OAAO;IACT,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,SAAS,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YAC1F,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,KAAK,CAAC,8BAA8B,OAAO,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAQA,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,iBA+CpE"}
|
package/dist/commands/run.js
CHANGED
|
@@ -40,6 +40,7 @@ const configLoader_1 = require("../utils/configLoader");
|
|
|
40
40
|
const env_1 = require("../utils/env");
|
|
41
41
|
const logger_1 = __importStar(require("../utils/logger"));
|
|
42
42
|
const testRunManifestBuilder_1 = require("../utils/testRunManifestBuilder");
|
|
43
|
+
const lastRunStore_1 = require("../utils/lastRunStore");
|
|
43
44
|
async function runTest(scriptPath, options) {
|
|
44
45
|
if (options.verbose)
|
|
45
46
|
(0, logger_1.setLogLevel)('debug');
|
|
@@ -68,6 +69,15 @@ async function runTest(scriptPath, options) {
|
|
|
68
69
|
const testRunManifest = (0, testRunManifestBuilder_1.buildTestRunManifest)(configMap, archive, config, envVars);
|
|
69
70
|
// Create testrun resource
|
|
70
71
|
const testRunResult = await kubernetesService.createTestRun(testRunManifest);
|
|
72
|
+
// Persist last run state for use by logs/status/delete commands
|
|
73
|
+
await (0, lastRunStore_1.saveLastRun)({
|
|
74
|
+
testRunName: testRunManifest.metadata.name,
|
|
75
|
+
namespace: testRunManifest.metadata.namespace,
|
|
76
|
+
configMapName: configMap.configMapName,
|
|
77
|
+
scriptPath,
|
|
78
|
+
createdAt: new Date().toISOString(),
|
|
79
|
+
});
|
|
80
|
+
logger_1.default.info(`Last run saved: ${testRunManifest.metadata.name} (namespace: ${testRunManifest.metadata.namespace})`);
|
|
71
81
|
}
|
|
72
82
|
catch (error) {
|
|
73
83
|
logger_1.default.error(`Error running test: ${error instanceof Error ? error.message : String(error)}`);
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,0BA+CC;AA9DD,uEAAgF;AAChF,+DAA2D;AAC3D,wDAAqD;AACrD,sCAAkD;AAClD,0DAAsD;AACtD,4EAAuE;AACvE,wDAAoD;AAS7C,KAAK,UAAU,OAAO,CAAC,UAAkB,EAAE,OAAmB;IACnE,IAAI,OAAO,CAAC,OAAO;QAAE,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;IAC1C,gBAAM,CAAC,KAAK,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;IAC/C,gBAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,aAAa,GAAG,IAAI,8BAAa,EAAE,CAAC;QAC1C,MAAM,iBAAiB,GAAG,IAAA,mDAA8B,GAAE,CAAC;QAE3D,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAE5D,cAAc;QACd,MAAM,MAAM,GAAG,IAAA,2BAAY,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE5C,6BAA6B;QAC7B,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,IAAA,wBAAkB,GAAE,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gBAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;YAC5E,gBAAM,CAAC,KAAK,CAAC,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjH,CAAC;QAED,mCAAmC;QACnC,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAErF,gBAAgB;QAChB,MAAM,eAAe,GAAG,IAAA,6CAAoB,EAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAElF,0BAA0B;QAC1B,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAE7E,gEAAgE;QAChE,MAAM,IAAA,0BAAW,EAAC;YAChB,WAAW,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI;YAC1C,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,SAAS;YAC7C,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,UAAU;YACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QACH,gBAAM,CAAC,IAAI,CAAC,mBAAmB,eAAe,CAAC,QAAQ,CAAC,IAAI,gBAAgB,eAAe,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;IAErH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAM,CAAC,KAAK,CAAC,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAKA,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,iBAkBlD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.status = status;
|
|
7
|
+
const kubernetes_service_1 = require("../services/kubernetes.service");
|
|
8
|
+
const kubernetes_service_2 = require("../services/kubernetes.service");
|
|
9
|
+
const lastRunStore_1 = require("../utils/lastRunStore");
|
|
10
|
+
const logger_1 = __importDefault(require("../utils/logger"));
|
|
11
|
+
async function status(options) {
|
|
12
|
+
const lastRun = await (0, lastRunStore_1.loadLastRun)();
|
|
13
|
+
if (!lastRun) {
|
|
14
|
+
logger_1.default.error('No last run found. Run a test first with: k6ctl run <script>');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const namespace = options.namespace ?? lastRun.namespace;
|
|
18
|
+
logger_1.default.info(`Status for TestRun: ${lastRun.testRunName} (namespace: ${namespace})`);
|
|
19
|
+
logger_1.default.info(`Script: ${lastRun.scriptPath} | Started: ${lastRun.createdAt}`);
|
|
20
|
+
const kubernetesService = (0, kubernetes_service_1.createDefaultKubernetesService)();
|
|
21
|
+
const testRun = await kubernetesService.getTestRun(lastRun.testRunName, namespace);
|
|
22
|
+
(0, kubernetes_service_2.printTestRunsTable)([testRun]);
|
|
23
|
+
const podList = await kubernetesService.getPodsForTestRun(lastRun.testRunName, namespace);
|
|
24
|
+
(0, kubernetes_service_2.printPodsTable)(podList);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;;;;AASA,wBAkBC;AA3BD,uEAAgF;AAChF,uEAAoF;AACpF,wDAAoD;AACpD,6DAAqC;AAM9B,KAAK,UAAU,MAAM,CAAC,OAAsB;IACjD,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAW,GAAE,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,gBAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;IACzD,gBAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,WAAW,gBAAgB,SAAS,GAAG,CAAC,CAAC;IACpF,gBAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,UAAU,iBAAiB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE/E,MAAM,iBAAiB,GAAG,IAAA,mDAA8B,GAAE,CAAC;IAE3D,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACnF,IAAA,uCAAkB,EAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC1F,IAAA,mCAAc,EAAC,OAAO,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -12,6 +12,11 @@ export declare class KubernetesService {
|
|
|
12
12
|
listTestRuns(namespace?: string): Promise<any>;
|
|
13
13
|
listPods(namespace?: string): Promise<any>;
|
|
14
14
|
listConfigMaps(namespace?: string): Promise<any>;
|
|
15
|
+
private getTestRunCustomObjectParams;
|
|
16
|
+
deleteTestRunByName(testRunName: string, namespace?: string): Promise<void>;
|
|
17
|
+
getTestRun(testRunName: string, namespace?: string): Promise<any>;
|
|
18
|
+
getPodsForTestRun(testRunName: string, namespace?: string): Promise<k8s.V1PodList>;
|
|
19
|
+
getPodLogs(podName: string, namespace?: string, container?: string): Promise<string>;
|
|
15
20
|
}
|
|
16
21
|
export declare function createDefaultKubernetesService(context?: string): KubernetesService;
|
|
17
22
|
export declare function printPodsTable(data: k8s.V1PodList): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kubernetes.service.d.ts","sourceRoot":"","sources":["../../src/services/kubernetes.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"kubernetes.service.d.ts","sourceRoot":"","sources":["../../src/services/kubernetes.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAIjE,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAiB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAApD,MAAM,EAAE,GAAG,CAAC,SAAS,EAAmB,YAAY,EAAE,GAAG,CAAC,gBAAgB;IAEjG,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAmCvF,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxE,aAAa,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC;IAkB7D,aAAa,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,YAAY,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IAezD,QAAQ,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IAUrD,cAAc,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IAUjE,OAAO,CAAC,4BAA4B;IAU9B,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtF,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IAU5E,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAa7F,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAatG;AA2BD,wBAAgB,8BAA8B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAOlF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAmCxD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,GAAG,IAAI,CAgBpE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,CAkBpE"}
|
|
@@ -46,6 +46,7 @@ const node_path_1 = require("node:path");
|
|
|
46
46
|
const k8s = __importStar(require("@kubernetes/client-node"));
|
|
47
47
|
const logger_1 = __importDefault(require("../utils/logger"));
|
|
48
48
|
const table_util_1 = require("../utils/table.util");
|
|
49
|
+
const promises_1 = require("node:fs/promises");
|
|
49
50
|
class KubernetesService {
|
|
50
51
|
k8sApi;
|
|
51
52
|
k8sCustomApi;
|
|
@@ -78,6 +79,8 @@ class KubernetesService {
|
|
|
78
79
|
};
|
|
79
80
|
await this.k8sApi.createNamespacedConfigMap({ namespace, body: configMap });
|
|
80
81
|
logger_1.default.info(`ConfigMap ${configMapName} created in namespace ${namespace}`);
|
|
82
|
+
// Clean up the archive file after creating the ConfigMap
|
|
83
|
+
await (0, promises_1.unlink)(archiveFile.archivePath).catch(error => console.error(`Error deleting file ${archiveFile.archivePath}:`, error));
|
|
81
84
|
return { namespace, configMapName };
|
|
82
85
|
}
|
|
83
86
|
async deleteConfigMap(configMapName, namespace) {
|
|
@@ -109,21 +112,7 @@ class KubernetesService {
|
|
|
109
112
|
}
|
|
110
113
|
}
|
|
111
114
|
async deleteTestRun(testRunManifest) {
|
|
112
|
-
|
|
113
|
-
const response = await this.k8sCustomApi.deleteNamespacedCustomObject({
|
|
114
|
-
group: testRunManifest.apiVersion.split('/')[0],
|
|
115
|
-
version: testRunManifest.apiVersion.split('/')[1],
|
|
116
|
-
namespace: testRunManifest.metadata.namespace,
|
|
117
|
-
plural: "testruns",
|
|
118
|
-
name: testRunManifest.metadata.name,
|
|
119
|
-
});
|
|
120
|
-
logger_1.default.info(`TestRun ${testRunManifest.metadata.name} deleted from namespace ${testRunManifest.metadata.namespace}`);
|
|
121
|
-
logger_1.default.debug(`Delete response: ${JSON.stringify(response)}`);
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
const errorMessage = error.message ?? 'Unknown error';
|
|
125
|
-
throw new Error(`Failed to delete TestRun ${testRunManifest.metadata.name} from namespace ${testRunManifest.metadata.namespace}: ${errorMessage}`);
|
|
126
|
-
}
|
|
115
|
+
await this.deleteTestRunByName(testRunManifest.metadata.name, testRunManifest.metadata.namespace);
|
|
127
116
|
}
|
|
128
117
|
async listTestRuns(namespace = "default") {
|
|
129
118
|
try {
|
|
@@ -133,8 +122,6 @@ class KubernetesService {
|
|
|
133
122
|
namespace: namespace,
|
|
134
123
|
plural: "testruns",
|
|
135
124
|
});
|
|
136
|
-
// logger.debug(`List response: ${JSON.stringify(response)}`);
|
|
137
|
-
printTestRunsTable(response.items ?? []);
|
|
138
125
|
return response;
|
|
139
126
|
}
|
|
140
127
|
catch (error) {
|
|
@@ -145,8 +132,6 @@ class KubernetesService {
|
|
|
145
132
|
async listPods(namespace = "default") {
|
|
146
133
|
try {
|
|
147
134
|
const response = await this.k8sApi.listNamespacedPod({ namespace });
|
|
148
|
-
printPodsTable(response);
|
|
149
|
-
// logger.debug(`List Pods: ${JSON.stringify(response)}`);
|
|
150
135
|
return response;
|
|
151
136
|
}
|
|
152
137
|
catch (error) {
|
|
@@ -157,8 +142,6 @@ class KubernetesService {
|
|
|
157
142
|
async listConfigMaps(namespace = "default") {
|
|
158
143
|
try {
|
|
159
144
|
const response = await this.k8sApi.listNamespacedConfigMap({ namespace });
|
|
160
|
-
printConfigMapsTable(response);
|
|
161
|
-
// logger.debug(`List ConfigMaps: ${JSON.stringify(response)}`);
|
|
162
145
|
return response;
|
|
163
146
|
}
|
|
164
147
|
catch (error) {
|
|
@@ -166,6 +149,62 @@ class KubernetesService {
|
|
|
166
149
|
throw new Error(`Failed to list ConfigMaps in namespace ${namespace}: ${errorMessage}`);
|
|
167
150
|
}
|
|
168
151
|
}
|
|
152
|
+
getTestRunCustomObjectParams(testRunName, namespace = "default") {
|
|
153
|
+
return {
|
|
154
|
+
group: "k6.io",
|
|
155
|
+
version: "v1alpha1",
|
|
156
|
+
namespace,
|
|
157
|
+
plural: "testruns",
|
|
158
|
+
name: testRunName,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
async deleteTestRunByName(testRunName, namespace = "default") {
|
|
162
|
+
try {
|
|
163
|
+
await this.k8sCustomApi.deleteNamespacedCustomObject(this.getTestRunCustomObjectParams(testRunName, namespace));
|
|
164
|
+
logger_1.default.info(`TestRun ${testRunName} deleted from namespace ${namespace}`);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
const errorMessage = error.message ?? 'Unknown error';
|
|
168
|
+
throw new Error(`Failed to delete TestRun ${testRunName} from namespace ${namespace}: ${errorMessage}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async getTestRun(testRunName, namespace = "default") {
|
|
172
|
+
try {
|
|
173
|
+
const response = await this.k8sCustomApi.getNamespacedCustomObject(this.getTestRunCustomObjectParams(testRunName, namespace));
|
|
174
|
+
return response;
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
const errorMessage = error.message ?? 'Unknown error';
|
|
178
|
+
throw new Error(`Failed to get TestRun ${testRunName} in namespace ${namespace}: ${errorMessage}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async getPodsForTestRun(testRunName, namespace = "default") {
|
|
182
|
+
try {
|
|
183
|
+
const response = await this.k8sApi.listNamespacedPod({
|
|
184
|
+
namespace,
|
|
185
|
+
labelSelector: `k6_cr=${testRunName}`,
|
|
186
|
+
});
|
|
187
|
+
return response;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
const errorMessage = error.message ?? 'Unknown error';
|
|
191
|
+
throw new Error(`Failed to get pods for TestRun ${testRunName} in namespace ${namespace}: ${errorMessage}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async getPodLogs(podName, namespace = "default", container) {
|
|
195
|
+
try {
|
|
196
|
+
const response = await this.k8sApi.readNamespacedPodLog({
|
|
197
|
+
name: podName,
|
|
198
|
+
namespace,
|
|
199
|
+
...(container ? { container } : {}),
|
|
200
|
+
});
|
|
201
|
+
return response;
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
const errorMessage = error.message ?? 'Unknown error';
|
|
205
|
+
throw new Error(`Failed to get logs for pod ${podName} in namespace ${namespace}: ${errorMessage}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
169
208
|
}
|
|
170
209
|
exports.KubernetesService = KubernetesService;
|
|
171
210
|
function fmt(v) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kubernetes.service.js","sourceRoot":"","sources":["../../src/services/kubernetes.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kubernetes.service.js","sourceRoot":"","sources":["../../src/services/kubernetes.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lastRun.types.d.ts","sourceRoot":"","sources":["../../src/types/lastRun.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lastRun.types.js","sourceRoot":"","sources":["../../src/types/lastRun.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LastRunState } from '../types/lastRun.types';
|
|
2
|
+
export declare function saveLastRun(state: LastRunState): Promise<void>;
|
|
3
|
+
export declare function loadLastRun(): Promise<LastRunState | null>;
|
|
4
|
+
export declare function clearLastRun(): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=lastRunStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lastRunStore.d.ts","sourceRoot":"","sources":["../../src/utils/lastRunStore.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQ3D,wBAAsB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAQhE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAQlD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.saveLastRun = saveLastRun;
|
|
7
|
+
exports.loadLastRun = loadLastRun;
|
|
8
|
+
exports.clearLastRun = clearLastRun;
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const logger_1 = __importDefault(require("./logger"));
|
|
12
|
+
const LAST_RUN_FILE = '.k6ctl-last-run.json';
|
|
13
|
+
function getFilePath() {
|
|
14
|
+
return path_1.default.join(process.cwd(), LAST_RUN_FILE);
|
|
15
|
+
}
|
|
16
|
+
async function saveLastRun(state) {
|
|
17
|
+
const filePath = getFilePath();
|
|
18
|
+
await fs_1.promises.writeFile(filePath, JSON.stringify(state, null, 2), 'utf8');
|
|
19
|
+
logger_1.default.debug(`Last run state saved to ${filePath}`);
|
|
20
|
+
}
|
|
21
|
+
async function loadLastRun() {
|
|
22
|
+
const filePath = getFilePath();
|
|
23
|
+
try {
|
|
24
|
+
const content = await fs_1.promises.readFile(filePath, 'utf8');
|
|
25
|
+
return JSON.parse(content);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function clearLastRun() {
|
|
32
|
+
const filePath = getFilePath();
|
|
33
|
+
try {
|
|
34
|
+
await fs_1.promises.unlink(filePath);
|
|
35
|
+
logger_1.default.debug(`Last run state cleared (${filePath})`);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
logger_1.default.info('No last run state to clear.');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=lastRunStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lastRunStore.js","sourceRoot":"","sources":["../../src/utils/lastRunStore.ts"],"names":[],"mappings":";;;;;AAWA,kCAIC;AAED,kCAQC;AAED,oCAQC;AAnCD,2BAAoC;AACpC,gDAAwB;AACxB,sDAA8B;AAG9B,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAE7C,SAAS,WAAW;IAClB,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,KAAmB;IACnD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,aAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACrE,gBAAM,CAAC,KAAK,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;AACtD,CAAC;AAEM,KAAK,UAAU,WAAW;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,YAAY;IAChC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,aAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,gBAAM,CAAC,KAAK,CAAC,2BAA2B,QAAQ,GAAG,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,gBAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
package/src/cli.ts
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
import { Argument, Command } from 'commander';
|
|
4
4
|
import { runTest } from './commands/run';
|
|
5
5
|
import { list } from './commands/list';
|
|
6
|
+
import { logs } from './commands/logs';
|
|
7
|
+
import { status } from './commands/status';
|
|
8
|
+
import { deleteLastRun } from './commands/delete';
|
|
6
9
|
import { version } from '../package.json';
|
|
7
10
|
|
|
8
11
|
const program = new Command();
|
|
@@ -28,4 +31,24 @@ program
|
|
|
28
31
|
.option('-n, --namespace <namespace>', 'Kubernetes namespace', 'default')
|
|
29
32
|
.action(list);
|
|
30
33
|
|
|
34
|
+
program
|
|
35
|
+
.command('logs')
|
|
36
|
+
.description('Show logs from the last test run pods')
|
|
37
|
+
.option('-n, --namespace <namespace>', 'Kubernetes namespace (overrides saved value)')
|
|
38
|
+
.option('-c, --container <name>', 'Container name to fetch logs from')
|
|
39
|
+
.action(logs);
|
|
40
|
+
|
|
41
|
+
program
|
|
42
|
+
.command('status')
|
|
43
|
+
.description('Show status of the last test run')
|
|
44
|
+
.option('-n, --namespace <namespace>', 'Kubernetes namespace (overrides saved value)')
|
|
45
|
+
.action(status);
|
|
46
|
+
|
|
47
|
+
program
|
|
48
|
+
.command('delete')
|
|
49
|
+
.description('Delete the last test run (TestRun + ConfigMap)')
|
|
50
|
+
.option('-n, --namespace <namespace>', 'Kubernetes namespace (overrides saved value)')
|
|
51
|
+
.option('--keep-configmap', 'Skip deletion of the associated ConfigMap')
|
|
52
|
+
.action(deleteLastRun);
|
|
53
|
+
|
|
31
54
|
program.parse();
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createDefaultKubernetesService } from '../services/kubernetes.service';
|
|
2
|
+
import { loadLastRun, clearLastRun } from '../utils/lastRunStore';
|
|
3
|
+
import logger from '../utils/logger';
|
|
4
|
+
|
|
5
|
+
interface DeleteOptions {
|
|
6
|
+
namespace?: string;
|
|
7
|
+
keepConfigmap?: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export async function deleteLastRun(options: DeleteOptions) {
|
|
11
|
+
const lastRun = await loadLastRun();
|
|
12
|
+
if (!lastRun) {
|
|
13
|
+
logger.error('No last run found. Run a test first with: k6ctl run <script>');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const namespace = options.namespace ?? lastRun.namespace;
|
|
18
|
+
logger.info(`Deleting TestRun: ${lastRun.testRunName} (namespace: ${namespace})`);
|
|
19
|
+
|
|
20
|
+
const kubernetesService = createDefaultKubernetesService();
|
|
21
|
+
|
|
22
|
+
await kubernetesService.deleteTestRunByName(lastRun.testRunName, namespace);
|
|
23
|
+
|
|
24
|
+
if (!options.keepConfigmap) {
|
|
25
|
+
logger.info(`Deleting ConfigMap: ${lastRun.configMapName} (namespace: ${namespace})`);
|
|
26
|
+
await kubernetesService.deleteConfigMap(lastRun.configMapName, namespace);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
await clearLastRun();
|
|
30
|
+
logger.info('Last run state cleared.');
|
|
31
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { createDefaultKubernetesService } from '../services/kubernetes.service';
|
|
2
|
+
import { loadLastRun } from '../utils/lastRunStore';
|
|
3
|
+
import logger from '../utils/logger';
|
|
4
|
+
|
|
5
|
+
interface LogsOptions {
|
|
6
|
+
namespace?: string;
|
|
7
|
+
container?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export async function logs(options: LogsOptions) {
|
|
11
|
+
const lastRun = await loadLastRun();
|
|
12
|
+
if (!lastRun) {
|
|
13
|
+
logger.error('No last run found. Run a test first with: k6ctl run <script>');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const namespace = options.namespace ?? lastRun.namespace;
|
|
18
|
+
logger.info(`Fetching logs for TestRun: ${lastRun.testRunName} (namespace: ${namespace})`);
|
|
19
|
+
|
|
20
|
+
const kubernetesService = createDefaultKubernetesService();
|
|
21
|
+
const podList = await kubernetesService.getPodsForTestRun(lastRun.testRunName, namespace);
|
|
22
|
+
const pods = podList.items ?? [];
|
|
23
|
+
|
|
24
|
+
if (pods.length === 0) {
|
|
25
|
+
logger.warn(`No pods found for TestRun ${lastRun.testRunName}. The run may have already cleaned up.`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
for (const pod of pods) {
|
|
30
|
+
const podName = pod.metadata?.name ?? 'unknown';
|
|
31
|
+
console.log(`\n${'─'.repeat(60)}`);
|
|
32
|
+
console.log(`Pod: ${podName}`);
|
|
33
|
+
console.log('─'.repeat(60));
|
|
34
|
+
try {
|
|
35
|
+
const podLogs = await kubernetesService.getPodLogs(podName, namespace, options.container);
|
|
36
|
+
console.log(podLogs);
|
|
37
|
+
} catch (error) {
|
|
38
|
+
logger.error(`Failed to get logs for pod ${podName}: ${error instanceof Error ? error.message : String(error)}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
package/src/commands/run.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { loadK6Config } from '../utils/configLoader';
|
|
|
4
4
|
import { loadAndValidateEnv } from '../utils/env';
|
|
5
5
|
import logger, { setLogLevel } from '../utils/logger';
|
|
6
6
|
import { buildTestRunManifest } from '../utils/testRunManifestBuilder';
|
|
7
|
+
import { saveLastRun } from '../utils/lastRunStore';
|
|
7
8
|
|
|
8
9
|
interface RunOptions {
|
|
9
10
|
config: string;
|
|
@@ -46,6 +47,16 @@ export async function runTest(scriptPath: string, options: RunOptions) {
|
|
|
46
47
|
// Create testrun resource
|
|
47
48
|
const testRunResult = await kubernetesService.createTestRun(testRunManifest);
|
|
48
49
|
|
|
50
|
+
// Persist last run state for use by logs/status/delete commands
|
|
51
|
+
await saveLastRun({
|
|
52
|
+
testRunName: testRunManifest.metadata.name,
|
|
53
|
+
namespace: testRunManifest.metadata.namespace,
|
|
54
|
+
configMapName: configMap.configMapName,
|
|
55
|
+
scriptPath,
|
|
56
|
+
createdAt: new Date().toISOString(),
|
|
57
|
+
});
|
|
58
|
+
logger.info(`Last run saved: ${testRunManifest.metadata.name} (namespace: ${testRunManifest.metadata.namespace})`);
|
|
59
|
+
|
|
49
60
|
} catch (error) {
|
|
50
61
|
logger.error(`Error running test: ${error instanceof Error ? error.message : String(error)}`);
|
|
51
62
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createDefaultKubernetesService } from '../services/kubernetes.service';
|
|
2
|
+
import { printPodsTable, printTestRunsTable } from '../services/kubernetes.service';
|
|
3
|
+
import { loadLastRun } from '../utils/lastRunStore';
|
|
4
|
+
import logger from '../utils/logger';
|
|
5
|
+
|
|
6
|
+
interface StatusOptions {
|
|
7
|
+
namespace?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export async function status(options: StatusOptions) {
|
|
11
|
+
const lastRun = await loadLastRun();
|
|
12
|
+
if (!lastRun) {
|
|
13
|
+
logger.error('No last run found. Run a test first with: k6ctl run <script>');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const namespace = options.namespace ?? lastRun.namespace;
|
|
18
|
+
logger.info(`Status for TestRun: ${lastRun.testRunName} (namespace: ${namespace})`);
|
|
19
|
+
logger.info(`Script: ${lastRun.scriptPath} | Started: ${lastRun.createdAt}`);
|
|
20
|
+
|
|
21
|
+
const kubernetesService = createDefaultKubernetesService();
|
|
22
|
+
|
|
23
|
+
const testRun = await kubernetesService.getTestRun(lastRun.testRunName, namespace);
|
|
24
|
+
printTestRunsTable([testRun]);
|
|
25
|
+
|
|
26
|
+
const podList = await kubernetesService.getPodsForTestRun(lastRun.testRunName, namespace);
|
|
27
|
+
printPodsTable(podList);
|
|
28
|
+
}
|
|
@@ -5,6 +5,7 @@ import logger from '../utils/logger';
|
|
|
5
5
|
import type { ArchivedFile, ConfigMapResult } from '../types/kubernetes.types';
|
|
6
6
|
import { TestRunManifest } from '../types/testRunManifest.types';
|
|
7
7
|
import { printTableGeneric } from '../utils/table.util';
|
|
8
|
+
import { unlink } from 'node:fs/promises';
|
|
8
9
|
|
|
9
10
|
export class KubernetesService {
|
|
10
11
|
constructor(private readonly k8sApi: k8s.CoreV1Api, private readonly k8sCustomApi: k8s.CustomObjectsApi) { }
|
|
@@ -38,6 +39,9 @@ export class KubernetesService {
|
|
|
38
39
|
|
|
39
40
|
await this.k8sApi.createNamespacedConfigMap({ namespace, body: configMap });
|
|
40
41
|
logger.info(`ConfigMap ${configMapName} created in namespace ${namespace}`);
|
|
42
|
+
|
|
43
|
+
// Clean up the archive file after creating the ConfigMap
|
|
44
|
+
await unlink(archiveFile.archivePath).catch(error => console.error(`Error deleting file ${archiveFile.archivePath}:`, error));
|
|
41
45
|
return { namespace, configMapName };
|
|
42
46
|
}
|
|
43
47
|
|
|
@@ -70,20 +74,7 @@ export class KubernetesService {
|
|
|
70
74
|
}
|
|
71
75
|
|
|
72
76
|
async deleteTestRun(testRunManifest: TestRunManifest): Promise<void> {
|
|
73
|
-
|
|
74
|
-
const response = await this.k8sCustomApi.deleteNamespacedCustomObject({
|
|
75
|
-
group: testRunManifest.apiVersion.split('/')[0],
|
|
76
|
-
version: testRunManifest.apiVersion.split('/')[1],
|
|
77
|
-
namespace: testRunManifest.metadata.namespace,
|
|
78
|
-
plural: "testruns",
|
|
79
|
-
name: testRunManifest.metadata.name,
|
|
80
|
-
});
|
|
81
|
-
logger.info(`TestRun ${testRunManifest.metadata.name} deleted from namespace ${testRunManifest.metadata.namespace}`);
|
|
82
|
-
logger.debug(`Delete response: ${JSON.stringify(response)}`);
|
|
83
|
-
} catch (error) {
|
|
84
|
-
const errorMessage = (error as Error).message ?? 'Unknown error';
|
|
85
|
-
throw new Error(`Failed to delete TestRun ${testRunManifest.metadata.name} from namespace ${testRunManifest.metadata.namespace}: ${errorMessage}`);
|
|
86
|
-
}
|
|
77
|
+
await this.deleteTestRunByName(testRunManifest.metadata.name, testRunManifest.metadata.namespace);
|
|
87
78
|
}
|
|
88
79
|
|
|
89
80
|
async listTestRuns(namespace: string = "default"): Promise<any> {
|
|
@@ -94,8 +85,6 @@ export class KubernetesService {
|
|
|
94
85
|
namespace: namespace,
|
|
95
86
|
plural: "testruns",
|
|
96
87
|
});
|
|
97
|
-
// logger.debug(`List response: ${JSON.stringify(response)}`);
|
|
98
|
-
printTestRunsTable((response as any).items ?? []);
|
|
99
88
|
return response;
|
|
100
89
|
} catch (error) {
|
|
101
90
|
const errorMessage = (error as Error).message ?? 'Unknown error';
|
|
@@ -106,8 +95,6 @@ export class KubernetesService {
|
|
|
106
95
|
async listPods(namespace: string = "default"): Promise<any> {
|
|
107
96
|
try {
|
|
108
97
|
const response = await this.k8sApi.listNamespacedPod({ namespace });
|
|
109
|
-
printPodsTable(response);
|
|
110
|
-
// logger.debug(`List Pods: ${JSON.stringify(response)}`);
|
|
111
98
|
return response;
|
|
112
99
|
} catch (error) {
|
|
113
100
|
const errorMessage = (error as Error).message ?? 'Unknown error';
|
|
@@ -118,14 +105,69 @@ export class KubernetesService {
|
|
|
118
105
|
async listConfigMaps(namespace: string = "default"): Promise<any> {
|
|
119
106
|
try {
|
|
120
107
|
const response = await this.k8sApi.listNamespacedConfigMap({ namespace });
|
|
121
|
-
printConfigMapsTable(response);
|
|
122
|
-
// logger.debug(`List ConfigMaps: ${JSON.stringify(response)}`);
|
|
123
108
|
return response;
|
|
124
109
|
} catch (error) {
|
|
125
110
|
const errorMessage = (error as Error).message ?? 'Unknown error';
|
|
126
111
|
throw new Error(`Failed to list ConfigMaps in namespace ${namespace}: ${errorMessage}`);
|
|
127
112
|
}
|
|
128
113
|
}
|
|
114
|
+
|
|
115
|
+
private getTestRunCustomObjectParams(testRunName: string, namespace: string = "default") {
|
|
116
|
+
return {
|
|
117
|
+
group: "k6.io",
|
|
118
|
+
version: "v1alpha1",
|
|
119
|
+
namespace,
|
|
120
|
+
plural: "testruns",
|
|
121
|
+
name: testRunName,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
async deleteTestRunByName(testRunName: string, namespace: string = "default"): Promise<void> {
|
|
126
|
+
try {
|
|
127
|
+
await this.k8sCustomApi.deleteNamespacedCustomObject(this.getTestRunCustomObjectParams(testRunName, namespace));
|
|
128
|
+
logger.info(`TestRun ${testRunName} deleted from namespace ${namespace}`);
|
|
129
|
+
} catch (error) {
|
|
130
|
+
const errorMessage = (error as Error).message ?? 'Unknown error';
|
|
131
|
+
throw new Error(`Failed to delete TestRun ${testRunName} from namespace ${namespace}: ${errorMessage}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async getTestRun(testRunName: string, namespace: string = "default"): Promise<any> {
|
|
136
|
+
try {
|
|
137
|
+
const response = await this.k8sCustomApi.getNamespacedCustomObject(this.getTestRunCustomObjectParams(testRunName, namespace));
|
|
138
|
+
return response;
|
|
139
|
+
} catch (error) {
|
|
140
|
+
const errorMessage = (error as Error).message ?? 'Unknown error';
|
|
141
|
+
throw new Error(`Failed to get TestRun ${testRunName} in namespace ${namespace}: ${errorMessage}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async getPodsForTestRun(testRunName: string, namespace: string = "default"): Promise<k8s.V1PodList> {
|
|
146
|
+
try {
|
|
147
|
+
const response = await this.k8sApi.listNamespacedPod({
|
|
148
|
+
namespace,
|
|
149
|
+
labelSelector: `k6_cr=${testRunName}`,
|
|
150
|
+
});
|
|
151
|
+
return response;
|
|
152
|
+
} catch (error) {
|
|
153
|
+
const errorMessage = (error as Error).message ?? 'Unknown error';
|
|
154
|
+
throw new Error(`Failed to get pods for TestRun ${testRunName} in namespace ${namespace}: ${errorMessage}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
async getPodLogs(podName: string, namespace: string = "default", container?: string): Promise<string> {
|
|
159
|
+
try {
|
|
160
|
+
const response = await this.k8sApi.readNamespacedPodLog({
|
|
161
|
+
name: podName,
|
|
162
|
+
namespace,
|
|
163
|
+
...(container ? { container } : {}),
|
|
164
|
+
});
|
|
165
|
+
return response;
|
|
166
|
+
} catch (error) {
|
|
167
|
+
const errorMessage = (error as Error).message ?? 'Unknown error';
|
|
168
|
+
throw new Error(`Failed to get logs for pod ${podName} in namespace ${namespace}: ${errorMessage}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
129
171
|
}
|
|
130
172
|
|
|
131
173
|
function fmt(v: any) {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import logger from './logger';
|
|
4
|
+
import type { LastRunState } from '../types/lastRun.types';
|
|
5
|
+
|
|
6
|
+
const LAST_RUN_FILE = '.k6ctl-last-run.json';
|
|
7
|
+
|
|
8
|
+
function getFilePath(): string {
|
|
9
|
+
return path.join(process.cwd(), LAST_RUN_FILE);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export async function saveLastRun(state: LastRunState): Promise<void> {
|
|
13
|
+
const filePath = getFilePath();
|
|
14
|
+
await fs.writeFile(filePath, JSON.stringify(state, null, 2), 'utf8');
|
|
15
|
+
logger.debug(`Last run state saved to ${filePath}`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function loadLastRun(): Promise<LastRunState | null> {
|
|
19
|
+
const filePath = getFilePath();
|
|
20
|
+
try {
|
|
21
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
22
|
+
return JSON.parse(content) as LastRunState;
|
|
23
|
+
} catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export async function clearLastRun(): Promise<void> {
|
|
29
|
+
const filePath = getFilePath();
|
|
30
|
+
try {
|
|
31
|
+
await fs.unlink(filePath);
|
|
32
|
+
logger.debug(`Last run state cleared (${filePath})`);
|
|
33
|
+
} catch {
|
|
34
|
+
logger.info('No last run state to clear.');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -2,7 +2,7 @@ import { afterAll, describe, expect, test } from '@jest/globals';
|
|
|
2
2
|
import { join, resolve } from 'node:path';
|
|
3
3
|
import { existsSync } from 'node:fs';
|
|
4
4
|
import { unlink } from 'node:fs/promises';
|
|
5
|
-
import { createDefaultKubernetesService } from '../../src/services/kubernetes.service';
|
|
5
|
+
import { createDefaultKubernetesService, printConfigMapsTable } from '../../src/services/kubernetes.service';
|
|
6
6
|
import { ScriptService } from '../../src/services/script.service';
|
|
7
7
|
import { ConfigMapResult } from '../../src/types/kubernetes.types';
|
|
8
8
|
import { ArchiveResult } from '../../src/types/script.types';
|
|
@@ -11,6 +11,12 @@ import { TestRunManifest } from '../../src/types/testRunManifest.types';
|
|
|
11
11
|
import { K6Config } from '../../src/types/config.types';
|
|
12
12
|
import { loadK6Config } from '../../src/utils/configLoader';
|
|
13
13
|
import { buildTestRunManifest } from '../../src/utils/testRunManifestBuilder';
|
|
14
|
+
import { printTestRunsTable, printPodsTable } from '../../src/services/kubernetes.service';
|
|
15
|
+
import { saveLastRun } from '../../src/utils/lastRunStore';
|
|
16
|
+
import { status } from '../../src/commands/status';
|
|
17
|
+
import { logs } from '../../src/commands/logs';
|
|
18
|
+
import { deleteLastRun } from '../../src/commands/delete';
|
|
19
|
+
|
|
14
20
|
|
|
15
21
|
const samplesPath = resolve(__dirname, '..', 'samples');
|
|
16
22
|
const scriptSample1 = join(samplesPath, 'k6_script_sample_1.js');
|
|
@@ -24,18 +30,6 @@ let archiveOutput: ArchiveResult;
|
|
|
24
30
|
let configMapResult: ConfigMapResult;
|
|
25
31
|
|
|
26
32
|
describe('KubernetesService integration tests', () => {
|
|
27
|
-
afterAll(async () => {
|
|
28
|
-
// Clean up archived files after tests
|
|
29
|
-
await Promise.all(
|
|
30
|
-
archivedFiles.map(file => unlink(file).catch(error => console.error(`Error deleting file ${file}:`, error)))
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
// Clean up created config maps in Kubernetes
|
|
34
|
-
await Promise.all(
|
|
35
|
-
configMaps.map(cm => kubernetesService.deleteConfigMap(cm.configMapName, cm.namespace)
|
|
36
|
-
.catch(error => console.error(`Error deleting config map ${cm.configMapName}:`, error)))
|
|
37
|
-
);
|
|
38
|
-
});
|
|
39
33
|
|
|
40
34
|
test('create config map from archived script', async () => {
|
|
41
35
|
archiveOutput = await scriptService.archiveTest(scriptSample2);
|
|
@@ -56,15 +50,26 @@ describe('KubernetesService integration tests', () => {
|
|
|
56
50
|
expect(response).toBeDefined();
|
|
57
51
|
logger.info("TestRun result:", JSON.stringify(response));
|
|
58
52
|
|
|
53
|
+
// Persist last run state for use by logs/status/delete commands
|
|
54
|
+
await saveLastRun({
|
|
55
|
+
testRunName: testRunManifest.metadata.name,
|
|
56
|
+
namespace: testRunManifest.metadata.namespace,
|
|
57
|
+
configMapName: configMapResult.configMapName,
|
|
58
|
+
scriptPath: archiveOutput.archivePath,
|
|
59
|
+
createdAt: new Date().toISOString(),
|
|
60
|
+
});
|
|
61
|
+
logger.info(`Last run saved: ${testRunManifest.metadata.name} (namespace: ${testRunManifest.metadata.namespace})`);
|
|
62
|
+
|
|
59
63
|
// Wait for some time to allow the TestRun to be created and start running
|
|
60
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
64
|
+
await new Promise((resolve) => setTimeout(resolve, 60000));
|
|
65
|
+
|
|
66
|
+
// Check status command output
|
|
67
|
+
await status({ namespace: testRunManifest.metadata.namespace });
|
|
61
68
|
|
|
62
|
-
//
|
|
63
|
-
await
|
|
64
|
-
await kubernetesService.listPods();
|
|
65
|
-
await kubernetesService.listConfigMaps();
|
|
69
|
+
// Check logs command output
|
|
70
|
+
await logs({ namespace: testRunManifest.metadata.namespace });
|
|
66
71
|
|
|
67
72
|
// Clean up the TestRun after successful creation and execution
|
|
68
|
-
await
|
|
73
|
+
await deleteLastRun({ namespace: testRunManifest.metadata.namespace });
|
|
69
74
|
}, 120000);
|
|
70
75
|
});
|