Bump version: 0.2.3 → 0.3.0 #101
Workflow file for this run
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
| name: Release | |
| on: | |
| workflow_dispatch: | |
| push: | |
| tags: | |
| - "v*" | |
| jobs: | |
| release: | |
| permissions: | |
| contents: write | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - platform: "macos-latest" | |
| args: "--target aarch64-apple-darwin" | |
| python-version: "3.12" | |
| backend: "mlx" | |
| - platform: "macos-15-intel" | |
| args: "--target x86_64-apple-darwin" | |
| python-version: "3.12" | |
| backend: "pytorch" | |
| - platform: "windows-latest" | |
| args: "" | |
| python-version: "3.12" | |
| backend: "pytorch" | |
| runs-on: ${{ matrix.platform }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install dependencies (ubuntu only) | |
| if: contains(matrix.platform, 'ubuntu') || contains(matrix.platform, 'namespace') | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf llvm-dev libasound2-dev | |
| - name: Install LLVM (macOS) | |
| if: matrix.platform == 'macos-latest' || matrix.platform == 'macos-15-intel' | |
| run: | | |
| brew install llvm@20 | |
| echo "$(brew --prefix llvm@20)/bin" >> $GITHUB_PATH | |
| echo "LLVM_CONFIG=$(brew --prefix llvm@20)/bin/llvm-config" >> $GITHUB_ENV | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: "pip" | |
| - name: Install CPU-only PyTorch (Linux) | |
| if: contains(matrix.platform, 'ubuntu') || contains(matrix.platform, 'namespace') | |
| run: | | |
| pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu | |
| - name: Install Python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install pyinstaller | |
| pip install -r backend/requirements.txt | |
| pip install --no-deps chatterbox-tts | |
| - name: Install MLX dependencies (Apple Silicon only) | |
| if: matrix.backend == 'mlx' | |
| run: | | |
| pip install -r backend/requirements-mlx.txt | |
| - name: Build Python server (Linux/macOS) | |
| if: matrix.platform != 'windows-latest' | |
| run: | | |
| chmod +x scripts/build-server.sh | |
| ./scripts/build-server.sh | |
| - name: Build Python server (Windows) | |
| if: matrix.platform == 'windows-latest' | |
| shell: bash | |
| run: | | |
| cd backend | |
| python build_binary.py | |
| # Get platform tuple | |
| PLATFORM=$(rustc --print host-tuple) | |
| # Create binaries directory | |
| mkdir -p ../tauri/src-tauri/binaries | |
| # Copy with platform suffix | |
| cp dist/voicebox-server.exe ../tauri/src-tauri/binaries/voicebox-server-${PLATFORM}.exe | |
| echo "Built voicebox-server-${PLATFORM}.exe" | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v2 | |
| - name: Install Rust stable | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ (matrix.platform == 'macos-latest' && 'aarch64-apple-darwin') || (matrix.platform == 'macos-15-intel' && 'x86_64-apple-darwin') || '' }} | |
| - name: Rust cache | |
| uses: swatinem/rust-cache@v2 | |
| with: | |
| workspaces: "./tauri/src-tauri -> target" | |
| - name: Install dependencies | |
| run: bun install | |
| - name: Install Apple API key | |
| if: matrix.platform == 'macos-latest' || matrix.platform == 'macos-15-intel' | |
| run: | | |
| mkdir -p ~/.appstoreconnect/private_keys/ | |
| cd ~/.appstoreconnect/private_keys/ | |
| echo ${{ secrets.APPLE_API_KEY_BASE64 }} >> AuthKey_${{ secrets.APPLE_API_KEY }}.p8.base64 | |
| base64 --decode -i AuthKey_${{ secrets.APPLE_API_KEY }}.p8.base64 -o AuthKey_${{ secrets.APPLE_API_KEY }}.p8 | |
| rm AuthKey_${{ secrets.APPLE_API_KEY }}.p8.base64 | |
| - name: Install Codesigning Certificate | |
| if: matrix.platform == 'macos-latest' || matrix.platform == 'macos-15-intel' | |
| uses: apple-actions/import-codesign-certs@v3 | |
| with: | |
| p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }} | |
| p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | |
| - name: Extract release notes from CHANGELOG.md | |
| id: changelog | |
| shell: bash | |
| run: | | |
| # Get the version from the tag (strip leading 'v') | |
| VERSION="${GITHUB_REF_NAME#v}" | |
| # Extract the section for this version from CHANGELOG.md | |
| # Matches from "## [X.Y.Z]" until the next "## [" heading | |
| NOTES=$(sed -n "/^## \[${VERSION}\]/,/^## \[/{/^## \[${VERSION}\]/d;/^## \[/d;p;}" CHANGELOG.md) | |
| # Fall back to a placeholder if the version isn't in the changelog | |
| if [ -z "$(echo "$NOTES" | tr -d '[:space:]')" ]; then | |
| NOTES="See the assets below to download and install this version." | |
| fi | |
| # Use multiline output syntax | |
| { | |
| echo "notes<<CHANGELOG_EOF" | |
| echo "$NOTES" | |
| echo "CHANGELOG_EOF" | |
| } >> "$GITHUB_OUTPUT" | |
| - uses: tauri-apps/tauri-action@v0.6 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} | |
| TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} | |
| ENABLE_CODE_SIGNING: ${{ secrets.APPLE_CERTIFICATE }} | |
| APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} | |
| APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | |
| APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} | |
| APPLE_PROVIDER_SHORT_NAME: ${{ secrets.APPLE_PROVIDER_SHORT_NAME }} | |
| APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }} | |
| APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }} | |
| with: | |
| projectPath: tauri | |
| tagName: v__VERSION__ | |
| releaseName: "voicebox v__VERSION__" | |
| releaseBody: ${{ steps.changelog.outputs.notes }} | |
| releaseDraft: true | |
| prerelease: false | |
| args: ${{ matrix.args }} | |
| includeUpdaterJson: true | |
| build-cuda-windows: | |
| runs-on: windows-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| cache: "pip" | |
| - name: Install Python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install pyinstaller | |
| pip install -r backend/requirements.txt | |
| pip install --no-deps chatterbox-tts | |
| - name: Install PyTorch with CUDA 12.6 | |
| run: | | |
| pip install torch --index-url https://download.pytorch.org/whl/cu126 --force-reinstall --no-deps | |
| pip install torchaudio --index-url https://download.pytorch.org/whl/cu126 --force-reinstall --no-deps | |
| - name: Verify CUDA support in torch | |
| run: | | |
| python -c "import torch; print(f'CUDA available in build: {torch.cuda.is_available()}'); print(f'CUDA version: {torch.version.cuda}')" | |
| - name: Build CUDA server binary | |
| shell: bash | |
| working-directory: backend | |
| run: python build_binary.py --cuda | |
| - name: Split binary for GitHub Releases | |
| shell: bash | |
| run: | | |
| python scripts/split_binary.py \ | |
| backend/dist/voicebox-server-cuda.exe \ | |
| --output release-assets/ | |
| - name: Upload split parts to GitHub Release | |
| if: startsWith(github.ref, 'refs/tags/') | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| files: | | |
| release-assets/voicebox-server-cuda.part*.exe | |
| release-assets/voicebox-server-cuda.sha256 | |
| release-assets/voicebox-server-cuda.manifest | |
| draft: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Upload binary as workflow artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: voicebox-server-cuda-windows | |
| path: backend/dist/voicebox-server-cuda.exe | |
| retention-days: 7 |