name: Benchmark

on:
- pull_request

jobs:
  benchmark:
    strategy:
      matrix:
        ref:
        - master
        - ${{ github.sha }}

    runs-on: ubuntu-latest

    steps:
    - name: Steup Go
      uses: actions/setup-go@v2
      with:
        go-version: 1.17

    - name: Checkout
      uses: actions/checkout@v2
      with:
        ref: ${{ matrix.ref }}

    - name: Run Benchmarks
      run: go test -v -run '^$' -bench '(Marshal|Unmarshal)$/codeResponse' -benchmem -benchtime 3s -cpu 1 -count 5 ./json | tee bench.txt

    - name: Upload Benchmarks
      uses: actions/upload-artifact@v2
      with:
        name: ${{ matrix.ref }}
        path: bench.txt

  benchstat:
    needs: [benchmark]
    runs-on: ubuntu-latest

    steps:
    - name: Steup Go
      uses: actions/setup-go@v2
      with:
        go-version: 1.17

    - name: Setup Benchstat
      run: go install golang.org/x/perf/cmd/benchstat@latest

    - name: Download Benchmark Results
      uses: actions/download-artifact@v2
      with:
        path: .

    - name: Run Benchstat
      run: benchstat ./master/bench.txt ./${{ github.sha }}/bench.txt | tee benchstat.txt

    - name: Upload Benchstat Results
      uses: actions/upload-artifact@v2
      with:
        name: benchstat
        path: benchstat.txt
