feat(proto): issue CIDs in order of ascending path ID #611
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: Performance Tests | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| inputs: | |
| compare_upstream: | |
| type: boolean | |
| default: true | |
| description: Compare against upstream quinn | |
| publish_metrics: | |
| type: boolean | |
| default: false | |
| description: Publish metrics to perf.iroh.computer | |
| concurrency: | |
| group: perf-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| RUST_BACKTRACE: 1 | |
| RUSTFLAGS: -Dwarnings | |
| SCCACHE_GHA_ENABLED: "true" | |
| RUSTC_WRAPPER: "sccache" | |
| jobs: | |
| build: | |
| name: Build ${{ matrix.impl }} perf | |
| runs-on: [self-hosted, linux, X64] | |
| timeout-minutes: 30 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - impl: noq | |
| artifact: noq-perf | |
| - impl: upstream-quinn | |
| artifact: quinn-perf-upstream | |
| steps: | |
| - uses: actions/checkout@v6 | |
| if: matrix.impl == 'noq' | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: mozilla-actions/sccache-action@v0.0.9 | |
| - name: Get latest quinn release tag | |
| if: matrix.impl == 'upstream-quinn' | |
| id: quinn-release | |
| run: | | |
| LATEST_TAG=$(curl -s https://api.github.com/repos/quinn-rs/quinn/releases/latest | jq -r '.tag_name') | |
| echo "tag=$LATEST_TAG" >> $GITHUB_OUTPUT | |
| echo "Using upstream quinn release: $LATEST_TAG" | |
| - name: Clone upstream quinn | |
| if: matrix.impl == 'upstream-quinn' | |
| run: | | |
| rm -rf /tmp/upstream-quinn | |
| git clone --depth 1 --branch ${{ steps.quinn-release.outputs.tag }} \ | |
| https://github.com/quinn-rs/quinn.git /tmp/upstream-quinn | |
| - name: Build perf binary | |
| run: cargo build --release -p perf --features json-output | |
| working-directory: ${{ matrix.impl == 'upstream-quinn' && '/tmp/upstream-quinn' || '.' }} | |
| - name: Upload binary | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: ${{ matrix.artifact }} | |
| path: ${{ matrix.impl == 'upstream-quinn' && '/tmp/upstream-quinn/target/release/quinn-perf' || 'target/release/noq-perf' }} | |
| retention-days: 1 | |
| raw-perf: | |
| name: Raw perf ${{ matrix.impl }} | |
| needs: build | |
| runs-on: [self-hosted, linux, X64] | |
| timeout-minutes: 30 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| impl: [noq, upstream-quinn] | |
| include: | |
| - impl: noq | |
| artifact: noq-perf | |
| - impl: upstream-quinn | |
| artifact: quinn-perf-upstream | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/download-artifact@v5 | |
| with: | |
| name: ${{ matrix.artifact }} | |
| path: ./bin | |
| - name: Run benchmarks | |
| run: | | |
| PERF_BIN=$(ls ./bin/noq-perf ./bin/quinn-perf 2>/dev/null | head -1) | |
| chmod +x "$PERF_BIN" | |
| ./.github/scripts/run_perf.sh "$PERF_BIN" results/${{ matrix.impl }} | |
| - uses: actions/upload-artifact@v5 | |
| with: | |
| name: raw-results-${{ matrix.impl }} | |
| path: results/ | |
| retention-days: 3 | |
| netsim-perf: | |
| name: Netsim perf ${{ matrix.impl }} | |
| needs: build | |
| runs-on: [self-hosted, linux, X64] | |
| timeout-minutes: 30 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| impl: [noq, upstream-quinn] | |
| include: | |
| - impl: noq | |
| artifact: noq-perf | |
| - impl: upstream-quinn | |
| artifact: quinn-perf-upstream | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/download-artifact@v5 | |
| with: | |
| name: ${{ matrix.artifact }} | |
| path: ./bin | |
| - name: Fetch netsim | |
| run: | | |
| rm -rf /tmp/chuck | |
| git clone --depth 1 https://github.com/n0-computer/chuck.git /tmp/chuck | |
| - name: Install netsim deps | |
| run: | | |
| cd /tmp/chuck/netsim | |
| sudo apt-get update | |
| ./setup.sh || true | |
| ./cleanup.sh || true | |
| - name: Setup netsim bins | |
| run: | | |
| mkdir -p /tmp/chuck/netsim/bins | |
| if [ -f ./bin/noq-perf ]; then | |
| chmod +x ./bin/noq-perf | |
| cp ./bin/noq-perf /tmp/chuck/netsim/bins/noq-perf | |
| else | |
| chmod +x ./bin/quinn-perf | |
| cp ./bin/quinn-perf /tmp/chuck/netsim/bins/noq-perf | |
| fi | |
| - name: Run netsim perf test | |
| id: run_netsim | |
| continue-on-error: true | |
| run: | | |
| ./.github/scripts/run_netsim_perf.sh ${{ matrix.impl }} /tmp/chuck/netsim | |
| - name: Collect results | |
| if: always() | |
| run: | | |
| mkdir -p results/${{ matrix.impl }} | |
| cp /tmp/chuck/netsim/report/*.json results/${{ matrix.impl }}/ 2>/dev/null || true | |
| cp /tmp/chuck/netsim/logs/*.log results/${{ matrix.impl }}/ 2>/dev/null || true | |
| - uses: actions/upload-artifact@v5 | |
| if: always() | |
| with: | |
| name: netsim-results-${{ matrix.impl }} | |
| path: results/ | |
| retention-days: 3 | |
| - name: Cleanup netsim | |
| if: always() | |
| run: | | |
| cd /tmp/chuck/netsim | |
| ./cleanup.sh || true | |
| compare: | |
| name: Compare results | |
| needs: [raw-perf, netsim-perf] | |
| if: always() | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/download-artifact@v5 | |
| with: | |
| pattern: raw-results-* | |
| merge-multiple: true | |
| path: raw-results/ | |
| - uses: actions/download-artifact@v5 | |
| with: | |
| pattern: netsim-results-* | |
| merge-multiple: true | |
| path: netsim-results/ | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Generate comparison report | |
| id: compare | |
| run: | | |
| python .github/scripts/compare_results.py raw-results/ netsim-results/ > comparison.md | |
| echo "COMPARISON<<EOF" >> $GITHUB_OUTPUT | |
| cat comparison.md >> $GITHUB_OUTPUT | |
| echo "EOF" >> $GITHUB_OUTPUT | |
| - name: Convert to Metro format | |
| run: | | |
| python .github/scripts/perf_to_metro.py raw-results/ netsim-results/ \ | |
| --commit ${{ github.sha }} > metro.json | |
| - name: Show results | |
| run: | | |
| echo "=== Comparison Report ===" | |
| cat comparison.md | |
| echo "" | |
| echo "=== Metro Metrics ===" | |
| cat metro.json | |
| - name: Upload comparison report | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: perf-comparison-report | |
| path: | | |
| comparison.md | |
| metro.json | |
| retention-days: 7 | |
| - name: Publish metrics to Metro | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| run: | | |
| if [[ -n "${{ secrets.METRO_TOKEN }}" && -n "${{ secrets.METRO_ENDPOINT }}" ]]; then | |
| curl -X POST \ | |
| -H "Content-Type: application/json" \ | |
| -H "Authorization: Bearer ${{ secrets.METRO_TOKEN }}" \ | |
| --data @metro.json \ | |
| "${{ secrets.METRO_ENDPOINT }}" | |
| else | |
| echo "Metro secrets not configured, skipping publish" | |
| fi | |
| - name: Find existing comment | |
| if: github.event_name == 'pull_request' | |
| uses: peter-evans/find-comment@v3 | |
| id: find-comment | |
| with: | |
| issue-number: ${{ github.event.pull_request.number }} | |
| comment-author: 'github-actions[bot]' | |
| body-includes: '<!-- perf-report -->' | |
| - name: Create new PR comment | |
| if: github.event_name == 'pull_request' && steps.find-comment.outputs.comment-id == '' | |
| uses: peter-evans/create-or-update-comment@v5 | |
| with: | |
| issue-number: ${{ github.event.pull_request.number }} | |
| body: | | |
| <!-- perf-report --> | |
| ## Performance Comparison Report | |
| <details> | |
| <summary><code>${{ github.event.pull_request.head.sha }}</code> - <a href="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}">artifacts</a></summary> | |
| ${{ steps.compare.outputs.COMPARISON }} | |
| </details> | |
| - name: Update existing PR comment | |
| if: github.event_name == 'pull_request' && steps.find-comment.outputs.comment-id != '' | |
| uses: peter-evans/create-or-update-comment@v5 | |
| with: | |
| comment-id: ${{ steps.find-comment.outputs.comment-id }} | |
| edit-mode: append | |
| body: | | |
| --- | |
| <details> | |
| <summary><code>${{ github.event.pull_request.head.sha }}</code> - <a href="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}">artifacts</a></summary> | |
| ${{ steps.compare.outputs.COMPARISON }} | |
| </details> | |