Merge pull request #22 from LonelyGuy-SE1/dependabot/submodules/third… #75
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Raijin-LOB Engine CI | |
| on: | |
| push: | |
| branches: ["main", "master"] | |
| paths: | |
| - 'src/**' | |
| - 'include/**' | |
| - 'tests/**' | |
| - 'benchmarks/**' | |
| - 'CMakeLists.txt' | |
| - 'third_party/**' | |
| - '.github/workflows/ci.yaml' | |
| - '**.cpp' | |
| - '**.hpp' | |
| pull_request: | |
| branches: ["main", "master"] | |
| paths: | |
| - 'src/**' | |
| - 'include/**' | |
| - 'tests/**' | |
| - 'benchmarks/**' | |
| - 'CMakeLists.txt' | |
| - 'third_party/**' | |
| - '.github/workflows/ci.yaml' | |
| - '**.cpp' | |
| - '**.hpp' | |
| permissions: | |
| contents: read | |
| jobs: | |
| build-and-test: | |
| name: Build and Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| with: | |
| submodules: 'recursive' | |
| - name: Install depedencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y build-essential cmake clang-tidy clang-format | |
| - name: Configure CMake | |
| run: | | |
| mkdir build | |
| cd build | |
| cmake .. -DCMAKE_BUILD_TYPE=Release | |
| - name: Build | |
| run: | | |
| cd build | |
| make -j$(nproc) | |
| - name: Run tests | |
| run: | | |
| cd build | |
| ctest --output-on-failure | |
| benchmarks: | |
| name: Performance Benchmarks | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| with: | |
| submodules: 'recursive' | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y build-essential cmake | |
| - name: CPU info | |
| run: | | |
| echo "## CPU Context" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| lscpu >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| - name: Configure and Build | |
| run: | | |
| mkdir -p build && cd build | |
| cmake .. -DCMAKE_BUILD_TYPE=Release | |
| make -j$(nproc) raijin_benchmarks raijin_latency_histograms | |
| - name: Run Microbenchmarks | |
| run: | | |
| cd build | |
| echo "## Microbenchmarks (ns, median of 3 runs)" >> $GITHUB_STEP_SUMMARY | |
| echo '```text' >> $GITHUB_STEP_SUMMARY | |
| ./raijin_benchmarks --benchmark_repetitions=3 --benchmark_min_time=0.3s >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| - name: Run Latency Histograms | |
| run: | | |
| cd build | |
| echo "## Latency Histograms (CPU cycles, median of 3 runs)" >> $GITHUB_STEP_SUMMARY | |
| echo '```text' >> $GITHUB_STEP_SUMMARY | |
| ./raijin_latency_histograms --benchmark_counters_tabular=true --benchmark_repetitions=3 --benchmark_min_time=0.1s >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| - name: Generate JSON artifact | |
| run: | | |
| cd build | |
| ./raijin_benchmarks --benchmark_format=json --benchmark_out=benchmark_results.json --benchmark_repetitions=3 --benchmark_min_time=0.3s | |
| - name: Upload benchmark JSON | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: benchmark-results | |
| path: build/benchmark_results.json | |
| - name: Binary sizes | |
| run: | | |
| cd build | |
| echo "## Binary Sizes" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| ls -lh raijin_benchmarks raijin_latency_histograms >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| perf-profile: | |
| name: Hardware Profile | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| with: | |
| submodules: 'recursive' | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y build-essential cmake linux-tools-generic || true | |
| - name: CPU info | |
| run: | | |
| echo "## CPU Context" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| lscpu >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| - name: Configure and Build | |
| run: | | |
| mkdir -p build && cd build | |
| cmake .. -DCMAKE_BUILD_TYPE=Release | |
| make -j$(nproc) raijin_latency_histograms raijin_benchmarks | |
| - name: Binary sizes | |
| run: | | |
| cd build | |
| echo "## Binary Sizes" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| ls -lh raijin_benchmarks raijin_latency_histograms >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| - name: Perf stat (basic counters) | |
| run: | | |
| cd build | |
| echo "## Hardware Counters — Basic" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| sudo perf stat -e cycles,instructions,cache-references,cache-misses,branch-misses,branch-instructions \ | |
| ./raijin_latency_histograms --benchmark_repetitions=1 --benchmark_min_time=0.1s >> $GITHUB_STEP_SUMMARY 2>&1 || echo "perf not available" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| - name: Perf stat (detailed — L1/L2/LLC/TLB) | |
| run: | | |
| cd build | |
| echo "## Hardware Counters — Detailed (L1/L2/LLC/TLB)" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| sudo perf stat -d \ | |
| ./raijin_latency_histograms --benchmark_repetitions=1 --benchmark_min_time=0.1s >> $GITHUB_STEP_SUMMARY 2>&1 || echo "perf not available" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| - name: Perf stat (random-ID add only) | |
| run: | | |
| cd build | |
| echo "## Hardware Counters — Random-ID Add (BM_Hist_AddNoMatch only)" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| sudo perf stat -e cycles,instructions,cache-references,cache-misses,branch-misses,L1-dcache-load-misses,L1-icache-load-misses,LLC-load-misses,dTLB-load-misses \ | |
| ./raijin_latency_histograms --benchmark_filter=BM_Hist_AddNoMatch --benchmark_repetitions=1 --benchmark_min_time=0.2s >> $GITHUB_STEP_SUMMARY 2>&1 || echo "perf not available" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| - name: Perf stat (match only) | |
| run: | | |
| cd build | |
| echo "## Hardware Counters — Match (BM_Hist_MatchOneLevel only)" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| sudo perf stat -e cycles,instructions,cache-references,cache-misses,branch-misses,L1-dcache-load-misses,L1-icache-load-misses,LLC-load-misses,dTLB-load-misses \ | |
| ./raijin_latency_histograms --benchmark_filter=BM_Hist_MatchOneLevel --benchmark_repetitions=1 --benchmark_min_time=0.2s >> $GITHUB_STEP_SUMMARY 2>&1 || echo "perf not available" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| - name: Perf record (flamegraph data) | |
| run: | | |
| cd build | |
| echo "## Perf Record" >> $GITHUB_STEP_SUMMARY | |
| echo "Generating flamegraph data (uploaded as artifact)..." >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| sudo perf record --call-graph dwarf -o perf.data \ | |
| ./raijin_latency_histograms --benchmark_repetitions=1 --benchmark_min_time=0.1s || true | |
| sudo perf script -i perf.data > perf_script.txt 2>&1 || true | |
| gzip -c perf.data > perf_data.gz || true | |
| echo "Flamegraph data ready." >> $GITHUB_STEP_SUMMARY | |
| - name: Upload perf data | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: perf-data | |
| path: | | |
| build/perf_data.gz | |
| build/perf_script.txt |