docs: Update projects #98
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 `linux` job of | |
| # https://github.com/tombi-toml/tombi/blob/v1.4.1/.github/workflows/release_pypi.yml | |
| name: Build tombi wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/tombi.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-tombi.yml' | |
| - 'docs/packages/tombi.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-tombi.yml' | |
| - 'docs/packages/tombi.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: tombi | |
| 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 tombi ${{ matrix.version }} manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| # tombi-cli pulls in tower-lsp/tokio/reqwest/rayon, well beyond the other | |
| # maturin bindings=bin CLIs here; the default 360m timed out mid-link. | |
| timeout-minutes: 1440 | |
| env: | |
| TOMBI_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout tombi v${{ env.TOMBI_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: tombi-toml/tombi | |
| ref: v${{ env.TOMBI_VERSION }} | |
| persist-credentials: false | |
| # The repo root pyproject.toml is just a uv workspace file (dev/stub | |
| # dependency groups); it has no [build-system]. The real buildable | |
| # package -- [build-system], [tool.maturin] with manifest-path pointing | |
| # at rust/tombi-cli/Cargo.toml, module-name, python-source -- lives at | |
| # python/tombi/pyproject.toml. pyproject.toml/Cargo.toml both pin the | |
| # placeholder "0.0.0-dev" upstream's own `cargo xtask set-version` | |
| # replaces from GITHUB_REF at release time (xtask/src/command/set_version.rs); | |
| # reproduce just the two patches this build needs instead of running | |
| # xtask itself. Cargo.toml is the workspace root ([workspace.package] | |
| # version), so that one stays at the checkout root. | |
| - name: Set version | |
| run: | | |
| sed -i "s/^version = \"0.0.0-dev\".*/version = \"${TOMBI_VERSION}\"/" python/tombi/pyproject.toml Cargo.toml | |
| # `[tool.maturin] bindings = "bin"`: the wheel is one compiled executable | |
| # with no ABI tag, so a single native build covers every interpreter. | |
| # `working-directory: python/tombi` mirrors build-git-cliff.yml's own | |
| # pattern for a pyproject.toml that isn't at the checkout root: maturin | |
| # runs with that directory as cwd, finds its pyproject.toml there, and | |
| # that file's own manifest-path ("../../rust/tombi-cli/Cargo.toml") | |
| # resolves relative to it, back to the checkout root. | |
| # No `--locked` (like build-taplo.yml/build-git-cliff.yml): the version | |
| # patch above leaves Cargo.lock's workspace-local entries stale, so cargo | |
| # needs to update it. | |
| - name: Build wheel | |
| uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 | |
| with: | |
| command: build | |
| target: riscv64gc-unknown-linux-gnu | |
| args: --release --out dist | |
| working-directory: python/tombi | |
| manylinux: '2_39' | |
| before-script-linux: git config --global --add safe.directory "*" | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: tombi-${{ env.TOMBI_VERSION }}-manylinux_riscv64 | |
| path: python/tombi/dist/*.whl | |
| if-no-files-found: error | |
| test_wheel: | |
| name: Test tombi ${{ 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: | |
| TOMBI_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: tombi-${{ env.TOMBI_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 . tombi | |
| # Mirrors upstream's own `uv run --frozen pytest` (python/tombi/tests): | |
| # the wheel also ships an importable `tombi` module (python-source = | |
| # "python/tombi/src") whose whole job is exposing __version__. | |
| - name: Test wheel | |
| run: | | |
| set -euo pipefail | |
| python -c "import tombi; print(tombi.__version__); assert tombi.__version__ == '${TOMBI_VERSION}'" | |
| tombi --version | |
| tombi --help >/dev/null | |
| work=$(mktemp -d) | |
| cat > "$work/bad.toml" <<'TOML' | |
| [package | |
| name = "oops" | |
| TOML | |
| set +e | |
| out=$(tombi lint --offline "$work/bad.toml" 2>&1) | |
| rc=$? | |
| set -e | |
| echo "$out" | |
| [ "$rc" -ne 0 ] | |
| cat > "$work/messy.toml" <<'TOML' | |
| [package] | |
| name = "demo" | |
| version="0.1.0" | |
| TOML | |
| set +e | |
| tombi format --offline --check "$work/messy.toml" | |
| rc=$? | |
| set -e | |
| [ "$rc" -ne 0 ] | |
| tombi format --offline "$work/messy.toml" | |
| tombi format --offline --check "$work/messy.toml" | |
| grep -q 'name = "demo"' "$work/messy.toml" | |
| publish: | |
| name: Publish tombi ${{ 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: tombi-${{ matrix.version }}-manylinux_riscv64 |