@norskvideo/ctl-dev-kit 0.2.87 → 0.2.89

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.
@@ -101,6 +101,21 @@ On 2026-10-02 a reuters tier and a commentary tier each `compose up`ed
101
101
  port (bound inside the runner container, so not shared). In `direct` reach
102
102
  mode with `--internal-only` the studio port is not published at all.
103
103
 
104
+ ### One suite per host
105
+
106
+ Names can be made unique; CPU cannot. A runner container is pinned to its own
107
+ cores, but the media containers its suite launches are host siblings and run
108
+ anywhere, so two suites on one host starve each other's engines. On 2026-10-15/16
109
+ commentary's timing tests (ears, realtime drift, soak preview) failed in 10 of the
110
+ 12 test2 runs that overlapped another suite, most often a second commentary run on
111
+ the other runner. The canonical `integration.yml` therefore runs its suite under
112
+ an `flock` on `/srv/ci-scratch/locks/norsk-ctl-integration.lock`:
113
+ `/srv/ci-scratch` is bind-mounted at that path into every jankings runner on a
114
+ host, so the file is shared by that host's runners and by no other host's. A
115
+ runner without the mount runs unserialised and says so in the log; a suite that
116
+ has waited an hour runs anyway with a warning. A hand-owned `integration.yml`
117
+ does not take the lock until it converges onto the canonical.
118
+
104
119
  ## Reaching an image product's control plane
105
120
 
106
121
  `product add --image` loopback-publishes the control plane on a
@@ -430,7 +430,34 @@ jobs:
430
430
  fi
431
431
  '
432
432
  }
433
- suite 2>&1 | tee "$RUNNER_TEMP/integration.log"
433
+ # One suite per HOST. A host's runners are sibling containers on one
434
+ # docker daemon, and the media containers a suite launches are not
435
+ # confined to its runner's cpuset, so two suites side by side starve
436
+ # each other's engines: on 2026-10-15/16 commentary's timing tests
437
+ # failed in 10 of the 12 test2 runs that overlapped another suite on the
438
+ # other runner, mostly commentary against itself, which a per-repo
439
+ # concurrency group cannot stop without dropping a queued candidate.
440
+ # /srv/ci-scratch is bind-mounted at that path into every runner on a
441
+ # jankings host, so an flock there is the host's mutex; the kernel
442
+ # drops it when this shell exits, however the job ends. Children close
443
+ # fd 9 so a straggler cannot hold the host after the step. After an
444
+ # hour the suite runs anyway, warned, rather than miss its result.
445
+ # integration-host-lock.test.ts.
446
+ if [ -d /srv/ci-scratch ] && [ -w /srv/ci-scratch ]; then
447
+ lock=/srv/ci-scratch/locks/norsk-ctl-integration.lock
448
+ mkdir -p "${lock%/*}"
449
+ exec 9>>"$lock"
450
+ echo "waiting for this host's integration lock ($lock)"
451
+ waited=$SECONDS
452
+ if flock -w 3600 9; then
453
+ echo "holding this host's integration lock after $((SECONDS - waited))s"
454
+ else
455
+ echo "::warning title=integration ran unserialised::waited an hour for $lock on $(hostname); timing-sensitive tests may fail for a reason that is not theirs"
456
+ fi
457
+ else
458
+ echo "no writable /srv/ci-scratch on this runner: the suite runs without the host lock"
459
+ fi
460
+ suite 9>&- 2>&1 | tee "$RUNNER_TEMP/integration.log"
434
461
 
435
462
  # The log AND the harness evidence. Playwright and the harness write
436
463
  # screenshots, traces and captured container logs under test-results/;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norskvideo/ctl-dev-kit",
3
- "version": "0.2.87",
3
+ "version": "0.2.89",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./create-product": "./create-product/create-product.ts",
@@ -40,9 +40,9 @@
40
40
  "devDependencies": {
41
41
  "@norskvideo/ctl-oas-to-ts": "^0.1.0",
42
42
  "@norskvideo/norsk-sdk": "1.3.1-2026-10-16-e43e0f90",
43
- "@norskvideo/norsk-studio": "1.30.0-2026-10-16-837e5d98",
44
- "@norskvideo/norsk-studio-builder": "1.30.0-2026-10-16-837e5d98",
45
- "@norskvideo/norsk-studio-built-ins": "1.30.0-2026-10-16-837e5d98",
43
+ "@norskvideo/norsk-studio": "1.30.0-2026-10-17-4468cc12",
44
+ "@norskvideo/norsk-studio-builder": "1.30.0-2026-10-17-4468cc12",
45
+ "@norskvideo/norsk-studio-built-ins": "1.30.0-2026-10-17-4468cc12",
46
46
  "@playwright/test": "^1.59.0",
47
47
  "@testing-library/jest-dom": "^6.9.1",
48
48
  "@testing-library/react": "^16.3.2",