Skip to content

Update Deterministic hardhat via viatrix PR #39

Update Deterministic hardhat via viatrix PR

Update Deterministic hardhat via viatrix PR #39

Workflow file for this run

name: Coverage Check
on:
pull_request:
branches: [main, master]
jobs:
coverage:
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Print environment versions
run: |
echo "Node.js: $(node -v)"
echo "NPM: $(npm -v)"
npx hardhat --version
npx solcjs --version 2>/dev/null || echo "(will be downloaded by Hardhat if needed)"
- name: Setup environment variables
run: |
cp .env.example .env
echo "✅ Environment configured"
- name: Fetch main branch baseline
run: |
echo "📥 Fetching coverage baseline from main branch..."
git fetch origin main:refs/remotes/origin/main
git show origin/main:coverage-baseline.json > coverage-baseline-main.json 2>/dev/null || echo "{}"
- name: Run coverage
run: |
set -e
echo ""
echo "📊 Running test coverage analysis in CI..."
echo "This generates fresh coverage from your PR code"
npm run coverage
- name: Display coverage comparison
run: |
set -e
echo ""
echo "=================================================="
echo " COVERAGE VALIDATION"
echo "=================================================="
echo ""
# Extract coverage from CI run (actual)
CI_COV=$(node -e "
const fs = require('fs');
const content = fs.readFileSync('coverage/lcov.info', 'utf8').replace(/\r\n/g, '\n');
let linesFound = 0, linesHit = 0;
content.split('\n').forEach(line => {
if (line.startsWith('LF:')) linesFound += parseInt(line.substring(3));
if (line.startsWith('LH:')) linesHit += parseInt(line.substring(3));
});
console.log(linesFound > 0 ? ((linesHit / linesFound) * 100).toFixed(2) : '0');
")
# Extract PR baseline (what developer committed)
PR_BASELINE=$(node -e "
try {
const data = require('./coverage-baseline.json');
console.log(data.lines || '0');
} catch(e) {
console.log('0');
}
")
# Extract main baseline (production baseline)
MAIN_BASELINE=$(node -e "
try {
const data = require('./coverage-baseline-main.json');
console.log(data.lines || '0');
} catch(e) {
console.log('0');
}
")
echo "📊 Coverage Results (Lines):"
echo " CI (actual): ${CI_COV}% ← Fresh coverage from this PR"
echo " PR baseline: ${PR_BASELINE}% ← Baseline you committed"
echo " Main baseline: ${MAIN_BASELINE}% ← Baseline from main branch"
echo ""
echo "✓ Check 1: CI coverage should match PR baseline"
echo " (proves you ran coverage locally)"
echo "✓ Check 2: CI coverage should be >= Main baseline - 0.2%"
echo " (proves coverage didn't decrease beyond tolerance)"
echo ""
echo "💡 Allowed tolerance: ±0.2%"
echo ""
echo "=================================================="
echo ""
- name: Verify coverage
run: |
set -e
echo "🔍 Running coverage validation..."
npx ts-node --files scripts/check-coverage.ts --main-baseline=coverage-baseline-main.json
- name: Upload coverage report (optional)
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage/