diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml new file mode 100644 index 00000000..60177b72 --- /dev/null +++ b/.github/workflows/bench.yml @@ -0,0 +1,62 @@ +on: + push: + branches: + - main + pull_request: + +name: Benchmark + +jobs: + benchmark: + name: Benchmark + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: cargo-${{ runner.os }}-bench-${{ hashFiles('**/Cargo.toml') }} + continue-on-error: true + + - name: Run benchmarks + run: | + for bench in call dict gil list pyclass pyobject set tuple; do + cargo bench --features hashbrown --bench "bench_$bench" -- --output-format bencher | tee -a output.txt + done + + # Download previous benchmark result from cache (if exists) + - name: Download previous benchmark data + uses: actions/cache@v1 + with: + path: ./cache + key: ${{ runner.os }}-benchmark + + # Run `github-action-benchmark` action + - name: Store benchmark result + uses: rhysd/github-action-benchmark@v1 + with: + name: pyo3-bench + # What benchmark tool the output.txt came from + tool: 'cargo' + # Where the output from the benchmark tool is stored + output-file-path: output.txt + # # 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: true + # GitHub API token to make a commit comment + github-token: ${{ secrets.GITHUB_TOKEN }} + # Enable alert commit comment + comment-on-alert: true + alert-comment-cc-users: '@PyO3/pyo3' + auto-push: ${{ github.event_name != 'pull_request' }}