Skip to content

ci(test): Test build python tasks #16

ci(test): Test build python tasks

ci(test): Test build python tasks #16

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 }}