ci(test): Test build python tasks #21
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-wheels: | |
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" | |
- 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 wheel packages | |
run: | | |
cd bindings/python | |
# Sync version | |
rye sync | |
rye run sync-version | |
# Build lyric-task wheel | |
cd lyric-task | |
rye sync --no-dev | |
rye build | |
# 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 | |
# Build lyric-js-worker wheel | |
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 | |
- name: Upload wheel artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-wheels-py${{ matrix.python-version }} | |
path: | | |
bindings/python/dist/*.whl | |
build-sdist: | |
needs: build-js-worker | |
runs-on: ubuntu-latest | |
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" | |
- name: Install Rye | |
uses: eifinger/setup-rye@v4 | |
with: | |
enable-cache: true | |
working-directory: bindings/python | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build source distributions | |
run: | | |
cd bindings/python | |
# Sync version | |
rye sync | |
rye run sync-version | |
# Build lyric-task sdist | |
cd lyric-task | |
rye sync --no-dev | |
rye build --sdist | |
# Build lyric-py-worker sdist | |
cd ../lyric-py-worker | |
rye sync --no-dev | |
rye build --sdist | |
# Build lyric-js-worker sdist | |
cd ../lyric-js-worker | |
rye sync --no-dev | |
rye build --sdist | |
- name: Upload sdist artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: dist-sdist | |
path: | | |
bindings/python/dist/*.tar.gz | |
test-packages: | |
needs: [build-wheels, build-sdist] | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.10.14", "3.11.8", "3.12.2"] | |
steps: | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Download wheel artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-wheels-py${{ matrix.python-version }} | |
path: dist | |
- name: Test packages | |
run: | | |
python -m pip install --find-links=dist lyric-js-worker | |
publish: | |
needs: [test-packages] | |
runs-on: ubuntu-latest | |
environment: | |
name: pypi | |
url: https://pypi.org/p/lyric-js-worker | |
permissions: | |
id-token: write | |
steps: | |
- name: Download all wheels | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: dist-wheels-py* | |
merge-multiple: true | |
path: dist-wheels | |
- name: Download sdist | |
uses: actions/download-artifact@v4 | |
with: | |
name: dist-sdist | |
path: dist-sdist | |
- name: Prepare dist directory | |
run: | | |
mkdir dist | |
cp dist-wheels/* dist/ | |
cp dist-sdist/* dist/ | |
- name: Publish package distributions to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
packages-dir: dist | |
verbose: true | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} |