Skip to content

Logger (#2)

Logger (#2) #1

Workflow file for this run

name: Code Quality
on:
schedule:
# Run code quality checks daily at 2 AM UTC on Sundays
- cron: '0 2 * * 0'
workflow_dispatch:
push:
branches: [main]
paths:
- 'src/**'
- 'package.json'
- 'tsconfig.json'
- '.github/workflows/**'
jobs:
code-quality:
name: Code Quality Analysis
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0 # Full history for better analysis
- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version-file: .nvmrc
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run ESLint with detailed output
run: |
echo "## ESLint Analysis" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
npm run lint -- --output-file eslint-output.txt || true
if [ -s eslint-output.txt ]; then
echo "### Issues Found:" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat eslint-output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
else
echo "✅ No ESLint issues found" >> $GITHUB_STEP_SUMMARY
fi
- name: Check code formatting
run: |
echo "" >> $GITHUB_STEP_SUMMARY
echo "## Prettier Analysis" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
npm run format:check > prettier-output.txt 2>&1 || true
if [ $? -eq 0 ]; then
echo "✅ All files are properly formatted" >> $GITHUB_STEP_SUMMARY
else
echo "❌ Some files need formatting:" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat prettier-output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
fi
- name: Run tests with detailed coverage
run: |
echo "" >> $GITHUB_STEP_SUMMARY
echo "## Test Coverage Analysis" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
npm run test:coverage -- --reporter=verbose
# Extract coverage summary
if [ -f coverage/coverage-summary.json ]; then
echo "### Coverage Summary:" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
# Use Node.js to parse JSON and create a table
node -e "
const fs = require('fs');
const coverage = JSON.parse(fs.readFileSync('coverage/coverage-summary.json', 'utf8'));
const total = coverage.total;
console.log('| Metric | Percentage | Covered/Total |');
console.log('|--------|------------|---------------|');
console.log(\`| Lines | \${total.lines.pct}% | \${total.lines.covered}/\${total.lines.total} |\`);
console.log(\`| Functions | \${total.functions.pct}% | \${total.functions.covered}/\${total.functions.total} |\`);
console.log(\`| Branches | \${total.branches.pct}% | \${total.branches.covered}/\${total.branches.total} |\`);
console.log(\`| Statements | \${total.statements.pct}% | \${total.statements.covered}/\${total.statements.total} |\`);
" >> $GITHUB_STEP_SUMMARY
fi
- name: Build check
run: |
echo "" >> $GITHUB_STEP_SUMMARY
echo "## Build" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
npm run build > tsc-output.txt 2>&1
if [ $? -eq 0 ]; then
echo "✅ Build successful" >> $GITHUB_STEP_SUMMARY
else
echo "❌ Build failed:" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat tsc-output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
fi
- name: Security audit
run: |
echo "" >> $GITHUB_STEP_SUMMARY
echo "## Security Audit" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
npm audit --audit-level=moderate > security-output.txt 2>&1 || true
if grep -q "found 0 vulnerabilities" security-output.txt; then
echo "✅ No security vulnerabilities found" >> $GITHUB_STEP_SUMMARY
else
echo "⚠️ Security vulnerabilities detected:" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat security-output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
fi
- name: Package analysis
run: |
echo "" >> $GITHUB_STEP_SUMMARY
echo "## Package Analysis" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
# Check for outdated packages
echo "### Outdated Packages:" >> $GITHUB_STEP_SUMMARY
npm outdated > outdated-output.txt 2>&1 || true
if [ -s outdated-output.txt ]; then
echo '```' >> $GITHUB_STEP_SUMMARY
cat outdated-output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
else
echo "✅ All packages are up to date" >> $GITHUB_STEP_SUMMARY
fi
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: |
coverage/
eslint-output.txt
prettier-output.txt
tsc-output.txt
infra-tsc-output.txt
security-output.txt
outdated-output.txt
retention-days: 7