name: CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
lint:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run linting
run: npm run lint:check
security:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run security audit
run: npm audit --audit-level=moderate
test:
runs-on: ubuntu-latest
permissions:
contents: read
strategy:
matrix:
node-version: [18, 20, 22, 24]
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v5
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run build
run: npm run build
- name: Setup SFCC mock server
run: |
cd tests/servers/sfcc-mock-server
npm install
npm run setup:logs
node server.js --port 3000 &
sleep 5
- name: Run tests
run: npm test
- name: Stop SFCC mock server
if: always()
run: |
# Kill SFCC mock server process
pkill -f "node.*server.js" || true
# Fallback: kill any remaining server processes on port 3000
lsof -ti :3000 | xargs kill -9 2>/dev/null || true
- name: Upload coverage reports (Node.js 20 only)
if: matrix.node-version == 20
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v3
with:
fail_ci_if_error: false
verbose: true
files: ./coverage/lcov.info