Skip to content

Commit 36e1677

Browse files
committed
chore: sync Node.js 24 opt-in from main
2 parents 5ffa944 + c0bbb19 commit 36e1677

34 files changed

Lines changed: 548 additions & 3 deletions

.github/workflows/architecture-enforcement.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# Architecture Enforcement: Idris2 ONLY for logic, Zig for FFI, bindings for wrappers
33
name: Architecture Enforcement
4+
env:
5+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
46

57
on:
68
pull_request:

.github/workflows/boj-build.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# SPDX-License-Identifier: MPL-2.0
22
name: BoJ Server Build Trigger
3+
env:
4+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
35

46
on:
57
push:

.github/workflows/casket-pages.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# SPDX-License-Identifier: MPL-2.0
22
name: GitHub Pages
3+
env:
4+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
35

46
on:
57
push:

.github/workflows/cflite_batch.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# SPDX-License-Identifier: MPL-2.0
22
name: ClusterFuzzLite Batch
3+
env:
4+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
35

46
permissions:
57
contents: read

.github/workflows/cflite_pr.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# SPDX-License-Identifier: MPL-2.0
22
name: ClusterFuzzLite PR
3+
env:
4+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
35

46
permissions:
57
contents: read

.github/workflows/chapel-ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ concurrency:
5252
cancel-in-progress: true
5353

5454
env:
55+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
5556
# Pinned Chapel deb (Ubuntu 22.04 amd64). SHA-256 verified out-of-band
5657
# against the GitHub Releases asset; mismatch fails the install step.
5758
# 2.8.0 (not 2.3.0): the 2.3.0 .deb is slim and omits the bundled LLVM

.github/workflows/clusterfuzzlite.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
# does not run on commits before the fuzz scaffolding lands.
99

1010
name: ClusterFuzzLite
11+
env:
12+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
1113

1214
on:
1315
pull_request:

.github/workflows/codeql.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# SPDX-License-Identifier: MPL-2.0
22
name: CodeQL Security Analysis
3+
env:
4+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
35

46
on:
57
push:

