ci: Improve bin size info #15556
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: Benchmark | |
on: | |
pull_request: | |
paths: | |
- crates/** | |
- Cargo.toml | |
- py-polars/tests/benchmark/** | |
- .github/workflows/benchmark.yml | |
push: | |
branches: | |
- main | |
paths: | |
- crates/** | |
- Cargo.toml | |
- py-polars/tests/benchmark/** | |
- .github/workflows/benchmark.yml | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
SCCACHE_GHA_ENABLED: 'true' | |
RUSTC_WRAPPER: sccache | |
RUST_BACKTRACE: 1 | |
jobs: | |
main: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: Set up Graphviz | |
uses: ts-graphviz/setup-graphviz@v2 | |
- name: Create virtual environment | |
run: | | |
curl -LsSf https://astral.sh/uv/install.sh | sh | |
uv venv | |
echo "$GITHUB_WORKSPACE/.venv/bin" >> $GITHUB_PATH | |
echo "VIRTUAL_ENV=$GITHUB_WORKSPACE/.venv" >> $GITHUB_ENV | |
- name: Install Python dependencies | |
working-directory: py-polars | |
run: | | |
# Install typing-extensions separately whilst the `--extra-index-url` in `requirements-ci.txt` | |
# doesn't have an up-to-date typing-extensions, see | |
# https://github.com/astral-sh/uv/issues/6028#issuecomment-2287232150 | |
uv pip install -U typing-extensions | |
uv pip install --compile-bytecode -r requirements-dev.txt -r requirements-ci.txt --verbose | |
- name: Set up Rust | |
run: rustup show | |
- name: Cache Rust | |
uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: py-polars | |
save-if: ${{ github.ref_name == 'main' }} | |
- name: Run sccache-cache | |
uses: mozilla-actions/[email protected] | |
- name: Install Polars release build | |
env: | |
RUSTFLAGS: -C embed-bitcode -D warnings | |
working-directory: py-polars | |
run: maturin develop --release -- -C codegen-units=8 -C lto=thin -C target-cpu=native | |
- name: Set wheel size | |
run: | | |
WHEEL_SIZE=$(ls -l py-polars/polars/polars*.so | awk '{ print $5 }') | |
echo "WHEEL_SIZE=$WHEEL_SIZE" >> $GITHUB_ENV | |
- name: Upload wheel sizes artifact (main only) | |
if: github.ref_name == 'main' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheel-size | |
path: | | |
echo "$GITHUB_RUN_ID $WHEEL_SIZE" > wheel_sizes.txt | |
wheel_sizes.txt | |
- name: Download main wheel size | |
uses: actions/download-artifact@v4 | |
with: | |
name: wheel-size | |
continue-on-error: true | |
- name: Extract previous wheel size | |
id: load_previous_size | |
run: | | |
if [[ -f wheel_sizes.txt ]]; then | |
PREVIOUS_WHEEL_SIZE=$(tail -n 1 wheel_sizes.txt | awk '{ print $2 }') | |
echo "PREVIOUS_WHEEL_SIZE=$PREVIOUS_WHEEL_SIZE" >> $GITHUB_ENV | |
else | |
echo "PREVIOUS_WHEEL_SIZE=Unknown" >> $GITHUB_ENV | |
fi | |
continue-on-error: true | |
- name: Comment wheel size | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const previousSize = process.env.PREVIOUS_WHEEL_SIZE || 'Unknown'; | |
const currentSize = process.env.WHEEL_SIZE || 'Unknown'; | |
// Convert to MB | |
const previousSizeMB = previousSize !== 'Unknown' ? (previousSize / 1024 / 1024).toFixed(4) : 'Unknown'; | |
const currentSizeMB = currentSize !== 'Unknown' ? (currentSize / 1024 / 1024).toFixed(4) : 'Unknown'; | |
let commentBody = `The previous wheel size was **${previousSizeMB} MB**.\nThe current wheel size after this PR is **${currentSizeMB} MB**.`; | |
// Calculate percentage increase if both sizes are available | |
if (previousSize !== 'Unknown' && currentSize !== '') { | |
const increase = ((currentSize - previousSize) / previousSize) * 100; | |
commentBody += `\nThis represents a **${increase.toFixed(2)}% increase** in size.`; | |
} | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: commentBody | |
}); | |
continue-on-error: true | |
- name: Run benchmark tests | |
uses: CodSpeedHQ/action@v3 | |
with: | |
working-directory: py-polars | |
run: pytest -m benchmark --codspeed -v | |
- name: Run non-benchmark tests | |
working-directory: py-polars | |
run: pytest -m 'not benchmark and not debug' -n auto --dist loadgroup | |
- name: Run non-benchmark tests on new streaming engine | |
working-directory: py-polars | |
env: | |
POLARS_AUTO_NEW_STREAMING: 1 | |
run: pytest -n auto --dist loadgroup -m "not may_fail_auto_streaming and not slow and not write_disk and not release and not docs and not hypothesis and not benchmark and not ci_only" |