Skip to content

Merge pull request #11 from ajilkumar/feature/test-ci-cd #8

Merge pull request #11 from ajilkumar/feature/test-ci-cd

Merge pull request #11 from ajilkumar/feature/test-ci-cd #8

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
jobs:
# Job 1: Code Quality Checks
quality:
name: Code Quality
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'
cache: 'npm'
- name: Install dependencies
run: npm ci
# - name: Run ESLint
# run: npm run lint
# continue-on-error: true
- name: TypeScript type check
run: npm run typecheck
# Job 2: Run Tests
test:
name: Tests
runs-on: ubuntu-latest
needs: quality
services:
# PostgreSQL test database
postgres:
image: postgres:16-alpine
env:
POSTGRES_USER: devmetrics
POSTGRES_PASSWORD: test_password
POSTGRES_DB: devmetrics_test
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5433:5432
# Redis test instance
redis:
image: redis:7-alpine
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 6380:6379
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run tests with coverage
run: npm run test:coverage
env:
NODE_ENV: test
TEST_DATABASE_URL: postgresql://devmetrics:test_password@localhost:5433/devmetrics_test
DATABASE_URL: postgresql://devmetrics:test_password@localhost:5433/devmetrics_test
TEST_REDIS_URL: redis://localhost:6380
REDIS_URL: redis://localhost:6380
API_KEY_SECRET: test-secret-key-for-ci-only-minimum-32-chars
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_API_URL: https://api.github.com
CACHE_TTL_SHORT: 300
CACHE_TTL_MEDIUM: 900
CACHE_TTL_LONG: 3600
# - name: Upload coverage to Codecov
# uses: codecov/codecov-action@v4
# with:
# files: ./coverage/lcov.info
# flags: unittests
# name: codecov-umbrella
# fail_ci_if_error: false
# env:
# CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
# - name: Comment coverage on PR
# if: github.event_name == 'pull_request'
# uses: romeovs/lcov-reporter-action@v0.3.1
# with:
# github-token: ${{ secrets.GITHUB_TOKEN }}
# lcov-file: ./coverage/lcov.info
# Job 3: Build Check
build:
name: Build
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build TypeScript
run: npm run build
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
retention-days: 7
# Job 4: Security Audit
security:
name: Security Audit
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'
- name: Run npm audit
run: npm audit --audit-level=moderate
continue-on-error: true
- name: Check for vulnerable dependencies
run: |
npm install -g npm-check-updates
ncu --doctor --doctorTest "npm test"
continue-on-error: true