.github/workflows/d-ci.yml

Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
#
4+
# D CI — proven binding-tier-1.
5+
#
6+
# This workflow follows the DETACHABLE-HARNESS contract for proven binding CI.
7+
# It references ONLY: bindings/d/, ffi/zig/, and bindings/c/include/proven.h.
8+
9+
name: D CI
10+
11+
permissions:
12+
contents: read
13+
14+
on:
15+
push:
16+
branches: [main]
17+
paths:
18+
- 'bindings/d/**'
19+
- 'ffi/zig/**'
20+
- 'bindings/c/include/proven.h'
21+
- '.github/workflows/d-ci.yml'
22+
pull_request:
23+
branches: [main]
24+
paths:
25+
- 'bindings/d/**'
26+
- 'ffi/zig/**'
27+
- 'bindings/c/include/proven.h'
28+
- '.github/workflows/d-ci.yml'
29+
workflow_dispatch:
30+
31+
concurrency:
32+
group: d-ci-${{ github.ref }}
33+
cancel-in-progress: true
34+
35+
env:
36+
LDC_VERSION: '1.36.0'
37+
ZIG_VERSION: '0.15.2'
38+
39+
jobs:
40+
detachability-guard:
41+
runs-on: ubuntu-22.04
42+
timeout-minutes: 2
43+
steps:
44+
- name: Checkout (workflow file only)
45+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
46+
with:
47+
sparse-checkout: |
48+
.github/workflows/d-ci.yml
49+
sparse-checkout-cone-mode: false
50+
51+
- name: Detachability grep guard
52+
run: |
53+
set -euo pipefail
54+
forbidden=0
55+
while IFS= read -r raw; do
56+
p="${raw%[.,;:)]}"
57+
case "$p" in
58+
bindings/d/*|ffi/zig/*|bindings/c/include|bindings/c/include/proven.h|.github/workflows/d-ci.yml)
59+
;;
60+
bindings/*/*)
61+
echo "::error file=.github/workflows/d-ci.yml::detachability violation: $p"
62+
forbidden=1
63+
;;
64+
tests/*)
65+
echo "::error file=.github/workflows/d-ci.yml::detachability violation (root-level tests/): $p"
66+
forbidden=1
67+
;;
68+
esac
69+
done < <(grep -oE '(bindings/[a-zA-Z0-9_-]+/[A-Za-z0-9_./-]*|tests/[A-Za-z0-9_./-]+)' \
70+
.github/workflows/d-ci.yml | sort -u)
71+
[ "$forbidden" -eq 0 ]
72+
echo "detachability-guard: OK"
73+
74+
d-build:
75+
runs-on: ubuntu-22.04
76+
needs: detachability-guard
77+
timeout-minutes: 20
78+
79+
steps:
80+
- name: Checkout proven
81+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
82+
with:
83+
path: proven
84+
85+
- name: Setup Zig ${{ env.ZIG_VERSION }}
86+
uses: mlugg/setup-zig@e7d1537c378b83b8049f65dda471d87a2f7b2df2 # v1
87+
with:
88+
version: ${{ env.ZIG_VERSION }}
89+
90+
- name: Build libproven.so (WIRED-subset fixture)
91+
working-directory: proven/ffi/zig
92+
run: |
93+
set -euo pipefail
94+
mkdir -p zig-out/lib
95+
zig build-lib -dynamic -O ReleaseSafe \
96+
-fPIC \
97+
--name proven \
98+
-femit-bin=zig-out/lib/libproven.so \
99+
src/main.zig -lc
100+
nm -D --defined-only zig-out/lib/libproven.so \
101+
| awk '$2 ~ /^[TWV]$/ { print $3 }' \
102+
| grep -E '^(proven_path_has_traversal|proven_header_has_crlf|proven_free_string|proven_version|proven_build_info)$' \
103+
| sort -u | tee /tmp/wired-exports.txt
104+
105+
- name: Setup D compiler (LDC)
106+
uses: dlang-community/setup-dlang@4071ba822f6d0f622ba7359556d11f5827725916 # v1.6.0
107+
with:
108+
compiler: ldc-${{ env.LDC_VERSION }}
109+
110+
- name: D build
111+
working-directory: proven/bindings/d
112+
env:
113+
PROVEN_LIB_PATH: ${{ github.workspace }}/proven/ffi/zig/zig-out/lib
114+
run: |
115+
set -euo pipefail
116+
dub build
117+
118+
- name: Upload libproven.so artefact
119+
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4
120+
with:
121+
name: libproven-x86_64-linux-gnu
122+
path: proven/ffi/zig/zig-out/lib/libproven.so
123+
if-no-files-found: error
124+
retention-days: 1
125+
126+
d-symbol-audit:
127+
runs-on: ubuntu-22.04
128+
needs: d-build
129+
timeout-minutes: 5
130+
steps:
131+
- name: Checkout (binding only)
132+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
133+
with:
134+
sparse-checkout: |
135+
bindings/d
136+
sparse-checkout-cone-mode: false
137+
138+
- name: Download libproven.so
139+
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
140+
with:
141+
name: libproven-x86_64-linux-gnu
142+
path: lib/
143+
144+
- name: Run d-symbol-audit
145+
working-directory: bindings/d
146+
env:
147+
PROVEN_LIB_PATH: ${{ github.workspace }}/lib
148+
run: ./scripts/symbol-audit.sh
149+
150+
d-smoke:
151+
runs-on: ubuntu-22.04
152+
needs: d-build
153+
timeout-minutes: 10
154+
steps:
155+
- name: Checkout (binding + C header only)
156+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
157+
with:
158+
sparse-checkout: |
159+
bindings/d
160+
bindings/c/include
161+
.github/workflows/d-ci.yml
162+
sparse-checkout-cone-mode: false
163+
164+
- name: Setup D compiler (LDC)
165+
uses: dlang-community/setup-dlang@4071ba822f6d0f622ba7359556d11f5827725916 # v1.6.0
166+
with:
167+
compiler: ldc-${{ env.LDC_VERSION }}
168+
169+
- name: Install just
170+
uses: extractions/setup-just@dd310ad5a97d8e7b41793f8ef055398d51ad4de6 # v2
171+
with:
172+
just-version: '1.36.0'
173+
174+
- name: Download libproven.so
175+
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
176+
with:
177+
name: libproven-x86_64-linux-gnu
178+
path: lib/
179+
180+
- name: Build + Run hello_smoke
181+
working-directory: bindings/d
182+
env:
183+
PROVEN_LIB_PATH: ${{ github.workspace }}/lib
184+
PROVEN_INCLUDE_PATH: ${{ github.workspace }}/bindings/c/include
185+
LD_LIBRARY_PATH: ${{ github.workspace }}/lib
186+
run: |
187+
ldc2 -of=smoke/hello_smoke \
188+
source/proven/*.d smoke/hello_smoke.d \
189+
-L-L$PROVEN_LIB_PATH -L-lproven \
190+
-L-rpath=$PROVEN_LIB_PATH
191+
./smoke/hello_smoke
192+
193+
d-tests:
194+
runs-on: ubuntu-22.04
195+
needs: d-build
196+
timeout-minutes: 15
197+
steps:
198+
- name: Checkout (binding + C header only)
199+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
200+
with:
201+
sparse-checkout: |
202+
bindings/d
203+
bindings/c/include
204+
.github/workflows/d-ci.yml
205+
sparse-checkout-cone-mode: false
206+
207+
- name: Setup D compiler (LDC)
208+
uses: dlang-community/setup-dlang@4071ba822f6d0f622ba7359556d11f5827725916 # v1.6.0
209+
with:
210+
compiler: ldc-${{ env.LDC_VERSION }}
211+
212+
- name: Install just
213+
uses: extractions/setup-just@dd310ad5a97d8e7b41793f8ef055398d51ad4de6 # v2
214+
with:
215+
just-version: '1.36.0'
216+
217+
- name: Download libproven.so
218+
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
219+
with:
220+
name: libproven-x86_64-linux-gnu
221+
path: lib/
222+
223+
- name: Run all D tests
224+
working-directory: bindings/d
225+
env:
226+
PROVEN_LIB_PATH: ${{ github.workspace }}/lib
227+
PROVEN_INCLUDE_PATH: ${{ github.workspace }}/bindings/c/include
228+
LD_LIBRARY_PATH: ${{ github.workspace }}/lib
229+
run: dub test
230+
231+
d-detachable-build:
232+
runs-on: ubuntu-22.04
233+
needs: d-build
234+
timeout-minutes: 15
235+
steps:
236+
- name: Sparse checkout (detachable set only)
237+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
238+
with:
239+
sparse-checkout: |
240+
bindings/d
241+
bindings/c/include/proven.h
242+
.github/workflows/d-ci.yml
243+
sparse-checkout-cone-mode: false
244+
path: proven-d
245+
246+
- name: Verify detached layout (no other proven trees present)
247+
working-directory: proven-d
248+
run: |
249+
set -euo pipefail
250+
if [ -d "src" ] || [ -d "ffi" ] || [ -d "tests" ] || [ -d "audits" ]; then
251+
echo "::error::detachability violation: non-binding trees present in detached checkout"
252+
ls -la
253+
exit 1
254+
fi
255+
test -d bindings/d

.github/workflows/dogfood-gate.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
# Validates that the repo uses hyperpolymath's own formats and tools.
66
# Companion to static-analysis-gate.yml (security) — this is for format compliance.
77
name: Dogfood Gate
8+
env:
9+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
810

911
on:
1012
pull_request:

0 commit comments

Comments
 (0)