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: Pipeline Performance Tests - Continuous | ||
|
Check failure on line 1 in .github/workflows/pipeline-perf-test-continuous.yml
|
||
| permissions: | ||
| contents: read | ||
| on: | ||
| push: | ||
| branches: [main] | ||
| paths: | ||
| - 'rust/**' | ||
| - 'tools/pipeline_perf_test/**' | ||
| - 'tools/comparison_dashboard/**' | ||
| - '.github/workflows/scripts/**' | ||
| - '.github/workflows/pipeline-perf-test-continuous.yml' | ||
| workflow_dispatch: | ||
| jobs: | ||
| pipeline-perf-test: | ||
| runs-on: oracle-bare-metal-64cpu-1024gb-x86-64-ubuntu-24 | ||
| # Route tool-created temp files to RUNNER_TEMP, which GitHub Actions empties | ||
| # at the start and end of every job. Required when running directly on the | ||
| # shared bare-metal host (no job-level container) per | ||
| # https://github.com/open-telemetry/community/blob/main/docs/how-to-use-bare-metal-runner.md | ||
| env: | ||
| TMPDIR: ${{ runner.temp }} | ||
| TMP: ${{ runner.temp }} | ||
| TEMP: ${{ runner.temp }} | ||
| steps: | ||
| - name: Harden the runner (Audit all outbound calls) | ||
| uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4 | ||
| with: | ||
| egress-policy: audit | ||
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | ||
| - name: System topology (NUMA, CPU, memory) | ||
| run: | | ||
| echo "### System Topology" >> $GITHUB_STEP_SUMMARY | ||
| echo '```' >> $GITHUB_STEP_SUMMARY | ||
| lscpu | grep -E "Model name|Socket|Core|Thread|NUMA|CPU\(s\)" | tee -a $GITHUB_STEP_SUMMARY | ||
| echo "" | tee -a $GITHUB_STEP_SUMMARY | ||
| numactl --hardware 2>/dev/null | tee -a $GITHUB_STEP_SUMMARY || echo "numactl not available" | ||
| echo '```' >> $GITHUB_STEP_SUMMARY | ||
| - name: Set up Python | ||
| uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 | ||
| with: | ||
| python-version: "3.14" | ||
| - name: Set up Docker Buildx | ||
| uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0 | ||
| - name: Set up Python (non-OL8) | ||
| if: ${{ steps.detect_os.outputs.id != 'ol' }} | ||
| uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 | ||
| with: | ||
| python-version: "3.14" | ||
| - name: Set up Docker Buildx | ||
| uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0 | ||
| - name: Build dataflow_engine | ||
| run: | | ||
| git submodule init | ||
| git submodule update | ||
| cd rust/otap-dataflow | ||
| docker buildx build --load --build-context otel-arrow=../../ -f Dockerfile -t df_engine . | ||
| cd ../.. | ||
| - name: Install dependencies | ||
| run: | | ||
| python -m pip install --user --require-hashes -r tools/pipeline_perf_test/orchestrator/requirements.lock.txt | ||
| python -m pip install --user --require-hashes -r tools/pipeline_perf_test/load_generator/requirements.lock.txt | ||
| - name: Run pipeline performance test log suite | ||
| run: | | ||
| cd tools/pipeline_perf_test | ||
| python orchestrator/run_orchestrator.py --config test_suites/integration/continuous/100klrps-docker.yaml | ||
| - name: Upload benchmark results for processing | ||
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | ||
| with: | ||
| name: benchmark-results-pipeline | ||
| path: tools/pipeline_perf_test/results/integration/gh-actions-benchmark/*.json | ||
| - name: Add benchmark link to job summary | ||
| run: | | ||
| echo "### Benchmark Results" >> $GITHUB_STEP_SUMMARY | ||
| echo "[View the benchmark results here](https://open-telemetry.github.io/otel-arrow/benchmarks/continuous/)" >> $GITHUB_STEP_SUMMARY | ||
| # Bare-metal host cleanup: remove only the Docker artifacts created by | ||
| # this job. Avoid broad commands (e.g. rm -rf /tmp/*) per the shared | ||
| # runner guidelines. | ||
| - name: Clean up Docker artifacts created by this job | ||
| if: always() | ||
| run: | | ||
| docker rmi -f df_engine 2>/dev/null || true | ||
| # Prune dangling (unused) build cache and images only. | ||
| docker builder prune -f 2>/dev/null || true | ||
| docker image prune -f 2>/dev/null || true | ||
| update-benchmarks: | ||
| runs-on: ubuntu-24.04 | ||
| needs: [pipeline-perf-test] | ||
| permissions: | ||
| # contents permission to update benchmark contents in gh-pages branch | ||
| contents: write | ||
| steps: | ||
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | ||
| - name: Download benchmark artifacts | ||
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | ||
| with: | ||
| pattern: benchmark-results-pipeline* | ||
| merge-multiple: true | ||
| path: results-pipeline | ||
| - name: Consolidate pipeline benchmark data | ||
| run: | | ||
| bash ./.github/workflows/scripts/consolidate-benchmarks.sh results-pipeline output-pipeline.json | ||
| - name: Update pipeline benchmark data and deploy to GitHub Pages | ||
| uses: benchmark-action/github-action-benchmark@52576c92bccf6ac60c8223ec7eb2565637cae9ba # v1.22.1 | ||
| with: | ||
| tool: "customSmallerIsBetter" | ||
| output-file-path: output-pipeline.json | ||
| gh-pages-branch: benchmarks | ||
| max-items-in-chart: 100 | ||
| github-token: ${{ secrets.GITHUB_TOKEN }} | ||
| benchmark-data-dir-path: "docs/benchmarks/continuous" | ||
| auto-push: true | ||
| save-data-file: true | ||
| - name: Add benchmark link to job summary | ||
| run: | | ||
| echo "### Benchmark Results" >> $GITHUB_STEP_SUMMARY | ||
| echo "[View the pipeline benchmark results here](https://open-telemetry.github.io/otel-arrow/benchmarks/continuous/)" >> $GITHUB_STEP_SUMMARY | ||