refactor(rust): Groundwork for allowing multi-output nodes in the new… #15570
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: Wheel size txt | |
if: github.ref_name == 'main' | |
run: | | |
echo "$GITHUB_RUN_ID $WHEEL_SIZE" > wheel_sizes.txt | |
- name: Upload wheel sizes artifact (main only) | |
if: github.ref_name == 'main' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheel-size | |
path: 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 | |
if: github.ref_name != 'main' | |
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 | |
if: github.ref_name != 'main' | |
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 uncompressed lib size was **${previousSizeMB} MB**.\nThe current uncompressed lib 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.`; | |
} | |
const { data: comments } = await github.rest.issues.listComments({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: context.issue.number, | |
}); | |
// Look for an existing comment | |
const existingComment = comments.find(comment => | |
comment.body.includes('The previous uncompressed lib size was') | |
); | |
if (existingComment) { | |
// Update the existing comment | |
await github.rest.issues.updateComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
comment_id: existingComment.id, | |
body: commentBody, | |
}); | |
} else { | |
// Create a new comment | |
await github.rest.issues.createComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: context.issue.number, | |
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" |