mirror of
https://github.com/jackwener/OpenCLI.git
synced 2026-09-14 18:25:42 +08:00
6d1fb6d219
* feat(runtime): add runtime detection utility for Bun/Node.js Add runtime-detect.ts module that detects whether opencli is running under Bun or Node.js via globalThis.Bun check. Includes helper functions for version string and label formatting. Add corresponding unit tests that work correctly under both runtimes. * feat(runtime): integrate Bun runtime support into CLI tooling - doctor: show runtime label (e.g. 'node v22.13.0') in diagnostic output - package.json: add dev:bun, start:bun, test:bun convenience scripts - E2E helpers: support OPENCLI_TEST_RUNTIME env var for runtime selection * ci: add Bun compatibility test job and document runtime support - ci.yml: add bun-test job using oven-sh/setup-bun@v2 - README.md: update Prerequisites to mention Bun, add Runtime Support section with usage examples for dev:bun, start:bun, test:bun * ci: pin Bun version in compatibility job --------- Co-authored-by: jackwener <jakevingoo@gmail.com>
149 lines
3.7 KiB
YAML
149 lines
3.7 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main, dev]
|
|
pull_request:
|
|
branches: [main, dev]
|
|
schedule:
|
|
- cron: '0 8 * * 1' # Weekly Monday 08:00 UTC — smoke tests
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: ci-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# ── Fast gate: typecheck + build ──
|
|
build:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version: '22'
|
|
cache: 'npm'
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Type check
|
|
run: npx tsc --noEmit
|
|
|
|
- name: Build
|
|
run: npm run build
|
|
|
|
# ── Unit tests (vitest shard) ──
|
|
unit-test:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
node-version: ['20', '22']
|
|
shard: [1, 2]
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version: ${{ matrix.node-version }}
|
|
cache: 'npm'
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Run unit tests (Node ${{ matrix.node-version }}, shard ${{ matrix.shard }}/2)
|
|
run: npm test -- --reporter=verbose --shard=${{ matrix.shard }}/2
|
|
|
|
# ── Bun compatibility check ──
|
|
bun-test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: oven-sh/setup-bun@v2
|
|
with:
|
|
bun-version: 1.3.5
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version: '22'
|
|
cache: 'npm'
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Run unit tests under Bun
|
|
run: bun vitest run --project unit --reporter=verbose
|
|
|
|
adapter-test:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
needs: build
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version: '22'
|
|
cache: 'npm'
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Run focused adapter tests
|
|
run: npm run test:adapter -- --reporter=verbose
|
|
|
|
# ── Smoke tests (scheduled / manual only) ──
|
|
smoke-test:
|
|
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
|
|
needs: build
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
# NOTE: Windows excluded — browser-actions/setup-chrome hangs during
|
|
# Chrome MSI installation on Windows runners (known issue).
|
|
os: [ubuntu-latest, macos-latest]
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version: '22'
|
|
cache: 'npm'
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Setup Chrome
|
|
uses: ./.github/actions/setup-chrome
|
|
id: setup-chrome
|
|
|
|
- name: Build
|
|
run: npm run build
|
|
|
|
- name: Run smoke tests (Linux, via xvfb)
|
|
if: runner.os == 'Linux'
|
|
run: |
|
|
xvfb-run --auto-servernum --server-args="-screen 0 1280x720x24" \
|
|
npx vitest run tests/smoke/ --reporter=verbose
|
|
env:
|
|
OPENCLI_BROWSER_EXECUTABLE_PATH: ${{ steps.setup-chrome.outputs.chrome-path }}
|
|
|
|
- name: Run smoke tests (macOS / Windows)
|
|
if: runner.os != 'Linux'
|
|
run: npx vitest run tests/smoke/ --reporter=verbose
|
|
env:
|
|
OPENCLI_BROWSER_EXECUTABLE_PATH: ${{ steps.setup-chrome.outputs.chrome-path }}
|
|
timeout-minutes: 15
|