@norskvideo/ctl-dev-kit 0.1.19 → 0.1.21

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.
@@ -29,7 +29,13 @@ jobs:
29
29
  drift:
30
30
  runs-on: x64
31
31
  steps:
32
+ # clean: false -- the integration suite (shared x64 pool) leaves root-owned
33
+ # bind-mount dirs under test-temp/ that a non-root git clean can't remove
34
+ # (EACCES). These jobs never need those files; skip the clean so an innocent
35
+ # bystander checkout doesn't choke on another workflow's leftovers.
32
36
  - uses: actions/checkout@v5
37
+ with:
38
+ clean: false
33
39
  - name: Shared-conventions drift-check (Workstream I)
34
40
  run: |
35
41
  nix develop .#build --command bash -c '
@@ -41,7 +47,13 @@ jobs:
41
47
  quality:
42
48
  runs-on: x64
43
49
  steps:
50
+ # clean: false -- the integration suite (shared x64 pool) leaves root-owned
51
+ # bind-mount dirs under test-temp/ that a non-root git clean can't remove
52
+ # (EACCES). These jobs never need those files; skip the clean so an innocent
53
+ # bystander checkout doesn't choke on another workflow's leftovers.
44
54
  - uses: actions/checkout@v5
55
+ with:
56
+ clean: false
45
57
  - name: Lint + typecheck + unit tests
46
58
  run: |
47
59
  nix develop .#build --command bash -c '
@@ -54,14 +66,22 @@ jobs:
54
66
 
55
67
  # Report this pipeline's result to the aggregated product CI dashboard
56
68
  # (id3as/ci-workflows) instead of posting its own pony — the dashboard renders
57
- # the pony/emoji from the dispatched result. always() so a red or manual run
58
- # still reports.
69
+ # the pony/emoji from the dispatched result. !cancelled() so a real pass/fail
70
+ # reports, but a cancelled/superseded run does NOT — a cancellation dispatched
71
+ # as failure would false-red the board on every drained or concurrency-
72
+ # superseded run.
59
73
  notify:
60
74
  needs: [drift, quality]
61
- if: always() && github.event_name == 'push'
75
+ if: ${{ !cancelled() && github.event_name == 'push' }}
62
76
  runs-on: x64
63
77
  steps:
78
+ # clean: false -- the integration suite (shared x64 pool) leaves root-owned
79
+ # bind-mount dirs under test-temp/ that a non-root git clean can't remove
80
+ # (EACCES). These jobs never need those files; skip the clean so an innocent
81
+ # bystander checkout doesn't choke on another workflow's leftovers.
64
82
  - uses: actions/checkout@v5
83
+ with:
84
+ clean: false
65
85
  - id: meta
66
86
  run: |
67
87
  if [ "${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}" = "true" ]; then
@@ -43,7 +43,21 @@ jobs:
43
43
  sync:
44
44
  runs-on: x64
45
45
  steps:
46
+ # Check out with CI_DISPATCH_TOKEN, not the automatic GITHUB_TOKEN: this job
47
+ # pushes re-synced copies, and the dev-kit single-sources the shared
48
+ # .github/workflows/ files -- so a sync can rewrite a workflow file, and
49
+ # GITHUB_TOKEN is categorically barred from pushing under .github/workflows/
50
+ # (no permissions: key unlocks it). CI_DISPATCH_TOKEN carries the fine-grained
51
+ # Workflows:write permission, so its push is allowed. The checkout credential
52
+ # is what both the green push:main and the red branch push authenticate with.
53
+ # clean: false -- the integration suite (shared x64 pool) leaves root-owned
54
+ # bind-mount dirs under test-temp/ a non-root git clean can't remove
55
+ # (EACCES); this job never needs them. `git add -A` below still ignores
56
+ # them (test-temp is gitignored), so the sync commit stays clean.
46
57
  - uses: actions/checkout@v5
58
+ with:
59
+ token: ${{ secrets.CI_DISPATCH_TOKEN }}
60
+ clean: false
47
61
 
48
62
  - name: Resolve the newest published dev-kit and bump the pin
49
63
  id: sync
@@ -108,9 +122,11 @@ jobs:
108
122
  forced copies re-synced from the new canonical (sync-drift); check:drift +
