name: CI/CD
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
jobs:
test:
name: Test on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node-version: [20.x]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Get pnpm store directory
shell: bash
run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Cache pnpm store
uses: actions/cache@v4
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm run build
- name: Install Zig 0.15.2
run: node scripts/install-zig.js 0.15.2
- name: Run unit tests
run: pnpm run test:unit
- name: Run E2E tests
run: pnpm run test:e2e
- name: Test config system
run: pnpm run test-config
- name: Upload coverage (Ubuntu only)
if: matrix.os == 'ubuntu-latest'
uses: codecov/codecov-action@v4
with:
files: ./coverage/coverage-final.json
flags: unittests
name: codecov-umbrella
fail_ci_if_error: false
test-zig-integration:
name: Test Zig Integration on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
zig-version: ['0.13.0', '0.14.0', '0.15.2']
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm run build
- name: Install Zig ${{ matrix.zig-version }}
run: node scripts/install-zig.js ${{ matrix.zig-version }}
- name: Test analyze tool with Zig ${{ matrix.zig-version }}
run: node scripts/ci-test-analyze.cjs ${{ matrix.zig-version }}
- name: Test compile tool with Zig ${{ matrix.zig-version }}
run: node scripts/ci-test-compile.cjs ${{ matrix.zig-version }}
test-system-zig-detection:
name: Test System Zig Detection
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm run build
- name: Install Zig in system PATH
env:
ZIG_VERSION: '0.15.2'
run: |
wget https://ziglang.org/download/${ZIG_VERSION}/zig-x86_64-linux-${ZIG_VERSION}.tar.xz
tar -xf zig-x86_64-linux-${ZIG_VERSION}.tar.xz
echo "$PWD/zig-x86_64-linux-${ZIG_VERSION}" >> $GITHUB_PATH
- name: Verify system Zig
run: zig version
- name: Test system Zig detection
run: pnpm run test tests/e2e/zig-manager.test.ts
- name: Test E2E with system Zig
run: pnpm run test tests/e2e/zig-tools.test.ts tests/e2e/mcp-integration.test.ts
docker-build:
name: Docker Build Test
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker image
uses: docker/build-push-action@v5
with:
context: .
push: false
tags: zignet:test
cache-from: type=gha
cache-to: type=gha,mode=max