Extend benchmarks #457
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- "v*" | |
pull_request: | |
workflow_dispatch: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
# check-manifest: | |
# runs-on: ubuntu-latest | |
# steps: | |
# - uses: actions/checkout@v4 | |
# - run: pipx run check-manifest | |
test: | |
name: ${{ matrix.platform }} (${{ matrix.python-version }}) | |
runs-on: ${{ matrix.platform }} | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.9", "3.10", "3.11"] | |
platform: [ubuntu-latest, macos-latest, windows-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache-dependency-path: "pyproject.toml" | |
cache: "pip" | |
- name: Install dependencies | |
run: | | |
python -m pip install -U pip | |
python -m pip install -e .[test] | |
- name: Test | |
run: pytest --color=yes --cov --cov-report=xml --cov-report=term-missing | |
- name: Coverage | |
uses: codecov/codecov-action@v4 | |
benchmark: | |
name: Benchmark | |
runs-on: ubuntu-latest | |
if: github.event_name == 'pull_request' | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 50 # this is to make sure we obtain the target base commit | |
- name: Retrieve cached data | |
uses: actions/cache/restore@v4 | |
id: cache_data | |
with: | |
path: downloads | |
key: ${{ hashFiles('scripts/download_test_data.py') }} | |
- name: Download Samples | |
if: steps.cache_data.outputs.cache-hit != 'true' | |
run: | | |
pip install requests | |
python scripts/download_test_data.py | |
- name: Cache sample data | |
uses: actions/cache/save@v4 | |
if: steps.cache_data.outputs.cache-hit != 'true' | |
with: | |
path: downloads | |
key: ${{ hashFiles('scripts/download_test_data.py') }} | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.11 | |
cache-dependency-path: "pyproject.toml" | |
cache: "pip" | |
- name: Install dependencies | |
run: | | |
python -m pip install -U pip | |
python -m pip install -e .[test] | |
python -m pip install tabulate | |
- name: Retrieve cached baseline if available | |
uses: actions/cache/restore@v4 | |
id: cache_baseline | |
with: | |
path: baseline.json | |
key: ${{ github.event.pull_request.base.sha }} | |
- name: Run baseline benchmark if not in cache | |
if: steps.cache_baseline.outputs.cache-hit != 'true' | |
run: | | |
git checkout ${{ github.event.pull_request.base.sha }} | |
pytest tests/bench.py --benchmark-json baseline.json | |
- name: Cache baseline results | |
uses: actions/cache/save@v4 | |
if: steps.cache_baseline.outputs.cache-hit != 'true' | |
with: | |
path: baseline.json | |
key: ${{ github.event.pull_request.base.sha }} | |
- name: Run benchmark on PR head commit | |
run: | | |
git checkout ${{ github.event.pull_request.head.sha }} | |
pytest tests/bench.py --benchmark-json pr.json | |
- name: Generate report | |
run: python .github/workflows/benchmark-pr.py baseline.json pr.json report.md | |
- name: Comment on commit with report for non-forks | |
uses: peter-evans/commit-comment@v3 | |
if: github.event.pull_request.head.repo.fork == false | |
with: | |
body-path: report.md | |
deploy: | |
name: Deploy | |
needs: test | |
if: success() && startsWith(github.ref, 'refs/tags/') | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: install | |
run: | | |
git tag | |
pip install -U pip build twine | |
python -m build | |
twine check dist/* | |
ls -lh dist | |
- name: Build and publish | |
run: twine upload dist/* | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.TWINE_API_KEY }} | |
- uses: softprops/action-gh-release@v2 | |
with: | |
generate_release_notes: true |