Skip to content

Commit 9264301

Browse files
committed
ci(kernel-rc-cross-os): add Node 16 validation + push trigger
- Add Node 16 to the cross-OS matrix (ubuntu/macos-13/macos-latest/windows). The published RC loader gates kernel at >=18; these jobs lower the floor 18->16 in the installed package to validate the proposed change (kernel on Node 16), and additionally run the Thrift suite (no change needed). - musl: add a node:16-alpine variant alongside node:20-alpine. - Trigger on push to this branch (+ manual dispatch); default rc 1.16.0-rc.1. - METRIC_VIEW scenario: treat absence as env-dependent (note, not failure) — a metric view only exists if one is defined on the warehouse. Co-authored-by: Isaac
1 parent f73e65a commit 9264301

2 files changed

Lines changed: 43 additions & 15 deletions

File tree

.github/workflows/kernel-rc-cross-os.yml

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
1016
on:
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
2432
env:
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"

ci/kernel-rc-bugbash/scripts/03-metadata-tags.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,11 @@ const collect = async (op) => { const r = await op.fetchAll(); await op.close();
7777
fn: async () => {
7878
const types = await collect(await session.getTableTypes());
7979
const names = types.map((t) => JSON.stringify(t)).join(',');
80-
// METRIC_VIEW tables exist only if one is defined; report what table types the server exposes.
80+
// METRIC_VIEW only appears if a metric view is defined on the warehouse,
81+
// which is environment-dependent — so its ABSENCE is not a driver bug
82+
// (don't hard-fail). Report which case we observed.
8183
if (/METRIC_VIEW/i.test(names)) return 'METRIC_VIEW present in table types';
82-
throw new Error('no METRIC_VIEW defined on this warehouse to inspect (expected unless one exists); table types seen: ' + names.slice(0, 120));
84+
return 'no METRIC_VIEW defined on this warehouse (env-dependent, not a bug); table types seen: ' + names.slice(0, 120);
8385
},
8486
},
8587
]);

0 commit comments

Comments
 (0)