on: push: branches: - master - main paths-ignore: - "**/*.md" pull_request: paths-ignore: - "**/*.md" permissions: # deployments permission to deploy GitHub pages website deployments: write # contents permission to update benchmark contents in gh-pages branch contents: write # allow posting comments to pull request pull-requests: write name: Benchmark jobs: Compare: runs-on: ubuntu-latest steps: - name: Fetch Repository uses: actions/checkout@v4 with: fetch-depth: 0 # to be able to retrieve the last commit in main - name: Install Go uses: actions/setup-go@v5 with: # NOTE: Keep this in sync with the version from go.mod go-version: "1.21.x" - name: Run Benchmark run: set -o pipefail; go test ./... -benchmem -run=^$ -bench . | tee output.txt # NOTE: Benchmarks could change with different CPU types - name: Get GitHub Runner System Information uses: kenchan0130/actions-system-info@v1.3.0 id: system-info - name: Get Main branch SHA id: get-main-branch-sha run: | SHA=$(git rev-parse origin/main) echo "sha=$SHA" >> $GITHUB_OUTPUT - name: Get Benchmark Results from main branch id: cache uses: actions/cache/restore@v4 with: path: ./cache key: ${{ steps.get-main-branch-sha.outputs.sha }}-${{ runner.os }}-${{ steps.system-info.outputs.cpu-model }}-benchmark # This will only run if we have Benchmark Results from main branch - name: Compare PR Benchmark Results with main branch uses: benchmark-action/github-action-benchmark@v1.20.3 if: steps.cache.outputs.cache-hit == 'true' with: tool: 'go' output-file-path: output.txt external-data-json-path: ./cache/benchmark-data.json # Do not save the data (This allows comparing benchmarks) save-data-file: false fail-on-alert: true # Comment on the PR if the branch is not a fork comment-on-alert: ${{ github.event.pull_request.head.repo.fork == false }} github-token: ${{ secrets.GITHUB_TOKEN }} summary-always: true alert-threshold: "150%" - name: Store Benchmark Results for main branch uses: benchmark-action/github-action-benchmark@v1.20.3 if: ${{ github.ref_name == 'main' }} with: tool: 'go' output-file-path: output.txt external-data-json-path: ./cache/benchmark-data.json # Save the data to external file (cache) save-data-file: true fail-on-alert: false github-token: ${{ secrets.GITHUB_TOKEN }} summary-always: true alert-threshold: "150%" - name: Publish Benchmark Results to GitHub Pages uses: benchmark-action/github-action-benchmark@v1.20.3 if: ${{ github.ref_name == 'main' }} with: tool: 'go' output-file-path: output.txt benchmark-data-dir-path: "benchmarks" fail-on-alert: false github-token: ${{ secrets.GITHUB_TOKEN }} comment-on-alert: true summary-always: true # Save the data to external file (GitHub Pages) save-data-file: true alert-threshold: "150%" # TODO: reactivate it later -> when v3 is the stable one #auto-push: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} auto-push: false - name: Update Benchmark Results cache uses: actions/cache/save@v4 if: ${{ github.ref_name == 'main' }} with: path: ./cache key: ${{ steps.get-main-branch-sha.outputs.sha }}-${{ runner.os }}-${{ steps.system-info.outputs.cpu-model }}-benchmark