dataframely: Add version 3.0.0 #6
Workflow file for this run
This file contains hidden or 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
| # SPDX-FileCopyrightText: 2026 The RISE Project | |
| # SPDX-License-Identifier: MIT | |
| --- | |
| # This workflow is based on: https://github.com/quantco/dataframely/blob/main/.github/workflows/build.yml | |
| name: Build dataframely wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/dataframely.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-dataframely.yml' | |
| - 'docs/packages/dataframely.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-dataframely.yml' | |
| - 'docs/packages/dataframely.yaml' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| env: | |
| PYTHON_VERSION: '3.10' | |
| CARGO_INCREMENTAL: 0 | |
| CARGO_NET_RETRY: 10 | |
| RUSTUP_MAX_RETRIES: 10 | |
| # dataframely's Cargo.toml puts `lto = true` + `codegen-units = 1` directly | |
| # on the `release` profile, and pulls in a full pola-rs fork as its crate | |
| # graph (see build-polars-runtime.yml). Overridden down the same way for | |
| # the same reason: the riscv64 runner cannot afford fat LTO on that graph. | |
| CARGO_PROFILE_RELEASE_LTO: 'off' | |
| CARGO_PROFILE_RELEASE_CODEGEN_UNITS: '16' | |
| CARGO_PROFILE_RELEASE_OPT_LEVEL: '1' | |
| CARGO_BUILD_JOBS: '2' | |
| defaults: | |
| run: | |
| shell: bash | |
| jobs: | |
| setup: | |
| uses: $/.github/workflows/_setup.yml | |
| with: | |
| package: dataframely | |
| version: ${{ inputs.version }} | |
| build_wheels: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| name: Build dataframely ${{ matrix.version }} cp310-abi3-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 1440 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| env: | |
| DATAFRAMELY_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout dataframely v${{ env.DATAFRAMELY_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: quantco/dataframely | |
| ref: v${{ env.DATAFRAMELY_VERSION }} | |
| persist-credentials: false | |
| # Upstream's own build.yml runs `pixi run -e build set-version`, which | |
| # is this same sed against a setuptools_scm-derived string; the target | |
| # version is already known here, so it is substituted directly. | |
| - name: Set version | |
| run: sed -i "s/version = \"0.0.0\"/version = \"${DATAFRAMELY_VERSION}\"/" pyproject.toml | |
| # Same OOM guard build-polars-runtime.yml needs on these runners for a | |
| # comparably sized Rust build (a pinned pola-rs fork). | |
| - name: Set swap space | |
| uses: pierotofy/set-swap-space@fc79b3f67fa8a838184ce84a674ca12238d2c761 # master | |
| with: | |
| swap-size-gb: 10 | |
| - name: Build wheel | |
| uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 | |
| with: | |
| command: build | |
| target: riscv64gc-unknown-linux-gnu | |
| args: --out dist --release -i python3.10 --strip | |
| manylinux: '2_39' | |
| before-script-linux: git config --global --add safe.directory "*" | |
| - name: Install Python | |
| uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 | |
| with: | |
| python-version: ${{ env.PYTHON_VERSION }} | |
| activate-environment: true | |
| enable-cache: false | |
| - name: Test wheel | |
| env: | |
| # Registry for the riscv64 numpy/polars-runtime-32 wheels (otherwise | |
| # uv source-builds them from PyPI's sdists for ~4h). unsafe-best-match | |
| # because the registry hosts tomli for cp312+ only: under first-index | |
| # uv never sees PyPI's pure tomli and backtracks to pytest 6.2.5, | |
| # whose importlib mode breaks 9 upstream tests. | |
| UV_EXTRA_INDEX_URL: https://pypi.riseproject.dev/simple/ | |
| UV_INDEX_STRATEGY: unsafe-best-match | |
| UV_ONLY_BINARY: numpy | |
| run: | | |
| uv pip install --force-reinstall dist/*.whl pytest pytest-benchmark pytest-mock | |
| # cd out of the checkout first (gotcha 25/218): dataframely's pure-Python | |
| # wrapper package lives directly at the checkout root ($GITHUB_WORKSPACE), | |
| # and both `python -c` and `python -m pytest` prepend cwd to sys.path[0] | |
| # unconditionally, so run from here they'd import that source tree -- | |
| # which has no compiled _native extension -- instead of the wheel just | |
| # installed above. | |
| cd /tmp | |
| python -c 'import dataframely; print(dataframely.__version__)' | |
| # pyarrow has no cp310 riscv64 wheel yet (registry starts at cp312); this abi3 | |
| # wheel is cp310+, so skip only the one test module that hard-imports pyarrow. | |
| # scikit-learn likewise starts at cp312 on the registry; tests/benches hard-imports | |
| # it in its own conftest.py, so skip that whole directory too. | |
| python -m pytest "${GITHUB_WORKSPACE}/tests" -c "${GITHUB_WORKSPACE}/pyproject.toml" \ | |
| -m "not with_optionals" --ignore="${GITHUB_WORKSPACE}/tests/columns/test_arrow_pycapsule.py" \ | |
| --ignore="${GITHUB_WORKSPACE}/tests/benches" | |
| - name: Upload wheel | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: dataframely-${{ env.DATAFRAMELY_VERSION }}-cp310-abi3-manylinux_riscv64 | |
| path: dist/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish dataframely ${{ matrix.version }} | |
| needs: [setup, build_wheels] | |
| if: needs.setup.outputs.versions != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| uses: $/.github/workflows/_publish-wheel.yml | |
| secrets: | |
| app-private-key: ${{ secrets.RISEPROJECT_APP_PRIVATE_KEY }} | |
| with: | |
| artifact-pattern: dataframely-${{ matrix.version }}-*-manylinux_riscv64 |