Skip to content

fix(modules): add missing module dependencies #18

fix(modules): add missing module dependencies

fix(modules): add missing module dependencies #18

name: Claude Code Build Feature Tests
on:
push:
branches: [main, feat/build-claude]
paths:
- 'src/modules/build/**'
- 'src/modules/build/services/claude-code/**'
- 'src/modules/build/services/cloud/**'
- 'test/**'
- 'vitest.config.ts'
- 'package.json'
pull_request:
branches: [main]
paths:
- 'src/modules/build/**'
- 'src/modules/build/services/claude-code/**'
- 'src/modules/build/services/cloud/**'
- 'test/**'
jobs:
test-unit:
name: Unit Tests
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v3
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run linting
run: pnpm run lint:check
- name: Run type checking
run: pnpm run typecheck
- name: Run unit tests
run: pnpm run test:run -- --reporter=verbose
- name: Generate coverage report
run: pnpm run test:coverage
- name: Upload coverage to Codecov
if: matrix.node-version == '20.x'
uses: codecov/codecov-action@v3
with:
files: ./coverage/coverage-final.json
flags: unittests
name: claude-code-build-coverage
fail_ci_if_error: false
test-integration:
name: Integration Tests
runs-on: ubuntu-latest
needs: test-unit
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run integration tests
run: pnpm run test:run -- **/*.integration.spec.ts
env:
NODE_ENV: test
SUPABASE_URL: ${{ secrets.SUPABASE_URL_TEST }}
SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY_TEST }}
test-e2e:
name: E2E Tests
runs-on: ubuntu-latest
needs: test-integration
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build project
run: pnpm run build
- name: Run E2E tests
run: pnpm run test:e2e
env:
NODE_ENV: test
test-performance:
name: Performance Tests
runs-on: ubuntu-latest
needs: test-unit
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run performance tests
run: |
pnpm run test:run -- --grep "performance" --reporter=verbose
env:
NODE_ENV: test
PERFORMANCE_TEST: true
coverage-check:
name: Coverage Validation
runs-on: ubuntu-latest
needs: [test-unit, test-integration]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Check coverage thresholds
run: |
pnpm run test:coverage
# Extract coverage percentages
COVERAGE_REPORT=$(cat coverage/coverage-summary.json)
# Check if coverage meets thresholds
node -e "
const coverage = $COVERAGE_REPORT;
const total = coverage.total;
const thresholds = {
lines: 80,
statements: 80,
functions: 60,
branches: 60
};
let failed = false;
for (const [metric, threshold] of Object.entries(thresholds)) {
const pct = total[metric].pct;
if (pct < threshold) {
console.error(\`❌ \${metric} coverage (\${pct}%) is below threshold (\${threshold}%)\`);
failed = true;
} else {
console.log(\`✅ \${metric} coverage (\${pct}%) meets threshold (\${threshold}%)\`);
}
}
if (failed) {
process.exit(1);
}
"
security-scan:
name: Security Scan
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
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 8
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run security audit
run: pnpm audit --production
continue-on-error: true
- name: Check for sensitive data patterns
run: |
# Check for common sensitive data patterns
echo "Checking for sensitive data patterns..."
# Define patterns to check
PATTERNS=(
"api[_-]?key"
"secret"
"password"
"token"
"private[_-]?key"
)
# Check source files
for pattern in "${PATTERNS[@]}"; do
echo "Checking for pattern: $pattern"
if grep -r -i "$pattern" src/ --include="*.ts" --include="*.js" --exclude-dir=node_modules --exclude-dir=test-fixtures; then
echo "⚠️ Warning: Found potential sensitive data pattern: $pattern"
fi
done