@norskvideo/ctl-dev-kit 0.2.16 → 0.2.18

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.
@@ -178,6 +178,39 @@ jobs:
178
178
  echo "NORSK_RUNNER_OWNS_DOCKER=true" >> "$GITHUB_ENV"
179
179
  fi
180
180
 
181
+ # Integration needs this host's docker to be able to create a network: the
182
+ # harness makes norsk-net and a network per instance. On 2026-10-02
183
+ # ashton-nuc's filter table had lost DOCKER-ISOLATION-STAGE-2, so every
184
+ # create failed with "Chain 'DOCKER-ISOLATION-STAGE-2' does not exist" --
185
+ # and commentary, probe and playout each ran a FULL integration suite on it
186
+ # and reported the result as test failures, 18 and 72 chain errors deep in
187
+ # their logs. The same host took four of that night's norsk image jobs down
188
+ # the same way. Nothing said "this machine's docker is broken".
189
+ #
190
+ # The chain is not readable without root on these runners, so this asserts
191
+ # the capability instead: create a throwaway network, remove it. One step,
192
+ # its own name, so the jobs API attributes the failure to it rather than to
193
+ # whatever composite step happened to be running.
194
+ - name: Check this host's docker can still create a network
195
+ run: |
196
+ set -uo pipefail
197
+ net="preflight-${{ github.run_id }}-${{ github.run_attempt }}-$RANDOM"
198
+ if err=$(docker network create "$net" 2>&1); then
199
+ docker network rm "$net" >/dev/null 2>&1 || true
200
+ echo "docker can create networks on $(hostname) -- ok"
201
+ exit 0
202
+ fi
203
+ echo "::error::docker on this runner cannot create a network, so every container this suite starts would silently not exist -- the tests would fail for a reason that is not theirs. Host: $(hostname). Fix: \`sudo systemctl restart docker\` on that machine (it rebuilds the DOCKER/DOCKER-ISOLATION iptables chains), then re-run."
204
+ echo "$err"
205
+ echo "--- docker0 (a subnet other than 172.17.0.1/16 means it was re-addressed) ---"
206
+ ip -br addr show docker0 2>/dev/null || true
207
+ echo "--- networks and their subnets ---"
208
+ for n in $(docker network ls --format '{{.Name}}' 2>/dev/null); do
209
+ printf '%-28s ' "$n"
210
+ docker network inspect "$n" --format '{{range .IPAM.Config}}{{.Subnet}} {{end}}' 2>/dev/null || echo
211
+ done
212
+ exit 1
213
+
181
214
  # `product add --image` publishes the control plane on 127.0.0.1:14321. The
182
215
  # daemon means to reap it on shutdown (daemon.ts, model B) but only does so
183
216
  # gracefully, and this workflow cancels its own superseded runs -- a killed
@@ -134,6 +134,30 @@ jobs:
134
134
  changed=1
135
135
  parts+=("media \`$new_media\`")
136
136
  fi
137
+ # The rewrite above is a LITERAL replace of the value found in
138
+ # manifest.seed.json, so it only ever touches pins that already equal the
139
+ # seed. A pin that has drifted off it -- a hand edit, a merge, a
140
+ # half-finished run -- is invisible to this bump and to every later one,
141
+ # permanently, while the job still reports success. funke launched a
142
+ # 2026-09-30 engine against 2026-09-05 npm pins for a month that way;
143
+ # playout and probe sat two months back on 1.1.0-2026-08-02. The whole
144
+ # point of the family is that ONE version string drives it, so a
145
+ # divergent pin is a defect and the only thing missing was someone
146
+ # saying so.
147
+ #
148
+ # Not auto-rewritten: a pin held back on purpose is someone's decision,
149
+ # and silently moving it would be the same class of surprise in the
150
+ # other direction. Fail, name them, and let a human fix the pin or the
151
+ # intent.
152
+ stranded="$(git grep -hoE '"@norskvideo/norsk-(api|sdk|auto-manager|manager-sdk)"[[:space:]]*:[[:space:]]*"[0-9]+\.[0-9]+\.[0-9]+-[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9a-f]+"' -- '*package.json' \
153
+ | sed -E 's/.*"([^"]+)"$/\1/' | sort -u | grep -vxF "$new_media" || true)"
154
+ if [ -n "$stranded" ]; then
155
+ echo "::error::npm norsk pins are stranded off the nightly channel: $(printf '%s' "$stranded" | tr '\n' ' ')"
156
+ echo "The media family (api, sdk, auto-manager, manager-sdk) and the launched image are built from the same"
157
+ echo "commit, so every pin must read $new_media. These do not, and because the rewrite above is a literal"
158
+ echo "replace of the seed value, no later bump can reach them either. Set them to $new_media."
159
+ exit 1
160
+ fi
137
161
 
138
162
  # STUDIO: unlike media, Norsk builds the studio npm packages and the
139
163
  # studio Docker image from DIFFERENT commits — their hash suffixes never
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norskvideo/ctl-dev-kit",
3
- "version": "0.2.16",
3
+ "version": "0.2.18",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./create-product": "./create-product/create-product.ts",