ci: add sanity checking #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |