diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml new file mode 100644 index 00000000..6cb09658 --- /dev/null +++ b/.github/workflows/benchmark.yml @@ -0,0 +1,59 @@ +on: + push: + branches: + - master + - main + paths: + - "**" + - "!**.md" + pull_request: + paths: + - "**" + - "!**.md" + +permissions: + deployments: write + contents: write + +name: Benchmark +jobs: + Compare: + runs-on: ubuntu-latest + steps: + - name: Fetch Repository + uses: actions/checkout@v4 + + - name: Install Go + uses: actions/setup-go@v4 + with: + # NOTE: Keep this in sync with the version from go.mod + go-version: "1.20.x" + + - name: Run Benchmarks + run: | + set -o pipefail + for d in */ ; do + cd "$d" + go test ./... -benchmem -run=^$ -bench . | tee -a ../output.txt + cd .. + done + shell: bash + + - name: Get Previous Benchmark Results + uses: actions/cache@v3 + with: + path: ./cache + key: ${{ runner.os }}-benchmark + + - name: Save Benchmark Results + uses: benchmark-action/github-action-benchmark@v1.18.0 + with: + tool: "go" + output-file-path: output.txt + github-token: ${{ secrets.GITHUB_TOKEN }} + benchmark-data-dir-path: "benchmarks" + fail-on-alert: true + comment-on-alert: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} + #summary-always: ${{ github.event_name != 'push' && github.event_name != 'workflow_dispatch' }} + auto-push: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} + save-data-file: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} \ No newline at end of file