|
1 | | -name: Benchmark PR |
| 1 | +name: CI |
2 | 2 |
|
3 | 3 | on: |
4 | 4 | pull_request: |
5 | 5 | push: |
6 | 6 | branches: [master] |
7 | 7 |
|
8 | | -permissions: |
9 | | - contents: write |
10 | | - pull-requests: write |
11 | | - |
12 | 8 | concurrency: |
13 | 9 | group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} |
14 | 10 | cancel-in-progress: true |
15 | 11 |
|
16 | 12 | jobs: |
| 13 | + clippy: |
| 14 | + runs-on: ubuntu-latest |
| 15 | + steps: |
| 16 | + - uses: actions/checkout@v4 |
| 17 | + - uses: dtolnay/rust-toolchain@stable |
| 18 | + - run: cargo clippy --all-targets --locked |
| 19 | + test: |
| 20 | + runs-on: ubuntu-latest |
| 21 | + steps: |
| 22 | + - uses: actions/checkout@v4 |
| 23 | + - uses: dtolnay/rust-toolchain@stable |
| 24 | + - run: cargo test --all-features |
17 | 25 | benchmark: |
18 | 26 | name: Run benchmarks (instruction counts) |
19 | 27 | runs-on: ubuntu-latest |
|
31 | 39 | - name: Run benchmarks on PR branch |
32 | 40 | if: github.event_name == 'pull_request' |
33 | 41 | run: | |
34 | | - cargo bench --bench generate_moves_iai |
35 | | - # Save the results |
36 | | - mkdir -p benchmark-results-pr |
37 | | - cp -r target/iai benchmark-results-pr/ || true |
| 42 | + cargo bench --bench generate_moves_iai 2>&1 | tee benchmark-pr.txt |
38 | 43 |
|
39 | 44 | - name: Run benchmarks on master |
40 | 45 | if: github.event_name == 'push' |
|
50 | 55 | - name: Run benchmarks on base branch |
51 | 56 | if: github.event_name == 'pull_request' |
52 | 57 | run: | |
53 | | - cargo bench --bench generate_moves_iai |
54 | | - mkdir -p benchmark-results-base |
55 | | - cp -r target/iai benchmark-results-base/ || true |
| 58 | + cargo bench --bench generate_moves_iai 2>&1 | tee benchmark-base.txt |
56 | 59 |
|
57 | 60 | - name: Compare benchmarks |
58 | 61 | if: github.event_name == 'pull_request' |
|
64 | 67 | echo "**Using iai-callgrind:** Counts instructions via Cachegrind - deterministic and not affected by CI noise." >> benchmark_results.md |
65 | 68 | echo "" >> benchmark_results.md |
66 | 69 | echo '```' >> benchmark_results.md |
67 | | - # Show recent benchmark output |
68 | | - find target/iai -name "*.txt" -type f -exec tail -50 {} \; 2>/dev/null | head -100 >> benchmark_results.md || echo "See job logs for detailed results" >> benchmark_results.md |
| 70 | + # Extract and format benchmark results |
| 71 | + if [ -f benchmark-base.txt ]; then |
| 72 | + # Remove ANSI color codes and extract relevant lines |
| 73 | + sed 's/\x1b\[[0-9;]*m//g' benchmark-base.txt | \ |
| 74 | + grep -E "(generate_moves_iai::|Instructions:)" | \ |
| 75 | + awk '/generate_moves_iai::/ {name=$1; gsub(/generate_moves_iai::/, "", name); gsub(/generate_/, "", name); gsub(/_/, " ", name)} |
| 76 | + /Instructions:/ {print name": "$2" ("$3")"}' >> benchmark_results.md |
| 77 | + else |
| 78 | + echo "See job logs for detailed results" >> benchmark_results.md |
| 79 | + fi |
69 | 80 | echo '```' >> benchmark_results.md |
70 | 81 | echo "" >> benchmark_results.md |
71 | 82 | echo "<sub>📏 Instruction counts via Cachegrind. Lower is better. Results are deterministic.</sub>" >> benchmark_results.md |
|
0 commit comments