diff --git a/.github/workflows/tracker-tests.yaml b/.github/workflows/tracker-tests.yaml index 6a7edca57..e634f3078 100644 --- a/.github/workflows/tracker-tests.yaml +++ b/.github/workflows/tracker-tests.yaml @@ -19,6 +19,8 @@ jobs: with: bun-version: latest - uses: actions/checkout@v3 + with: + fetch-depth: 0 # Required for coverage comparison - name: Cache tracker modules uses: actions/cache@v3 with: @@ -31,25 +33,246 @@ jobs: run: | cd tracker bun install + + # Run tracker tests and generate coverage - name: Jest tests run: | cd tracker/tracker bun run test:ci + - name: Building test run: | cd tracker/tracker bun run build + + # Run tracker-assist tests and generate coverage - name: (TA) Jest tests run: | cd tracker/tracker-assist bun run test:ci + - name: (TA) Building test run: | cd tracker/tracker-assist bun run build - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v3 + + # For PRs, parse coverage and create comment + - name: Parse Coverage Reports + if: github.event_name == 'pull_request' + id: coverage-report + run: | + echo "TRACKER_COVERAGE=$(cd tracker/tracker && jq -r '.total.lines.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "TRACKER_STATEMENTS=$(cd tracker/tracker && jq -r '.total.statements.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "TRACKER_BRANCHES=$(cd tracker/tracker && jq -r '.total.branches.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "TRACKER_FUNCTIONS=$(cd tracker/tracker && jq -r '.total.functions.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + + echo "TA_COVERAGE=$(cd tracker/tracker-assist && jq -r '.total.lines.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "TA_STATEMENTS=$(cd tracker/tracker-assist && jq -r '.total.statements.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "TA_BRANCHES=$(cd tracker/tracker-assist && jq -r '.total.branches.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "TA_FUNCTIONS=$(cd tracker/tracker-assist && jq -r '.total.functions.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + + # For PRs, check out base branch for comparison + - name: Check out base branch for coverage comparison + if: github.event_name == 'pull_request' + uses: actions/checkout@v3 with: - token: ${{ secrets.CODECOV_TOKEN }} - flags: tracker - iame: tracker + ref: ${{ github.base_ref }} + path: dev + + - name: Setup base branch for comparison + if: github.event_name == 'pull_request' + run: | + cd base-branch/tracker + bun install + + # Calculate coverage for base branch + - name: Get base branch coverage + if: github.event_name == 'pull_request' + id: base-coverage + run: | + cd base-branch/tracker/tracker + bun run test:ci + echo "BASE_TRACKER_COVERAGE=$(jq -r '.total.lines.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "BASE_TRACKER_STATEMENTS=$(jq -r '.total.statements.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "BASE_TRACKER_BRANCHES=$(jq -r '.total.branches.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "BASE_TRACKER_FUNCTIONS=$(jq -r '.total.functions.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + + cd ../tracker-assist + bun run test:ci + echo "BASE_TA_COVERAGE=$(jq -r '.total.lines.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "BASE_TA_STATEMENTS=$(jq -r '.total.statements.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "BASE_TA_BRANCHES=$(jq -r '.total.branches.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + echo "BASE_TA_FUNCTIONS=$(jq -r '.total.functions.pct' coverage/coverage-summary.json)" >> $GITHUB_ENV + + # Calculate coverage changes + - name: Calculate Coverage Changes + if: github.event_name == 'pull_request' + run: | + echo "TRACKER_COVERAGE_CHANGE=$(echo "$TRACKER_COVERAGE - $BASE_TRACKER_COVERAGE" | bc)" >> $GITHUB_ENV + echo "TRACKER_STATEMENTS_CHANGE=$(echo "$TRACKER_STATEMENTS - $BASE_TRACKER_STATEMENTS" | bc)" >> $GITHUB_ENV + echo "TRACKER_BRANCHES_CHANGE=$(echo "$TRACKER_BRANCHES - $BASE_TRACKER_BRANCHES" | bc)" >> $GITHUB_ENV + echo "TRACKER_FUNCTIONS_CHANGE=$(echo "$TRACKER_FUNCTIONS - $BASE_TRACKER_FUNCTIONS" | bc)" >> $GITHUB_ENV + + echo "TA_COVERAGE_CHANGE=$(echo "$TA_COVERAGE - $BASE_TA_COVERAGE" | bc)" >> $GITHUB_ENV + echo "TA_STATEMENTS_CHANGE=$(echo "$TA_STATEMENTS - $BASE_TA_STATEMENTS" | bc)" >> $GITHUB_ENV + echo "TA_BRANCHES_CHANGE=$(echo "$TA_BRANCHES - $BASE_TA_BRANCHES" | bc)" >> $GITHUB_ENV + echo "TA_FUNCTIONS_CHANGE=$(echo "$TA_FUNCTIONS - $BASE_TA_FUNCTIONS" | bc)" >> $GITHUB_ENV + + # Generate coverage badge SVGs and html report + - name: Generate Coverage Badges and Reports + if: github.event_name == 'pull_request' + run: | + mkdir -p coverage-report + + # Create a simple HTML report with coverage data + cat > coverage-report/index.html << EOL + + +
+| Metric | +Current | +Base | +Change | +
|---|---|---|---|
| Lines | +${TRACKER_COVERAGE}% | +${BASE_TRACKER_COVERAGE}% | ++ ${TRACKER_COVERAGE_CHANGE >= 0 ? '+' : ''}${TRACKER_COVERAGE_CHANGE}% + | +
| Statements | +${TRACKER_STATEMENTS}% | +${BASE_TRACKER_STATEMENTS}% | ++ ${TRACKER_STATEMENTS_CHANGE >= 0 ? '+' : ''}${TRACKER_STATEMENTS_CHANGE}% + | +
| Branches | +${TRACKER_BRANCHES}% | +${BASE_TRACKER_BRANCHES}% | ++ ${TRACKER_BRANCHES_CHANGE >= 0 ? '+' : ''}${TRACKER_BRANCHES_CHANGE}% + | +
| Functions | +${TRACKER_FUNCTIONS}% | +${BASE_TRACKER_FUNCTIONS}% | ++ ${TRACKER_FUNCTIONS_CHANGE >= 0 ? '+' : ''}${TRACKER_FUNCTIONS_CHANGE}% + | +
| Metric | +Current | +Base | +Change | +
|---|---|---|---|
| Lines | +${TA_COVERAGE}% | +${BASE_TA_COVERAGE}% | ++ ${TA_COVERAGE_CHANGE >= 0 ? '+' : ''}${TA_COVERAGE_CHANGE}% + | +
| Statements | +${TA_STATEMENTS}% | +${BASE_TA_STATEMENTS}% | ++ ${TA_STATEMENTS_CHANGE >= 0 ? '+' : ''}${TA_STATEMENTS_CHANGE}% + | +
| Branches | +${TA_BRANCHES}% | +${BASE_TA_BRANCHES}% | ++ ${TA_BRANCHES_CHANGE >= 0 ? '+' : ''}${TA_BRANCHES_CHANGE}% + | +
| Functions | +${TA_FUNCTIONS}% | +${BASE_TA_FUNCTIONS}% | ++ ${TA_FUNCTIONS_CHANGE >= 0 ? '+' : ''}${TA_FUNCTIONS_CHANGE}% + | +
Generated on $(date)
+