129 lines
3.3 KiB
YAML
129 lines
3.3 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
pull_request:
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
runtime: [node, bun]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Setup Node.js
|
|
if: matrix.runtime == 'node'
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
check-latest: true
|
|
|
|
- name: Setup Bun
|
|
if: matrix.runtime == 'bun'
|
|
uses: oven-sh/setup-bun@v2
|
|
with:
|
|
# bun.sh downloads currently fail with:
|
|
# "Failed to list releases from GitHub: 401" -> "Unexpected HTTP response: 400"
|
|
bun-download-url: "https://github.com/oven-sh/bun/releases/latest/download/bun-linux-x64.zip"
|
|
|
|
- name: Setup Node.js (tooling for bun)
|
|
if: matrix.runtime == 'bun'
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
check-latest: true
|
|
|
|
- name: Runtime versions
|
|
run: |
|
|
node -v
|
|
npm -v
|
|
if [ "${{ matrix.runtime }}" = "bun" ]; then bun -v; fi
|
|
|
|
- name: Capture node path
|
|
run: echo "NODE_BIN=$(dirname \"$(node -p \"process.execPath\")\")" >> "$GITHUB_ENV"
|
|
|
|
- name: Enable corepack and pin pnpm
|
|
run: |
|
|
corepack enable
|
|
corepack prepare pnpm@10.23.0 --activate
|
|
pnpm -v
|
|
|
|
- name: Install dependencies
|
|
env:
|
|
CI: true
|
|
run: |
|
|
export PATH="$NODE_BIN:$PATH"
|
|
which node
|
|
node -v
|
|
pnpm -v
|
|
pnpm install --ignore-scripts=false --config.engine-strict=false --config.enable-pre-post-scripts=true || pnpm install --ignore-scripts=false --config.engine-strict=false --config.enable-pre-post-scripts=true
|
|
|
|
- name: Lint (node)
|
|
if: matrix.runtime == 'node'
|
|
run: pnpm lint
|
|
|
|
- name: Test (node)
|
|
if: matrix.runtime == 'node'
|
|
run: pnpm test
|
|
|
|
- name: Build (node)
|
|
if: matrix.runtime == 'node'
|
|
run: pnpm build
|
|
|
|
- name: Protocol check (node)
|
|
if: matrix.runtime == 'node'
|
|
run: pnpm protocol:check
|
|
|
|
- name: Lint (bun)
|
|
if: matrix.runtime == 'bun'
|
|
run: bunx biome check src
|
|
|
|
- name: Test (bun)
|
|
if: matrix.runtime == 'bun'
|
|
run: bunx vitest run
|
|
|
|
- name: Build (bun)
|
|
if: matrix.runtime == 'bun'
|
|
run: bunx tsc -p tsconfig.json
|
|
|
|
macos-app:
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Select Xcode 26.1
|
|
run: |
|
|
sudo xcode-select -s /Applications/Xcode_26.1.app
|
|
xcodebuild -version
|
|
|
|
- name: Install SwiftLint / SwiftFormat
|
|
run: |
|
|
brew install swiftlint swiftformat
|
|
|
|
- name: Show toolchain
|
|
run: |
|
|
sw_vers
|
|
xcodebuild -version
|
|
swift --version
|
|
|
|
- name: SwiftLint
|
|
run: swiftlint --config .swiftlint.yml
|
|
|
|
- name: SwiftFormat (lint mode)
|
|
run: swiftformat --lint apps/macos/Sources --config .swiftformat
|
|
|
|
- name: Swift build (release)
|
|
run: swift build --package-path apps/macos --configuration release
|
|
|
|
- name: Swift tests
|
|
run: swift test --package-path apps/macos --parallel
|