diff --git a/.github/workflows/benchmark_pr.yml b/.github/workflows/benchmark_pr.yml new file mode 100644 index 000000000..51bea2c5d --- /dev/null +++ b/.github/workflows/benchmark_pr.yml @@ -0,0 +1,67 @@ +name: Benchmark +on: + #push: + # branches: [ master ] + pull_request: + branches: [ master ] +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + +jobs: + benchmark: + name: Performance regression check + runs-on: ubuntu-latest + steps: + - name: Install gtest manually + run: sudo apt-get install libgtest-dev + + - name: Install benchmark manually + run: | + git clone https://github.com/google/benchmark.git + git clone https://github.com/google/googletest.git benchmark/googletest + cd benchmark + cmake -E make_directory "build" + cmake -E chdir "build" cmake -DCMAKE_BUILD_TYPE=Release ../ + cmake --build "build" --config Release + sudo cmake --build "build" --config Release --target install + - uses: actions/checkout@v2 + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBENCHMARK=ON + + - name: Build + # Build your program with the given configuration + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + - name: Download previous benchmark data + uses: actions/cache@v1 + with: + path: ./cache + key: ${{ runner.os }}-benchmark + + - name: Benchmarking + working-directory: ${{github.workspace}}/build + run: ./benchmark --benchmark_format=json | tee benchmark_result.json + # Run `github-action-benchmark` action + - name: Store benchmark result + uses: rhysd/github-action-benchmark@v1 + with: + # What benchmark tool the output.txt came from + tool: 'googlecpp' + # Where the output from the benchmark tool is stored + output-file-path: ${{github.workspace}}/build/benchmark_result.json + # Where the previous data file is stored + #external-data-json-path: ./cache/benchmark-data.json + # Workflow will fail when an alert happens + fail-on-alert: false + # Upload the updated cache file for the next job by actions/cache + # Personal access token to deploy GitHub Pages branch + github-token: ${{ secrets.PERSONAL_TOKEN }} + # Push and deploy GitHub pages branch automatically + #auto-push: true + # Enable alert commit comment + comment-on-alert: true + # Mention @rhysd in the commit comment + alert-comment-cc-users: '@ZigRazor'