diff --git a/.gitea/workflows/Matrix-Timing.yaml b/.gitea/workflows/Matrix-Timing.yaml index 88fa5bd..f00d7b4 100644 --- a/.gitea/workflows/Matrix-Timing.yaml +++ b/.gitea/workflows/Matrix-Timing.yaml @@ -1,4 +1,4 @@ -name: Merge-Checker +name: Benchmarking on: pull_request: @@ -7,7 +7,7 @@ on: - 'unit-tests/timing-results/**' jobs: - build_and_test: + benchmarking: runs-on: ubuntu-latest steps: @@ -39,43 +39,62 @@ jobs: echo "matrix-timing-tests executable not found or not executable" exit 1 fi + - name: Compare timing results id: check_diff run: | - # Ensure the previous version exists (from git) git show origin/${{ github.event.pull_request.head.ref }}:unit-tests/timing-results/matrix-timing-tests.txt > old.txt || echo "" > old.txt cp unit-tests/timing-results/matrix-timing-tests.txt new.txt - echo "Comparing timing results..." + echo "Comparing timing results for changes ≥ 0.1s (ignoring 'Timing Tests' lines)..." - CHANGED=0 - awk ' - BEGIN { change_threshold=0.1 } - /^[0-9]+\.[0-9]+ s: / { - new_time = $1 + changed=0 + + awk -v changed_ref=/tmp/timings_changed.flag ' + BEGIN { + change_threshold = 0.1 + } + FILENAME == "old.txt" && /^[0-9]+\.[0-9]+ s: / { label = substr($0, index($0, ":") + 2) - if (label_times[label]) { - old_time = label_times[label] - delta = new_time - old_time - if (delta < 0) delta = -delta - if (delta >= change_threshold) { - changed = 1 - } - } else { - changed = 1 + if (label != "Timing Tests") { + label_times[label] = $1 } } - FILENAME=="old.txt" && /^[0-9]+\.[0-9]+ s: / { + FILENAME == "new.txt" && /^[0-9]+\.[0-9]+ s: / { + new_time = $1 label = substr($0, index($0, ":") + 2) - label_times[label] = $1 + if (label == "Timing Tests") next + + old_time = label_times[label] + delta = new_time - old_time + if (delta < 0) delta = -delta + + if (old_time != "" && delta >= change_threshold) { + printf "⚠️ %.3f s → %.3f s: %s (Δ=%.3f s)\n", old_time, new_time, label, delta + system("touch " changed_ref) + } else if (old_time == "") { + printf "🆕 New timing entry: %.3f s: %s\n", new_time, label + system("touch " changed_ref) + } } END { - exit changed == 1 ? 0 : 1 + if (!system("test -f " changed_ref)) { + exit 0 + } else { + print "✅ Timings haven’t changed significantly (Δ < 0.1s)." + exit 0 + } } ' old.txt new.txt + if [ -f /tmp/timings_changed.flag ]; then + echo "timings_changed=true" >> $GITHUB_OUTPUT + else + echo "timings_changed=false" >> $GITHUB_OUTPUT + fi + - name: Commit and push timing results - if: steps.check_diff.outcome == 'success' && github.event.pull_request.head.repo.full_name == github.repository + if: steps.check_diff.outputs.timings_changed == 'true' && github.event.pull_request.head.repo.full_name == github.repository run: | git config --global user.name "ci-bot" git config --global user.email "ci-bot@local" diff --git a/.gitea/workflows/Merge-Checker.yaml b/.gitea/workflows/Merge-Checker.yaml index e8d5237..8ec4d89 100644 --- a/.gitea/workflows/Merge-Checker.yaml +++ b/.gitea/workflows/Merge-Checker.yaml @@ -1,8 +1,10 @@ name: Merge-Checker on: - pull_request: - branches: ["**"] + workflow_run: + workflows: ["benchmarking"] + types: + - completed jobs: build_and_test: