ci(test): Test build python tasks #16
This file contains 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
name: Release Python | |
on: | |
push: | |
branches: | |
- main | |
- master | |
tags: | |
- '*' | |
pull_request: | |
workflow_dispatch: | |
permissions: | |
contents: read | |
concurrency: | |
group: ${{ github.event.number || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
build-js-worker: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: '18' | |
cache: 'npm' | |
cache-dependency-path: bindings/javascript/lyric-js-worker/package-lock.json | |
- name: Install JS dependencies | |
working-directory: bindings/javascript/lyric-js-worker | |
run: npm ci | |
- name: Build JS worker | |
working-directory: bindings/javascript/lyric-js-worker | |
run: npm run build | |
- name: Upload JS worker | |
uses: actions/upload-artifact@v4 | |
with: | |
name: js-worker-wasm | |
path: bindings/javascript/lyric-js-worker/javascript_worker.wasm | |
build-and-test: | |
needs: build-js-worker | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.10.14", "3.11.8", "3.12.2"] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Remove lyric-py directory | |
run: rm -rf bindings/python/lyric-py | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.10" # 用于安装 rye | |
- name: Install Rye | |
uses: eifinger/setup-rye@v4 | |
with: | |
enable-cache: true | |
working-directory: bindings/python | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Setup Python version | |
working-directory: bindings/python | |
run: | | |
echo "${{ matrix.python-version }}" > .python-version | |
rye pin "${{ matrix.python-version }}" | |
rye sync --no-dev | |
- name: Setup Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Install wasm-tools | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash | |
cargo binstall -y wasm-tools | |
- uses: actions/download-artifact@v4 | |
with: | |
name: js-worker-wasm | |
path: bindings/javascript/lyric-js-worker | |
- name: Build packages | |
run: | | |
cd bindings/python | |
# Sync version(copy version from workspace to all packages) | |
rye run sync-version | |
# Build lyric-task | |
cd lyric-task | |
rye sync --no-dev | |
rye build | |
rye build --sdist | |
# Build lyric-py-worker | |
cd ../lyric-py-worker | |
python -m venv .venv | |
source .venv/bin/activate | |
python -m pip install --upgrade pip | |
pip install -r app-requirements.txt | |
pip install --force-reinstall ../dist/lyric_task-*.whl | |
cd src | |
componentize-py -d ./wit -w lyric-py-task componentize worker -o python_worker_fat.wasm | |
wasm-tools print python_worker_fat.wasm | wasm-tools strip -a -o lyric_py_worker/python_worker.wasm | |
rm python_worker_fat.wasm | |
cd .. | |
rye sync --no-dev | |
rye build | |
rye build --sdist | |
# Build lyric-js-worker | |
cd ../lyric-js-worker | |
mkdir -p src/lyric_js_worker/ | |
cp ../../javascript/lyric-js-worker/javascript_worker.wasm src/lyric_js_worker/ | |
rye sync --no-dev | |
rye build | |
rye build --sdist | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-py${{ matrix.python-version }} | |
path: bindings/python/dist | |
- name: Test packages | |
run: | | |
python -m pip install --find-links=bindings/python/dist lyric-js-worker | |
publish: | |
needs: build-and-test | |
runs-on: ubuntu-latest | |
# if: github.event_name == 'release' && github.event.action == 'published' | |
environment: | |
name: pypi | |
url: https://pypi.org/p/lyric-js-worker | |
permissions: | |
id-token: write | |
steps: | |
- name: Download all artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: dist-py* | |
merge-multiple: true | |
path: dist | |
- name: Publish package distributions to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} |