@norskvideo/ctl-dev-kit 0.1.90 → 0.1.92

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.
@@ -263,6 +263,12 @@ jobs:
263
263
  env:
264
264
  NORSK_CTL_BINARY: ${{ runner.temp }}/norsk-ctl
265
265
  NORSK_LICENSE_FILE: ${{ runner.temp }}/norsk-license.json
266
+ # Where the harness copies each instance's full engine logs
267
+ # (/var/log/norsk -> debug.json, host-mounted under the store) before
268
+ # teardown nukes them. Uploaded below. `docker logs` only sees the
269
+ # notice+ stdout subset and a decode-error flood can drown its tail;
270
+ # this is the complete structured log at every level.
271
+ NORSK_CI_LOG_DIR: ${{ runner.temp }}/norsk-logs
266
272
  run: |
267
273
  # Outer pipefail so the step reports the journey's exit, not tee's --
268
274
  # otherwise a failed smoke run over the `| tee` below scores green.
@@ -299,6 +305,20 @@ jobs:
299
305
  path: ${{ runner.temp }}/smoke.log
300
306
  retention-days: 7
301
307
 
308
+ # The FULL structured engine logs (debug.json et al.), copied off the
309
+ # host store by the harness before teardown -- the actual place a
310
+ # media-node death is recorded, which `docker logs` and its stdout flood
311
+ # cannot show. if-no-files-found: ignore so a green run that wrote nothing
312
+ # here (or a launch that never reached teardown) does not fail the step.
313
+ - name: Upload Norsk engine logs
314
+ if: always()
315
+ uses: actions/upload-artifact@v4
316
+ with:
317
+ name: norsk-engine-logs-attempt-${{ github.run_attempt }}
318
+ path: ${{ runner.temp }}/norsk-logs
319
+ retention-days: 7
320
+ if-no-files-found: ignore
321
+
302
322
  # Report this pipeline's result to the aggregated product CI dashboard
303
323
  # (id3as/ci-workflows). !cancelled() so a real pass/fail reports, but a
304
324
  # cancelled/superseded run does NOT — a cancellation dispatched as failure
@@ -4,9 +4,18 @@
4
4
  // question answered first — is this line inside a quoted block or not — so it is
5
5
  // asked in one place.
6
6
 
7
- /** 1-indexed line numbers inside a multi-line `bash -c '` block, which ends at a
8
- * line that is just `'`. A one-liner closing its own quote (`bash -c 'a; b'`)
9
- * opens no block — it is already balanced. */
7
+ /** 1-indexed line numbers inside a multi-line `bash -c '` block, which ends at
8
+ * the first line whose leading character is the closing `'`. A one-liner
9
+ * closing its own quote (`bash -c 'a; b'`) opens no block — it is already
10
+ * balanced.
11
+ *
12
+ * The close is not always the whole line: smoke.yml ends its block with
13
+ * `' 2>&1 | tee "$RUNNER_TEMP/smoke.log"`, piping the invocation into a log.
14
+ * Requiring the line to be exactly `'` left the block open to end of file, so
15
+ * every apostrophe below it was reported as unquoted shell — comments, and an
16
+ * `if:` expression that is not shell at all. Inside a single-quoted word a
17
+ * leading apostrophe can only be the close, so what follows it on that line is
18
+ * outside the block and none of this guard's business. */
10
19
  export function bashBlockLines(yaml: string): Set<number> {
11
20
  const OPEN = "bash -c '";
12
21
  const inside = new Set<number>();
@@ -17,7 +26,7 @@ export function bashBlockLines(yaml: string): Set<number> {
17
26
  if (at >= 0 && !text.slice(at + OPEN.length).includes("'")) open = true;
18
27
  return;
19
28
  }
20
- if (text.trim() === "'") {
29
+ if (text.trim().startsWith("'")) {
21
30
  open = false;
22
31
  return;
23
32
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norskvideo/ctl-dev-kit",
3
- "version": "0.1.90",
3
+ "version": "0.1.92",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./create-product": "./create-product/create-product.ts",