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.
Files changed (39) hide show
  1. package/dist/cli.js +20 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/delete.d.ts +7 -0
  4. package/dist/commands/delete.d.ts.map +1 -0
  5. package/dist/commands/delete.js +27 -0
  6. package/dist/commands/delete.js.map +1 -0
  7. package/dist/commands/logs.d.ts +7 -0
  8. package/dist/commands/logs.d.ts.map +1 -0
  9. package/dist/commands/logs.js +39 -0
  10. package/dist/commands/logs.js.map +1 -0
  11. package/dist/commands/run.d.ts.map +1 -1
  12. package/dist/commands/run.js +10 -0
  13. package/dist/commands/run.js.map +1 -1
  14. package/dist/commands/status.d.ts +6 -0
  15. package/dist/commands/status.d.ts.map +1 -0
  16. package/dist/commands/status.js +26 -0
  17. package/dist/commands/status.js.map +1 -0
  18. package/dist/services/kubernetes.service.d.ts +5 -0
  19. package/dist/services/kubernetes.service.d.ts.map +1 -1
  20. package/dist/services/kubernetes.service.js +60 -21
  21. package/dist/services/kubernetes.service.js.map +1 -1
  22. package/dist/types/lastRun.types.d.ts +8 -0
  23. package/dist/types/lastRun.types.d.ts.map +1 -0
  24. package/dist/types/lastRun.types.js +3 -0
  25. package/dist/types/lastRun.types.js.map +1 -0
  26. package/dist/utils/lastRunStore.d.ts +5 -0
  27. package/dist/utils/lastRunStore.d.ts.map +1 -0
  28. package/dist/utils/lastRunStore.js +41 -0
  29. package/dist/utils/lastRunStore.js.map +1 -0
  30. package/package.json +1 -1
  31. package/src/cli.ts +23 -0
  32. package/src/commands/delete.ts +31 -0
  33. package/src/commands/logs.ts +41 -0
  34. package/src/commands/run.ts +11 -0
  35. package/src/commands/status.ts +28 -0
  36. package/src/services/kubernetes.service.ts +62 -20
  37. package/src/types/lastRun.types.ts +7 -0
  38. package/src/utils/lastRunStore.ts +36 -0
  39. 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,7 @@
1
+ interface DeleteOptions {
2
+ namespace?: string;
3
+ keepConfigmap?: boolean;
4
+ }
5
+ export declare function deleteLastRun(options: DeleteOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=delete.d.ts.map
@@ -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,7 @@
1
+ interface LogsOptions {
2
+ namespace?: string;
3
+ container?: string;
4
+ }
5
+ export declare function logs(options: LogsOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=logs.d.ts.map
@@ -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":"AAOA,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,iBAqCpE"}
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"}
@@ -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)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,0BAqCC;AAnDD,uEAAgF;AAChF,+DAA2D;AAC3D,wDAAqD;AACrD,sCAAkD;AAClD,0DAAsD;AACtD,4EAAuE;AAShE,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;IAE/E,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"}
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,6 @@
1
+ interface StatusOptions {
2
+ namespace?: string;
3
+ }
4
+ export declare function status(options: StatusOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=status.d.ts.map
@@ -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;AAGjE,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;IAgCvF,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;IAiB9D,YAAY,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IAiBzD,QAAQ,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IAYrD,cAAc,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;CAWlE;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"}
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
- try {
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,8 @@
1
+ export interface LastRunState {
2
+ testRunName: string;
3
+ namespace: string;
4
+ configMapName: string;
5
+ scriptPath: string;
6
+ createdAt: string;
7
+ }
8
+ //# sourceMappingURL=lastRun.types.d.ts.map
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=lastRun.types.js.map
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "k6ctl",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "CLI tool to run k6 tests on Kubernetes using k6-operator",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
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
+ }
@@ -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
- try {
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,7 @@
1
+ export interface LastRunState {
2
+ testRunName: string;
3
+ namespace: string;
4
+ configMapName: string;
5
+ scriptPath: string;
6
+ createdAt: string;
7
+ }
@@ -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, 40000));
64
+ await new Promise((resolve) => setTimeout(resolve, 60000));
65
+
66
+ // Check status command output
67
+ await status({ namespace: testRunManifest.metadata.namespace });
61
68
 
62
- // List TestRuns, Pods, and ConfigMaps to verify they are created and running
63
- await kubernetesService.listTestRuns();
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 kubernetesService.deleteTestRun(testRunManifest);
73
+ await deleteLastRun({ namespace: testRunManifest.metadata.namespace });
69
74
  }, 120000);
70
75
  });