Repository navigation
ci: open the nightly PRs as the riseproject-dev github app #23
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/ast-grep/ast-grep/blob/0.45.2/.github/workflows/pyo3.yml | |
| name: Build ast-grep-py wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/ast-grep-py.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-ast-grep-py.yml' | |
| - 'docs/packages/ast-grep-py.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-ast-grep-py.yml' | |
| - 'docs/packages/ast-grep-py.yaml' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| env: | |
| MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 | |
| jobs: | |
| setup: | |
| uses: $/.github/workflows/_setup.yml | |
| with: | |
| package: ast-grep-py | |
| version: ${{ inputs.version }} | |
| build_wheels: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| name: Build ast-grep-py ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 360 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| # No abi3 feature on pyo3 in crates/pyo3/Cargo.toml, so upstream | |
| # ships one wheel per interpreter (matches PyPI's cp3xx-cp3xx tags). | |
| python: ["cp312", "cp313", "cp314", "cp314t"] | |
| env: | |
| AST_GREP_PY_VERSION: ${{ matrix.version }} | |
| steps: | |
| # Checked out at the workspace root: crates/pyo3 is a member of the | |
| # ast-grep Cargo workspace and builds against its sibling crates. | |
| - name: Checkout ast-grep v${{ env.AST_GREP_PY_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: ast-grep/ast-grep | |
| ref: ${{ env.AST_GREP_PY_VERSION }} | |
| persist-credentials: false | |
| - name: Stage LICENSE beside crates/pyo3's pyproject.toml | |
| # maturin globs LICEN[CS]E* relative to the pyproject directory, | |
| # which is crates/pyo3 -- so upstream's published wheel carries no | |
| # licence text at all. | |
| run: cp LICENSE crates/pyo3/LICENSE | |
| - name: Build wheel | |
| uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 | |
| with: | |
| package-dir: crates/pyo3 | |
| output-dir: wheelhouse/ | |
| # musllinux is dropped: rustup.rs ships no riscv64 musl toolchain. | |
| only: ${{ matrix.python }}-manylinux_riscv64 | |
| env: | |
| CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} | |
| # ast-grep ships no [tool.cibuildwheel], so the Rust toolchain its | |
| # maturin backend needs is installed in-container here. | |
| CIBW_BEFORE_ALL_LINUX: >- | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y | |
| CIBW_ENVIRONMENT_LINUX: PATH="$PATH:$HOME/.cargo/bin" | |
| CIBW_TEST_REQUIRES: pytest | |
| # test-sources resolves against the checkout root, not package-dir. | |
| CIBW_TEST_SOURCES: crates/pyo3/tests crates/pyo3/pyproject.toml | |
| CIBW_TEST_COMMAND: >- | |
| cd crates/pyo3 && | |
| python -c "import ast_grep_py.ast_grep_py as m, importlib.metadata as md; | |
| assert m.__file__.endswith('.so'), m.__file__; | |
| assert {p.name for p in md.files('ast-grep-py') if 'licenses' in str(p)} == {'LICENSE'}" && | |
| python -m pytest -v tests | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: ast-grep-py-${{ env.AST_GREP_PY_VERSION }}-${{ matrix.python }}-manylinux_riscv64 | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish ast-grep-py ${{ 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: ast-grep-py-${{ matrix.version }}-*-manylinux_riscv64 |