tests.yml•3.28 kB
name: Tests
on:
# Disabled automatic runs for now
# push:
# branches: [ main, develop ]
# pull_request:
# branches: [ main, develop ]
# Manual trigger only
workflow_dispatch:
inputs:
test_type:
description: 'Type of tests to run'
required: false
default: 'all'
type: choice
options:
- all
- unit
- integration
jobs:
unit-tests:
name: Unit Tests
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node-version: [18.x, 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 }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Type check
run: npm run typecheck
- name: Build project
run: npm run build
- name: Run unit tests
run: npm test
- name: Generate coverage report
if: matrix.os == 'ubuntu-latest' && matrix.node-version == '20.x'
run: npm run test:coverage
- name: Upload coverage to Codecov
if: matrix.os == 'ubuntu-latest' && matrix.node-version == '20.x'
uses: codecov/codecov-action@v4
with:
file: ./coverage/lcov.info
flags: unittests
fail_ci_if_error: false
integration-tests:
name: Integration Tests
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'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build project
run: npm run build
- name: Run integration tests
run: npm run test:integration
timeout-minutes: 10
- name: Upload test artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: integration-test-logs
path: |
tests/**/*.log
tests/**/*.db
retention-days: 7
lint:
name: Lint
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'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Type check
run: npm run typecheck
test-summary:
name: Test Summary
runs-on: ubuntu-latest
needs: [unit-tests, integration-tests, lint]
if: always()
steps:
- name: Check test results
run: |
if [[ "${{ needs.unit-tests.result }}" == "failure" ]] || \
[[ "${{ needs.integration-tests.result }}" == "failure" ]] || \
[[ "${{ needs.lint.result }}" == "failure" ]]; then
echo "❌ Tests failed"
exit 1
else
echo "✅ All tests passed"
exit 0
fi