Nightly Benchmarks #102
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: Nightly Benchmarks | |
| on: | |
| schedule: | |
| - cron: '0 13 * * *' # 6 AM PDT | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| id-token: write | |
| concurrency: | |
| group: nightly-bench | |
| cancel-in-progress: false | |
| jobs: | |
| gcp: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Checkout trunk | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: trunk | |
| path: alyze | |
| - name: Checkout gh-pages | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: gh-pages | |
| path: gh-pages | |
| - uses: google-github-actions/auth@v2 | |
| with: | |
| workload_identity_provider: ${{ vars.WORKLOAD_IDENTITY_PROVIDER }} | |
| service_account: ${{ vars.GCP_SERVICE_ACCOUNT }} | |
| - uses: google-github-actions/setup-gcloud@v2 | |
| - name: Run GCP benchmarks | |
| run: | | |
| chmod +x gh-pages/benches/*.sh | |
| NAPKIN_GCP_ZONE=us-east1-b REPO_DIR=$GITHUB_WORKSPACE/alyze \ | |
| bash gh-pages/benches/bench-fleet-ci.sh | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: gcp-results | |
| path: alyze/data/results.csv | |
| aws: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Checkout trunk | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: trunk | |
| path: alyze | |
| - name: Checkout gh-pages | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: gh-pages | |
| path: gh-pages | |
| - uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: ${{ vars.AWS_ROLE_ARN }} | |
| aws-region: us-east-2 | |
| - name: Setup SSH key | |
| run: | | |
| mkdir -p ~/.ssh | |
| echo "${{ secrets.AWS_SSH_KEY }}" > ~/.ssh/alyze-bench.pem | |
| chmod 600 ~/.ssh/alyze-bench.pem | |
| - name: Run AWS benchmarks | |
| run: | | |
| chmod +x gh-pages/benches/*.sh | |
| REPO_DIR=$GITHUB_WORKSPACE/alyze \ | |
| bash gh-pages/benches/bench-fleet-aws-ci.sh | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: aws-results | |
| path: alyze/data/results.csv | |
| azure: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Checkout trunk | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: trunk | |
| path: alyze | |
| - name: Checkout gh-pages | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: gh-pages | |
| path: gh-pages | |
| - uses: azure/login@v2 | |
| with: | |
| client-id: ${{ vars.AZURE_CLIENT_ID }} | |
| tenant-id: ${{ vars.AZURE_TENANT_ID }} | |
| subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }} | |
| - name: Run Azure benchmarks | |
| run: | | |
| chmod +x gh-pages/benches/*.sh | |
| REPO_DIR=$GITHUB_WORKSPACE/alyze \ | |
| bash gh-pages/benches/bench-fleet-azure-ci.sh | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: azure-results | |
| path: alyze/data/results.csv | |
| publish: | |
| needs: [gcp, aws, azure] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout gh-pages | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| ref: gh-pages | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Publish results | |
| run: | | |
| TODAY=$(date -u +%Y-%m-%d) | |
| mkdir -p data | |
| # Merge GCP and AWS results (skip headers). | |
| # Start fresh so re-running on the same day overwrites, not appends. | |
| rm -f "data/${TODAY}.csv" | |
| for f in artifacts/*/results.csv; do | |
| tail -n +2 "$f" >> "data/${TODAY}.csv" | |
| done | |
| # Stamp every row of this day with one timestamp so the chart shows a | |
| # single point per date (GCP and AWS otherwise finish seconds apart). | |
| awk -F, -v OFS=, -v ts="${TODAY}T00:00:00Z" '{$4=ts; print}' \ | |
| "data/${TODAY}.csv" > "data/${TODAY}.csv.tmp" && mv "data/${TODAY}.csv.tmp" "data/${TODAY}.csv" | |
| # Rebuild combined CSV | |
| echo "benchmark,machine,throughput_mibs,timestamp,commit" > data/data.csv | |
| for f in data/2*.csv; do | |
| cat "$f" >> data/data.csv | |
| done | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git add data/ | |
| git diff --cached --quiet && echo "No changes to commit" && exit 0 | |
| git commit -m "bench: ${TODAY} results" | |
| git push |