Repository navigation
docs: Update projects #33
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 the `build` job of | |
| # https://github.com/zubanls/zuban/blob/v0.9.3/.github/workflows/wheels.yml | |
| name: Build zuban wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/zuban.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-zuban.yml' | |
| - 'docs/packages/zuban.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-zuban.yml' | |
| - 'docs/packages/zuban.yaml' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| jobs: | |
| setup: | |
| uses: $/.github/workflows/_setup.yml | |
| with: | |
| package: zuban | |
| version: ${{ inputs.version }} | |
| build_wheel: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| name: Build zuban ${{ matrix.version }} manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 360 | |
| env: | |
| ZUBAN_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout zuban v${{ env.ZUBAN_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: zubanls/zuban | |
| ref: v${{ env.ZUBAN_VERSION }} | |
| submodules: recursive | |
| persist-credentials: false | |
| # `[tool.maturin] license-files = ["licenses.html"]` in | |
| # deploy/pypi/zuban/pyproject.toml requires this file to exist before | |
| # maturin builds; upstream's own pre-maturin-build.sh generates it the | |
| # same way. The riscv64 runner ships no Rust toolchain (unlike | |
| # upstream's GitHub-hosted runners), so install one first. | |
| - uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # master | |
| with: | |
| toolchain: stable | |
| - name: Generate third-party licenses.html | |
| working-directory: deploy/pypi/zuban | |
| run: | | |
| cargo install --features cli --locked --debug cargo-about --version 0.9.0 | |
| cargo about generate -o licenses.html about.hbs --fail --manifest-path ../../../Cargo.toml | |
| - name: Build wheel | |
| uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 | |
| with: | |
| command: build | |
| target: riscv64gc-unknown-linux-gnu | |
| working-directory: deploy/pypi/zuban | |
| args: --release --locked --out dist --ignore-rust-version | |
| manylinux: '2_39' | |
| before-script-linux: git config --global --add safe.directory "*" | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: zuban-${{ env.ZUBAN_VERSION }}-manylinux_riscv64 | |
| path: deploy/pypi/zuban/dist/*.whl | |
| if-no-files-found: error | |
| test_wheel: | |
| name: Test zuban ${{ matrix.version }} on Python ${{ matrix.python-version }} | |
| needs: [setup, build_wheel] | |
| if: needs.setup.outputs.versions != '[]' | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 30 | |
| env: | |
| ZUBAN_VERSION: ${{ matrix.version }} | |
| # Without this uv would reuse the runner image's system CPython for 3.12 | |
| # and download a standalone build for the others. | |
| UV_PYTHON_PREFERENCE: only-managed | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| # This repo's default interpreter matrix (gotcha in workflow-anatomy.md); | |
| # the wheel is interpreter-agnostic (bindings = "bin"), so every | |
| # interpreter -- including free-threaded -- exercises the same binary. | |
| python-version: ['3.12', '3.13', '3.14', '3.14t'] | |
| steps: | |
| - name: Download wheel | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: zuban-${{ env.ZUBAN_VERSION }}-manylinux_riscv64 | |
| - name: Install Python | |
| uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| activate-environment: true | |
| enable-cache: false | |
| - name: Install wheel | |
| run: uv pip install --reinstall --no-index --find-links . zuban | |
| # No `python -m zuban` (gotcha 224): zuban/__init__.py deliberately | |
| # raises, so only the installed console scripts are usable. `zuban | |
| # check` exercises the bundled typeshed stubs (submodule checkout), not | |
| # just process startup; `zmypy` execs `zuban mypy` via a sibling-path | |
| # lookup, so it also proves both console scripts installed together. | |
| - name: Test wheel | |
| run: | | |
| set -euo pipefail | |
| zuban --help >/dev/null | |
| zmypy --version | |
| work=$(mktemp -d) | |
| cat > "$work/bad.py" <<'PY' | |
| def add(a: int, b: int) -> int: | |
| return a + b | |
| add("1", "2") | |
| PY | |
| set +e | |
| out=$(zuban check "$work/bad.py" 2>&1) | |
| rc=$? | |
| set -e | |
| echo "$out" | |
| [ "$rc" -ne 0 ] | |
| echo "$out" | grep -qi 'error' | |
| cat > "$work/good.py" <<'PY' | |
| def add(a: int, b: int) -> int: | |
| return a + b | |
| add(1, 2) | |
| PY | |
| zuban check "$work/good.py" | |
| publish: | |
| name: Publish zuban ${{ matrix.version }} | |
| needs: [setup, build_wheel, test_wheel] | |
| 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: zuban-${{ matrix.version }}-manylinux_riscv64 |