| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- # CI for the node-addon-system packages under native/system. A separate
- # workflow from ci.yml keeps the native OS/architecture matrix independent of
- # the harness Node matrix. Each platform job builds once and tests those bytes
- # under every supported Node release. Release assembly and publication use the
- # companion Node Addon System Release workflow.
- name: Node Addon System
- on:
- pull_request:
- paths:
- - '.github/workflows/node-addon-system.yml'
- - '.github/workflows/node-addon-system-release.yml'
- - 'native/system/**'
- - 'package.json'
- - 'pnpm-lock.yaml'
- - 'pnpm-workspace.yaml'
- push:
- branches: [master]
- paths:
- - '.github/workflows/node-addon-system.yml'
- - '.github/workflows/node-addon-system-release.yml'
- - 'native/system/**'
- - 'package.json'
- - 'pnpm-lock.yaml'
- - 'pnpm-workspace.yaml'
- workflow_dispatch:
- concurrency:
- group: ${{ github.workflow }}-${{ github.ref }}
- cancel-in-progress: true
- permissions:
- contents: read
- env:
- # CI runs must never report to the production telemetry endpoint baked
- # into apps/cli/cordis.yml (AppCLIEntry disables the row when set).
- DSH_TELEMETRY_DISABLED: '1'
- defaults:
- run:
- working-directory: native/system
- jobs:
- matrix:
- name: Matrix
- runs-on: ubuntu-24.04
- outputs:
- ci: ${{ steps.matrix.outputs.ci }}
- steps:
- - uses: actions/checkout@v4
- - id: matrix
- run: echo "ci=$(node ./scripts/github-matrix.mjs ci)" >> "$GITHUB_OUTPUT"
- native:
- name: ${{ matrix.platform }}
- needs: matrix
- runs-on: ${{ matrix.runner }}
- strategy:
- fail-fast: false
- matrix: ${{ fromJson(needs.matrix.outputs.ci) }}
- steps:
- - uses: actions/checkout@v4
- - uses: pnpm/action-setup@v4
- with:
- package_json_file: package.json
- - uses: actions/setup-node@v4
- with:
- node-version: 24
- cache: pnpm
- cache-dependency-path: pnpm-lock.yaml
- - name: Install dependencies
- run: pnpm install --filter @deepseek-ai/node-addon-system-workspace... --frozen-lockfile
- - name: Install musl toolchain
- if: runner.os == 'Linux'
- run: |
- sudo apt-get update -q
- sudo apt-get install -yq musl-tools
- - name: Build TypeScript
- run: pnpm build:ts
- - name: Typecheck
- run: pnpm typecheck
- - name: Build native binaries (this architecture is the builder of record)
- run: pnpm build:native
- - name: Entry tests (keyless)
- run: node ./test/entry.test.js
- # NALR_REQUIRE_LANDLOCK: a self-skip on the very platform that exists to
- # prove enforcement would be a false green, so an unenforcing kernel
- # fails the leg instead of skipping.
- - name: Launcher tests (real kernel enforcement)
- if: runner.os == 'Linux'
- run: node ./test/launcher.test.js
- env:
- NALR_REQUIRE_LANDLOCK: 1
- - name: Pack rehearsal (pack → install → confine, this platform only)
- run: |
- node ./scripts/pack-release.mjs .release/npm --current-platform-only
- node ./scripts/verify-packed-install.mjs .release/npm --current-platform-only
- env:
- NALR_REQUIRE_LANDLOCK: ${{ runner.os == 'Linux' && '1' || '0' }}
- - name: Verify platform payload rules (Node 24)
- run: pnpm test:packaging
- - name: Flock behavior (Node 24, built addon)
- run: |
- pnpm build:test-oracle
- pnpm test:flock
- - name: Test the same musl addon on Node 24 without a compiler
- if: runner.os == 'Linux'
- run: >-
- docker run --rm -v "$PWD:$PWD" -w "$PWD"
- node:24-alpine
- node --test ./test/flock.test.js ./test/package-matrix.test.js
- - uses: actions/setup-node@v4
- with:
- node-version: 20
- - name: Test the same binaries on Node 20
- run: node --test ./test/flock.test.js ./test/package-matrix.test.js
- - name: Test the same musl addon on Node 20 without a compiler
- if: runner.os == 'Linux'
- run: >-
- docker run --rm -v "$PWD:$PWD" -w "$PWD"
- node:20-alpine
- node --test ./test/flock.test.js ./test/package-matrix.test.js
- - uses: actions/setup-node@v4
- with:
- node-version: 22
- - name: Test the same binaries on Node 22
- run: node --test ./test/flock.test.js ./test/package-matrix.test.js
- - name: Test the same musl addon on Node 22 without a compiler
- if: runner.os == 'Linux'
- run: >-
- docker run --rm -v "$PWD:$PWD" -w "$PWD"
- node:22-alpine
- node --test ./test/flock.test.js ./test/package-matrix.test.js
- - uses: actions/setup-node@v4
- with:
- node-version: 26
- - name: Test the same binaries on Node 26
- run: node --test ./test/flock.test.js ./test/package-matrix.test.js
- - name: Test the same musl addon on Node 26 without a compiler
- if: runner.os == 'Linux'
- run: >-
- docker run --rm -v "$PWD:$PWD" -w "$PWD"
- node:26-alpine
- node --test ./test/flock.test.js ./test/package-matrix.test.js
|