Benchmarks #2
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: Benchmarks | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| timeout: | |
| description: Per-experiment timeout (e.g., 2m, 5m) | |
| required: false | |
| default: 5m | |
| namespace: | |
| description: Fleet workspace namespace | |
| required: false | |
| default: fleet-local | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: benchmarks-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| GOARCH: amd64 | |
| CGO_ENABLED: 0 | |
| SETUP_K3D_VERSION: 'v5.8.3' | |
| jobs: | |
| benchmark: | |
| name: Run Fleet Benchmarks | |
| runs-on: ubuntu-22.04 | |
| timeout-minutes: 90 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 | |
| - name: Setup Go | |
| uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6 | |
| with: | |
| go-version: '1.24.x' | |
| check-latest: true | |
| - name: Install host dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y jq | |
| # Rely on kubectl and helm preinstalled in GitHub runner image | |
| - name: Install k3d | |
| run: curl --silent --fail https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | TAG=${{ env.SETUP_K3D_VERSION }} bash | |
| - name: Create k3d cluster | |
| run: | | |
| # Use default settings; no custom Docker network required | |
| k3d_args="" ./dev/setup-k3d upstream | |
| - name: Build Fleet images | |
| run: | | |
| ./dev/build-fleet | |
| - name: Import images to k3d | |
| env: | |
| FLEET_E2E_CLUSTER: k3d-upstream | |
| run: | | |
| ./dev/import-images-k3d | |
| - name: Install Fleet to cluster | |
| run: | | |
| ./dev/setup-fleet upstream | |
| - name: Label local cluster for benchmarks | |
| run: | | |
| kubectl -n ${{ inputs.namespace }} label clusters.fleet.cattle.io local fleet.cattle.io/benchmark=true --overwrite | |
| - name: Run Benchmarks | |
| env: | |
| FLEET_BENCH_TIMEOUT: ${{ inputs.timeout }} | |
| FLEET_BENCH_NAMESPACE: ${{ inputs.namespace }} | |
| run: | | |
| go run ./benchmarks/cmd run -d benchmarks/db -t "$FLEET_BENCH_TIMEOUT" -n "$FLEET_BENCH_NAMESPACE" | |
| - name: Collect benchmark report filename | |
| id: report | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| file=$(ls -1t b-*.json | head -n1) | |
| echo "report=$file" >> "$GITHUB_OUTPUT" | |
| echo "Found report: $file" | |
| - name: Upload benchmark JSON | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: benchmark-report | |
| path: ${{ steps.report.outputs.report }} |