diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..c7e6d2f9 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,109 @@ +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' + - platform: 'macos-latest' + args: '--target x86_64-apple-darwin' + python-version: '3.12' + - platform: 'ubuntu-22.04' + args: '' + python-version: '3.12' + - platform: 'windows-latest' + args: '' + python-version: '3.12' + + runs-on: ${{ matrix.platform }} + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies (ubuntu only) + if: matrix.platform == 'ubuntu-22.04' + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + pip install pyinstaller + pip install -r backend/requirements.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,x86_64-apple-darwin' || '' }} + + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: './tauri/src-tauri -> target' + + - name: Install dependencies + run: bun install + + - uses: tauri-apps/tauri-action@v0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + projectPath: tauri + tagName: v__VERSION__ + releaseName: 'voicebox v__VERSION__' + releaseBody: | + ## What's Changed + See the assets below to download and install this version. + + ### Installation + - **macOS**: Download the `.dmg` file + - **Windows**: Download the `.msi` installer + - **Linux**: Download the `.AppImage` or `.deb` package + releaseDraft: true + prerelease: false + args: ${{ matrix.args }} diff --git a/backend/build_binary.py b/backend/build_binary.py index 6563e6dd..bf2f234f 100644 --- a/backend/build_binary.py +++ b/backend/build_binary.py @@ -11,15 +11,23 @@ def build_server(): """Build Python server as standalone binary.""" backend_dir = Path(__file__).parent - # Find qwen_tts source directory (it's an editable install) - qwen_tts_path = Path('/Users/jamespine/Projects/voice/Qwen3-TTS') + # Check for local editable qwen_tts install + local_qwen_path = Path.home() / 'Projects' / 'voice' / 'Qwen3-TTS' # PyInstaller arguments args = [ 'server.py', # Use server.py as entry point instead of main.py '--onefile', '--name', 'voicebox-server', - '--paths', str(qwen_tts_path), # Add qwen_tts source to paths + ] + + # Add local qwen_tts path if it exists (for editable installs) + if local_qwen_path.exists(): + args.extend(['--paths', str(local_qwen_path)]) + print(f"Using local qwen_tts source from: {local_qwen_path}") + + # Add hidden imports + args.extend([ '--hidden-import', 'backend', '--hidden-import', 'backend.main', '--hidden-import', 'backend.config', diff --git a/backend/requirements.txt b/backend/requirements.txt index e5b69f0a..fb4277e6 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -12,6 +12,7 @@ torch>=2.1.0 transformers>=4.36.0 accelerate>=0.26.0 huggingface_hub>=0.20.0 +qwen-tts>=0.1.0 # Audio processing librosa>=0.10.0