@@ -5,9 +5,17 @@ name: kernel-rc-cross-os
55# (useKernel:true). Confirms the per-platform @databricks/databricks-sql-kernel-<triple>
66# napi binary installs, loads, and runs the full bug-bash suite on each OS.
77#
8- # The kernel loader requires Node >= 18, so the matrix is 18/20/22 (not 14/16).
9- # Manual trigger only — it runs heavy queries against a real warehouse.
8+ # Node matrix:
9+ # - 18/20/22: real published RC (loader floor is >=18) — kernel as shipped.
10+ # - 16: the loader hard-gates at >=18, but the binary is N-API<=7 and runs on
11+ # Node 16. These jobs LOWER the floor 18->16 to validate the proposed change
12+ # (kernel on Node 16), and additionally run the Thrift suite (no change needed).
13+ #
14+ # Runs on push to this branch and via manual dispatch. Heavy queries hit a real
15+ # warehouse; concurrency is capped.
1016on :
17+ push :
18+ branches : [ kernel-rc-cross-os-ci ]
1119 workflow_dispatch :
1220 inputs :
1321 rc_version :
@@ -22,6 +30,7 @@ defaults:
2230# Reuses the repo's existing e2e secrets (same as main.yml):
2331# DATABRICKS_HOST, TEST_PECO_WAREHOUSE_HTTP_PATH, DATABRICKS_TOKEN
2432env :
33+ RC_VERSION : ${{ github.event.inputs.rc_version || '1.16.0-rc.1' }}
2534 DATABRICKS_PECOTESTING_SERVER_HOSTNAME : ${{ secrets.DATABRICKS_HOST }}
2635 DATABRICKS_PECOTESTING_HTTP_PATH2 : ${{ secrets.TEST_PECO_WAREHOUSE_HTTP_PATH }}
2736 DATABRICKS_PECOTESTING_TOKEN : ${{ secrets.DATABRICKS_TOKEN }}
@@ -31,12 +40,18 @@ jobs:
3140 suite :
3241 name : ${{ matrix.label }} · node ${{ matrix.node }}
3342 runs-on : ${{ matrix.os }}
34- timeout-minutes : 30
43+ timeout-minutes : 40
3544 strategy :
3645 fail-fast : false
3746 max-parallel : 3 # cap concurrent load on the single warehouse
3847 matrix :
3948 include :
49+ # Node 16 — validate the proposed lowered floor (kernel) + Thrift.
50+ - { label: linux-x64-gnu, os: ubuntu-latest, node: 16 }
51+ - { label: darwin-x64, os: macos-13, node: 16 }
52+ - { label: darwin-arm64, os: macos-latest, node: 16 }
53+ - { label: win32-x64-msvc, os: windows-latest, node: 16 }
54+ # 18/20/22 — real published RC (floor >=18), kernel as shipped.
4055 - { label: linux-x64-gnu, os: ubuntu-latest, node: 18 }
4156 - { label: linux-x64-gnu, os: ubuntu-latest, node: 20 }
4257 - { label: linux-x64-gnu, os: ubuntu-latest, node: 22 }
@@ -51,39 +66,50 @@ jobs:
5166 node-version : ${{ matrix.node }}
5267 - name : Platform info
5368 run : node -e "console.log(process.version, process.platform, process.arch)"
54- - name : Install RC ${{ inputs.rc_version }} (resolves per-platform kernel binary)
69+ - name : Install RC ${{ env.RC_VERSION }} (resolves per-platform kernel binary)
5570 run : |
5671 npm install --no-audit --no-fund
57- npm install --no-audit --no-fund "@databricks/sql@${{ inputs.rc_version }}"
72+ npm install --no-audit --no-fund "@databricks/sql@${{ env.RC_VERSION }}"
5873 - name : Verify kernel native binary loads
5974 run : node -e "console.log('kernel napi', require('@databricks/sql/native/kernel').version())"
60- - name : Run full bug-bash suite (kernel mode)
75+ - name : ' [node16] Lower kernel floor 18->16 (validate proposed change)'
76+ if : ${{ matrix.node == 16 }}
77+ run : node -e "const fs=require('fs');const f='node_modules/@databricks/sql/dist/kernel/KernelNativeLoader.js';const s=fs.readFileSync(f,'utf8');const o=s.replace('MIN_NODE_MAJOR = 18','MIN_NODE_MAJOR = 16');if(o===s)throw new Error('floor marker not found');fs.writeFileSync(f,o);console.log('kernel floor lowered 18->16');"
78+ - name : Run full bug-bash suite (KERNEL mode)
79+ run : node scripts/run-all.js
80+ - name : ' [node16] Run full bug-bash suite (THRIFT mode)'
81+ if : ${{ matrix.node == 16 }}
82+ env :
83+ BUGBASH_THRIFT : ' 1'
6184 run : node scripts/run-all.js
6285
6386 # musl Linux (Alpine) — run via docker on a glibc runner (a `container:` job
6487 # breaks JS actions: the runner's glibc node can't exec inside musl).
6588 linux-musl :
66- name : ${{ matrix.label }}
89+ name : ${{ matrix.label }} · ${{ matrix.image }}
6790 runs-on : ${{ matrix.runner }}
68- timeout-minutes : 30
91+ timeout-minutes : 40
6992 strategy :
7093 fail-fast : false
7194 matrix :
7295 include :
73- - { label: linux-x64-musl, runner: ubuntu-latest }
74- - { label: linux-arm64-musl, runner: ubuntu-24.04-arm } # needs ARM runner availability
96+ - { label: linux-x64-musl, runner: ubuntu-latest, image: 'node:20-alpine', node16: '' }
97+ - { label: linux-x64-musl, runner: ubuntu-latest, image: 'node:16-alpine', node16: 'yes' }
98+ - { label: linux-arm64-musl, runner: ubuntu-24.04-arm, image: 'node:20-alpine', node16: '' } # needs ARM runner availability
7599 steps :
76100 - uses : actions/checkout@v4
77- - name : Run suite in node:20-alpine
101+ - name : Run suite in ${{ matrix.image }}
78102 working-directory : .
79103 run : |
80104 docker run --rm \
81105 -e DATABRICKS_PECOTESTING_SERVER_HOSTNAME \
82106 -e DATABRICKS_PECOTESTING_HTTP_PATH2 \
83107 -e DATABRICKS_PECOTESTING_TOKEN \
84- -v "$PWD":/work -w /work/ci/kernel-rc-bugbash node:20-alpine \
108+ -e LOWER16='${{ matrix.node16 }}' \
109+ -v "$PWD":/work -w /work/ci/kernel-rc-bugbash ${{ matrix.image }} \
85110 sh -c "node -e 'console.log(process.version, process.platform, process.arch)' && \
86111 npm install --no-audit --no-fund && \
87- npm install --no-audit --no-fund '@databricks/sql@${{ inputs.rc_version }}' && \
112+ npm install --no-audit --no-fund '@databricks/sql@${{ env.RC_VERSION }}' && \
113+ if [ -n \"\$LOWER16\" ]; then node -e \"const fs=require('fs');const f='node_modules/@databricks/sql/dist/kernel/KernelNativeLoader.js';fs.writeFileSync(f,fs.readFileSync(f,'utf8').replace('MIN_NODE_MAJOR = 18','MIN_NODE_MAJOR = 16'));console.log('floor lowered 18->16');\"; fi && \
88114 node -e \"console.log('kernel napi', require('@databricks/sql/native/kernel').version())\" && \
89115 node scripts/run-all.js"
0 commit comments