109
123
  lint + typecheck + unit tests green against the new bytes. Lockfile
110
124
  regenerated."
111
- # A GITHUB_TOKEN push does not retrigger checks (Actions' recursion
112
- # guard) -- fine, the gate above already ran them. Rebase-and-retry so a
113
- # commit landing mid-run does not red the sync; a real conflict aborts.
125
+ # This pushes with CI_DISPATCH_TOKEN (a PAT), so unlike a GITHUB_TOKEN
126
+ # push it DOES retrigger downstream checks -- intended: the landed sync
127
+ # should exercise the product's build workflows once (sync-dev-kit itself
128
+ # is schedule/dispatch-only, so no loop). Rebase-and-retry so a commit
129
+ # landing mid-run does not red the sync; a real conflict aborts.
114
130
  for attempt in 1 2 3 4 5; do
115
131
  if git push origin HEAD:main; then exit 0; fi
116
132
  echo "push rejected (attempt $attempt) - rebasing onto latest origin/main"
@@ -157,15 +173,20 @@ jobs:
157
173
  run: echo "dev-kit pin already current -- nothing to sync."
158
174
 
159
175
  # Report the sync result to the aggregated product CI dashboard
160
- # (id3as/ci-workflows). always() so a failed sync shows a sad pony. A gate-red
161
- # run that opened a PR is still a successful sync -- the red lives on the PR's
162
- # own checks run, not here.
176
+ # (id3as/ci-workflows). !cancelled() so a failed sync shows a sad pony but a
177
+ # cancelled/superseded run does not false-red the board. A gate-red run that
178
+ # opened a PR is still a successful sync -- the red lives on the PR's own checks
179
+ # run, not here.
163
180
  notify:
164
181
  needs: sync
165
- if: always()
182
+ if: ${{ !cancelled() }}
166
183
  runs-on: x64
167
184
  steps:
185
+ # clean: false -- see the sync job; avoid a git-clean EACCES on integration's
186
+ # root-owned test-temp leftovers on the shared x64 pool.
168
187
  - uses: actions/checkout@v5
188
+ with:
189
+ clean: false
169
190
  - id: meta
170
191
  run: |
171
192
  if [ "${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}" = "true" ]; then
@@ -37,7 +37,13 @@ jobs:
37
37
  changed: ${{ steps.bump.outputs.changed }}
38
38
  summary: ${{ steps.bump.outputs.summary }}
39
39
  steps:
40
+ # clean: false -- the integration suite (shared x64 pool) leaves root-owned
41
+ # bind-mount dirs under test-temp/ that a non-root git clean can't remove
42
+ # (EACCES). These jobs never need those files; skip the clean so an innocent
43
+ # bystander checkout doesn't choke on another workflow's leftovers.
40
44
  - uses: actions/checkout@v5
45
+ with:
46
+ clean: false
41
47
 
42
48
  - name: Resolve the nightly channel and rewrite the coupled pins
43
49
  id: bump
@@ -192,14 +198,21 @@ jobs:
192
198
  run: echo "Nightly pins already current — nothing to bump."
193
199
 
194
200
  # Report the nightly bump result to the aggregated product CI dashboard
195
- # (id3as/ci-workflows). always() so a failed bump shows a sad pony; the summary
196
- # rides along as the cell detail.
201
+ # (id3as/ci-workflows). !cancelled() so a failed bump shows a sad pony (a
202
+ # cancelled/superseded run must not false-red the board); the summary rides
203
+ # along as the cell detail.
197
204
  notify:
198
205
  needs: bump
199
- if: always()
206
+ if: ${{ !cancelled() }}
200
207
  runs-on: x64
201
208
  steps:
209
+ # clean: false -- the integration suite (shared x64 pool) leaves root-owned
210
+ # bind-mount dirs under test-temp/ that a non-root git clean can't remove
211
+ # (EACCES). These jobs never need those files; skip the clean so an innocent
212
+ # bystander checkout doesn't choke on another workflow's leftovers.
202
213
  - uses: actions/checkout@v5
214
+ with:
215
+ clean: false
203
216
  - id: meta
204
217
  run: |
205
218
  if [ "${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}" = "true" ]; then
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norskvideo/ctl-dev-kit",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./package.json": "./package.json",