Skip to content

ci: add sanity checking #1

ci: add sanity checking

ci: add sanity checking #1

Workflow file for this run

name: CI
on:
push:
branches: main
pull_request:
branches: main
jobs:
# Main test job - tests all package managers on Ubuntu with Node 20
test:
name: Test ${{ matrix.package-manager }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
package-manager: [npm, pnpm, yarn, bun]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Setup pnpm
if: matrix.package-manager == 'pnpm'
uses: pnpm/action-setup@v4
with:
version: latest
- name: Setup Yarn
if: matrix.package-manager == 'yarn'
run: corepack enable yarn
- name: Setup Bun
if: matrix.package-manager == 'bun'
uses: oven-sh/setup-bun@v2
- name: Install dependencies
run: |
if [ "${{ matrix.package-manager }}" = "npm" ]; then
npm ci && cd agent && npm install
elif [ "${{ matrix.package-manager }}" = "pnpm" ]; then
pnpm install --frozen-lockfile && cd agent && pnpm install
elif [ "${{ matrix.package-manager }}" = "yarn" ]; then
yarn install --frozen-lockfile && cd agent && yarn install
elif [ "${{ matrix.package-manager }}" = "bun" ]; then
bun install --frozen-lockfile && cd agent && bun install
fi
- name: Lint
run: |
if [ "${{ matrix.package-manager }}" = "npm" ]; then
npm run lint
elif [ "${{ matrix.package-manager }}" = "pnpm" ]; then
pnpm lint
elif [ "${{ matrix.package-manager }}" = "yarn" ]; then
yarn lint
elif [ "${{ matrix.package-manager }}" = "bun" ]; then
bun run lint
fi
- name: Build
run: |
if [ "${{ matrix.package-manager }}" = "npm" ]; then
npm run build
elif [ "${{ matrix.package-manager }}" = "pnpm" ]; then
pnpm build
elif [ "${{ matrix.package-manager }}" = "yarn" ]; then
yarn build
elif [ "${{ matrix.package-manager }}" = "bun" ]; then
bun run build
fi
- name: Test production start
run: |
timeout 30s bash -c "
if [ '${{ matrix.package-manager }}' = 'npm' ]; then
npm start &
elif [ '${{ matrix.package-manager }}' = 'pnpm' ]; then
pnpm start &
elif [ '${{ matrix.package-manager }}' = 'yarn' ]; then
yarn start &
elif [ '${{ matrix.package-manager }}' = 'bun' ]; then
bun run start &
fi
# Wait for server to start
while ! curl -s http://localhost:3000 > /dev/null; do
sleep 1
done
echo 'Server started successfully'
" || echo "Server test completed"
# Cross-platform test - only npm on different OS/Node versions
cross-platform:
name: Cross-platform (${{ matrix.os }}, Node ${{ matrix.node }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node: [18, 20, 22]
exclude:
# Reduce matrix - skip older Node on non-Ubuntu
- os: windows-latest
node: 18
- os: macos-latest
node: 18
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- name: Install dependencies
run: |
npm ci
cd agent && npm install
- name: Build and lint
run: |
npm run build
npm run lint
# Security audit
security:
name: Security Audit
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm ci
- name: Run audit
run: npm audit --audit-level=moderate
- name: Check outdated packages
run: npm outdated || true