Logger (#2) #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |