Skip to content

Apply shadcn preset (#188) #58

Apply shadcn preset (#188)

Apply shadcn preset (#188) #58

Workflow file for this run

name: Code Quality
on:
schedule:
# Run code quality checks daily at 0500 UTC on Sundays
- cron: '0 5 * * 0'
workflow_dispatch:
push:
branches: [main]
paths:
- '**/src/**'
- '**/package.json'
- '**/tsconfig.json'
- '**/tsconfig.node.json'
- '.github/workflows/**'
jobs:
code-quality:
name: Code Quality Analysis
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
# --- Setup ---
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0 # Full history for better analysis
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version-file: .nvmrc
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: 'Create web .env file'
working-directory: ./packages/web
run: |
echo "${{ vars.ENV_CI }}" > .env
- name: Create infrastructure .env file
working-directory: ./packages/infra
run: |
echo "${{ vars.CDK_ENV_DEV }}" > .env
# --- Project Checks ---
- name: Run ESLint with detailed output
run: |
echo "## ESLint Analysis" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
npm run lint -- --output-file lint-output.txt || true
if [ -s lint-output.txt ]; then
echo "### Issues Found:" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
cat lint-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 > format-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 format-output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
fi
- name: Build check
run: |
echo "" >> $GITHUB_STEP_SUMMARY
echo "## Build" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
npm run build > build-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 build-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 --omit=dev > 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 > package-output.txt 2>&1 || true
if [ -s package-output.txt ]; then
echo '```' >> $GITHUB_STEP_SUMMARY
cat package-output.txt >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
else
echo "✅ All packages are up to date" >> $GITHUB_STEP_SUMMARY
fi
# -- Web Package Checks ---
- name: Run web tests with detailed coverage
run: |
echo "" >> $GITHUB_STEP_SUMMARY
echo "## Test Coverage Analysis" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
npm run test:coverage -w packages/web
# Extract coverage summary
if [ -f packages/web/coverage/coverage-summary.json ]; then
echo "### Web 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('packages/web/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
# --- Infrastructure Package Checks ---
- name: Run infrastructure tests with detailed coverage
run: |
echo "" >> $GITHUB_STEP_SUMMARY
echo "## Infrastructure Test Coverage Analysis" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
npm run test:coverage -w packages/infra
# Extract coverage summary
if [ -f packages/infra/coverage/coverage-summary.json ]; then
echo "### Infrastructure 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('packages/infra/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: Archive test results
if: always()
uses: actions/upload-artifact@v7
with:
name: test-results
path: |
lint-output.txt
format-output.txt
build-output.txt
security-output.txt
package-output.txt
retention-days: 7