docs: Update projects #7
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/cmusphinx/pocketsphinx/blob/v5.1.1/.github/workflows/release.yml | |
| # and the `python-tests` job of | |
| # https://github.com/cmusphinx/pocketsphinx/blob/v5.1.1/.github/workflows/tests.yml | |
| name: Build pocketsphinx wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/pocketsphinx.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-pocketsphinx.yml' | |
| - 'docs/packages/pocketsphinx.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-pocketsphinx.yml' | |
| - 'docs/packages/pocketsphinx.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: pocketsphinx | |
| version: ${{ inputs.version }} | |
| build_wheels: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| name: Build pocketsphinx ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 180 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| python: ["cp312", "cp313", "cp314"] | |
| env: | |
| POCKETSPHINX_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout pocketsphinx v${{ env.POCKETSPHINX_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: cmusphinx/pocketsphinx | |
| ref: v${{ env.POCKETSPHINX_VERSION }} | |
| persist-credentials: false | |
| # MT19937, dtoa and yin are compiled in, but upstream's LICENSE omits their notices. | |
| - name: Stage the vendored sources' licences | |
| run: | | |
| set -euo pipefail | |
| sed -n '/Copyright (C) 1997 - 2002, Makoto Matsumoto/,/SUCH DAMAGE\./{s/^ //;p}' src/util/genrand.c > LICENSE.mt19937 | |
| sed -n '/The author of this software is David M. Gay/,/PARTICULAR PURPOSE\./{s/^ \* \{0,1\}//;p}' src/util/dtoa.c > LICENSE.dtoa | |
| sed -n '/Copyright (c) 2008 Beyond Access/,/SUCH DAMAGE\./{s/^ \* \{0,1\}//;p}' src/fe/yin.c > LICENSE.yin | |
| for f in LICENSE.mt19937 LICENSE.dtoa LICENSE.yin; do | |
| test "$(wc -l < "$f")" -gt 10 | |
| done | |
| head -n 3 LICENSE.mt19937 LICENSE.dtoa LICENSE.yin | |
| - name: Build wheels | |
| uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 | |
| with: | |
| output-dir: wheelhouse/ | |
| only: ${{ matrix.python }}-manylinux_riscv64 | |
| env: | |
| CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} | |
| CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ | |
| CIBW_TEST_REQUIRES: pytest memory_profiler | |
| CIBW_TEST_COMMAND: pytest {project} | |
| - name: Check wheel contents | |
| run: | | |
| python3 - wheelhouse/*.whl <<'EOF' | |
| import sys, zipfile | |
| names = zipfile.ZipFile(sys.argv[1]).namelist() | |
| exts = [n for n in names if n.endswith(".so")] | |
| assert len(exts) == 1 and exts[0].startswith("pocketsphinx/_pocketsphinx.cpython-"), exts | |
| assert exts[0].endswith("-riscv64-linux-gnu.so"), exts | |
| assert "pocketsphinx/model/en-us/en-us.lm.bin" in names, names | |
| licences = {n.split(".dist-info/licenses/", 1)[1] for n in names | |
| if ".dist-info/licenses/" in n and not n.endswith("/")} | |
| assert {"LICENSE", "LICENSE.dtoa", "LICENSE.mt19937", "LICENSE.yin"} <= licences, licences | |
| EOF | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: pocketsphinx-${{ env.POCKETSPHINX_VERSION }}-${{ matrix.python }}-manylinux_riscv64 | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish pocketsphinx ${{ 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: pocketsphinx-${{ matrix.version }}-*-manylinux_riscv64 |