docs: Update projects #17
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 the `build-wheels` job of | |
| # https://github.com/adamtheturtle/no-defaults/blob/2026.9.1/.github/workflows/release.yml | |
| name: Build no-defaults wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/no-defaults.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-no-defaults.yml' | |
| - 'docs/packages/no-defaults.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-no-defaults.yml' | |
| - 'docs/packages/no-defaults.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: no-defaults | |
| 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 no-defaults ${{ matrix.version }} manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 360 | |
| env: | |
| NO_DEFAULTS_VERSION: ${{ matrix.version }} | |
| steps: | |
| # Upstream tags same-day re-releases as `<date>-post.<N>` (wheel version `<date>.post<N>`). | |
| - name: Resolve git tag | |
| id: tag | |
| run: echo "ref=${NO_DEFAULTS_VERSION/.post/-post.}" >> "$GITHUB_OUTPUT" | |
| - name: Checkout no-defaults ${{ steps.tag.outputs.ref }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: adamtheturtle/no-defaults | |
| ref: ${{ steps.tag.outputs.ref }} | |
| persist-credentials: false | |
| # No musl target: rustup.rs ships no riscv64 musl toolchain. | |
| - name: Build wheel | |
| uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 | |
| with: | |
| command: build | |
| target: riscv64gc-unknown-linux-gnu | |
| args: --release --out dist | |
| manylinux: '2_39' | |
| before-script-linux: git config --global --add safe.directory "*" | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: no-defaults-${{ env.NO_DEFAULTS_VERSION }}-manylinux_riscv64 | |
| path: dist/*.whl | |
| if-no-files-found: error | |
| test_wheel: | |
| name: Test no-defaults ${{ 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: | |
| NO_DEFAULTS_VERSION: ${{ matrix.version }} | |
| UV_PYTHON_PREFERENCE: only-managed | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| python-version: ['3.12', '3.13', '3.14', '3.14t'] | |
| steps: | |
| - name: Resolve git tag | |
| id: tag | |
| run: echo "ref=${NO_DEFAULTS_VERSION/.post/-post.}" >> "$GITHUB_OUTPUT" | |
| - name: Checkout no-defaults ${{ steps.tag.outputs.ref }} test fixtures | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: adamtheturtle/no-defaults | |
| ref: ${{ steps.tag.outputs.ref }} | |
| path: upstream | |
| sparse-checkout: tests/fixtures | |
| persist-credentials: false | |
| - name: Download wheel | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: no-defaults-${{ env.NO_DEFAULTS_VERSION }}-manylinux_riscv64 | |
| path: dist | |
| - 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 --find-links dist "no-defaults==${NO_DEFAULTS_VERSION}" | |
| # Upstream's tests are a Rust integration suite (`cargo test`) that is never packaged; | |
| # drive the installed binary, which requires the `ty` it depends on, through the | |
| # suite's `real_project_uses_per_file_configuration` and | |
| # `fix_updates_call_sites_across_files` cases instead. | |
| - name: Test wheel | |
| run: | | |
| set -euo pipefail | |
| no-defaults --version | |
| ty version | |
| set +e | |
| no-defaults --output-format json upstream/tests/fixtures/real_project > report.json | |
| rc=$? | |
| set -e | |
| [ "$rc" -eq 1 ] | |
| python - <<'PY' | |
| import json | |
| diagnostics = json.load(open("report.json")) | |
| text = json.dumps(diagnostics) | |
| assert len(diagnostics) == 2, diagnostics | |
| assert "_private" in text and "helper" in text, text | |
| assert "function `public`" not in text, text | |
| PY | |
| work=$(mktemp -d) | |
| cat > "$work/api.py" <<'PY' | |
| from dataclasses import dataclass, field | |
| def connect(host, timeout=30, *, retries=3): | |
| return host | |
| @dataclass | |
| class Job: | |
| name: str | |
| tags: list = field(default_factory=list) | |
| class Client: | |
| def fetch(self, url, verify=True): | |
| return url | |
| def twice(self, url): | |
| return self.fetch(url) | |
| PY | |
| cat > "$work/caller.py" <<'PY' | |
| import api | |
| api.connect("h") | |
| api.connect("h", 5, retries=1) | |
| api.Job("j") | |
| PY | |
| no-defaults --fix "$work" | tee fix.log | |
| grep -q 'Updated 3 call sites.' fix.log | |
| cat > expected.py <<'PY' | |
| import api | |
| api.connect("h", timeout=30, retries=3) | |
| api.connect("h", 5, retries=1) | |
| api.Job("j", tags=[]) | |
| PY | |
| diff -u expected.py "$work/caller.py" | |
| grep -q 'self.fetch(url, verify=True)' "$work/api.py" | |
| no-defaults "$work" | |
| publish: | |
| name: Publish no-defaults ${{ 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: no-defaults-${{ matrix.version }}-manylinux_riscv64 |