docs: Update projects #21
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 | |
| --- | |
| # Based on PostHog/posthog's own release and test workflows for this package: | |
| # https://github.com/PostHog/posthog/blob/f25833286a435bbcc6f4f25a4a34514e9e498628/.github/workflows/build-deltalite.yml | |
| # https://github.com/PostHog/posthog/blob/f25833286a435bbcc6f4f25a4a34514e9e498628/.github/workflows/ci-deltalite-python.yml | |
| name: Build deltalite wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/deltalite.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-deltalite.yml' | |
| - 'docs/packages/deltalite.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-deltalite.yml' | |
| - 'docs/packages/deltalite.yaml' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| env: | |
| # deltalite lives in the PostHog/posthog monorepo and is never tagged on its | |
| # own; this is the commit whose rust/deltalite/ tree is byte-for-byte the | |
| # 0.1.7 PyPI sdist (verified by diff). Update alongside the version. | |
| DELTALITE_REF: f25833286a435bbcc6f4f25a4a34514e9e498628 | |
| CARGO_INCREMENTAL: 0 | |
| CARGO_NET_RETRY: 10 | |
| RUSTUP_MAX_RETRIES: 10 | |
| # Halves concurrent rustc processes on the 4-core riscv64 runner (gotcha 228). | |
| CARGO_BUILD_JOBS: 2 | |
| jobs: | |
| setup: | |
| uses: $/.github/workflows/_setup.yml | |
| with: | |
| package: deltalite | |
| version: ${{ inputs.version }} | |
| build_wheels: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| name: Build deltalite ${{ matrix.version }} cp312-abi3-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 1440 | |
| env: | |
| DELTALITE_VERSION: ${{ matrix.version }} | |
| steps: | |
| # posthog/posthog is a multi-GB application monorepo; rust/ (plus the | |
| # repo-root LICENSE) is the self-contained slice the Cargo workspace at | |
| # rust/Cargo.toml needs. Cone mode (the actions/checkout default) is | |
| # required here: non-cone sparse-checkout leaves the working tree in a | |
| # shape cargo's own file-walking/exclude-matching can't handle, | |
| # failing with "Failed to update the excludes stack" -- cone mode | |
| # supports mixing a directory pattern (rust) with a top-level file | |
| # pattern (LICENSE) just fine on a modern git. | |
| - name: Checkout PostHog/posthog ${{ env.DELTALITE_REF }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: PostHog/posthog | |
| ref: ${{ env.DELTALITE_REF }} | |
| sparse-checkout: | | |
| rust | |
| LICENSE | |
| persist-credentials: false | |
| # maturin's licence auto-glob only looks next to pyproject.toml | |
| # (rust/deltalite/python/), not the repo root where LICENSE lives | |
| # (gotcha 146). | |
| - name: Bundle LICENSE into the wheel | |
| run: cp LICENSE rust/deltalite/python/LICENSE | |
| # Same OOM guard build-deltalake.yml needs for a comparably sized Rust | |
| # build (this one links AWS-LC too). | |
| - 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 | |
| manylinux: '2_39' | |
| # pyo3 carries `abi3-py312` unconditionally in Cargo.toml, so | |
| # upstream ships one cp312-abi3 wheel and no free-threaded variant | |
| # (gotcha 181). | |
| args: >- | |
| -i python3.12 --release --strip --out dist | |
| --manifest-path rust/deltalite/python/Cargo.toml | |
| - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 | |
| with: | |
| python-version: '3.12' | |
| activate-environment: true | |
| enable-cache: false | |
| # ci-deltalite-python.yml's own parity suite installs pinned | |
| # deltalake/pyarrow/duckdb and runs the full rust/deltalite/python/tests | |
| # tree against them, but that isn't reproducible here: uv (0.12.13, | |
| # riscv64) rejects deltalake==1.6.3's only wheel | |
| # (cp310-abi3-manylinux_2_39_riscv64, correctly `data-requires-python: | |
| # >=3.10` on our index) as "has no usable wheels" when resolved BY NAME | |
| # from any index -- confirmed with our registry as both the extra index | |
| # and, separately, as the *default* index (ruling out an index-priority | |
| # cause) -- while duckdb/pyarrow (exact cp312-cp312 tag, no abi3) and | |
| # deltalite's own local-file wheel install both succeed. This isolates | |
| # the break to uv's abi3-forward-compatibility tag check specifically | |
| # for a wheel fetched from a registry rather than a local path (gotcha | |
| # 375); there is no clean workaround from this side. Of the 8 files | |
| # under tests/, 7 import deltalake/pyarrow/duckdb (directly or via | |
| # harness/common.py) and can't run without them -- only test_planner.py | |
| # is self-contained, so it's the one real test file left to run. | |
| # test_planner.py itself has one test that also imports deltalake/ | |
| # pyarrow inline (a real DeltaLiteTable.upsert round-trip), deselected | |
| # for the same reason -- the other 17 pure-plan() unit tests still run. | |
| # deltalite's own wheel already installs and licenses correctly on its | |
| # own. | |
| - name: Test wheel | |
| run: | | |
| uv pip install pytest dist/*.whl --force-reinstall | |
| python -c " | |
| import importlib.metadata | |
| files = {str(p) for p in importlib.metadata.files('deltalite') if '.dist-info/' in str(p)} | |
| assert any('LICENSE' in f for f in files), files | |
| " | |
| python -m pytest rust/deltalite/python/tests/test_planner.py -q \ | |
| -k "not test_knob_kwargs_are_accepted_by_a_real_upsert" | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: deltalite-${{ env.DELTALITE_VERSION }}-cp312-abi3-manylinux_riscv64 | |
| path: dist/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish deltalite ${{ 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: deltalite-${{ matrix.version }}-*-manylinux_riscv64 |