name: Build Tauri App (Linux + Windows + Android) on: push: branches: [ main ] pull_request: jobs: build: runs-on: ubuntu-latest steps: # 1️⃣ Checkout repository - name: Checkout repository uses: actions/checkout@v3 # 2️⃣ Install Rust - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal override: true # 3️⃣ Install Linux dependencies - name: Install Linux dependencies run: | sudo apt-get update sudo apt-get install -y \ mingw-w64 \ libssl-dev \ libgtk-3-dev \ libayatana-appindicator3-dev \ librsvg2-dev \ webkit2gtk-4.1 \ build-essential \ curl \ pkg-config \ xdg-utils \ gnupg2 \ unzip \ wget # 4️⃣ Set up Java - name: Set up Java uses: actions/setup-java@v3 with: distribution: temurin java-version: 17 # 5️⃣ Install Android SDK & NDK - name: Install Android SDK & NDK run: | ANDROID_SDK="$HOME/Android/Sdk" mkdir -p "$ANDROID_SDK/cmdline-tools" cd "$ANDROID_SDK/cmdline-tools" wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -O cmdline-tools.zip unzip -q cmdline-tools.zip mv cmdline-tools latest || mv tools latest export ANDROID_SDK_ROOT="$ANDROID_SDK" export ANDROID_HOME="$ANDROID_SDK" export PATH="$ANDROID_SDK/cmdline-tools/latest/bin:$ANDROID_SDK/platform-tools:$PATH" yes | sdkmanager --licenses || true sdkmanager "platform-tools" "platforms;android-33" "build-tools;33.0.2" "ndk;25.2.9519653" # 6️⃣ Persist Android environment variables for subsequent steps - name: Set Android environment variables run: | echo "ANDROID_HOME=$HOME/Android/Sdk" >> $GITHUB_ENV echo "ANDROID_SDK_ROOT=$HOME/Android/Sdk" >> $GITHUB_ENV echo "$HOME/Android/Sdk/platform-tools:$HOME/Android/Sdk/cmdline-tools/latest/bin:$PATH" >> $GITHUB_PATH # 7️⃣ Add Windows Rust target - name: Add Windows Rust target run: rustup target add x86_64-pc-windows-gnu # 8️⃣ Install Tauri CLI - name: Install Tauri CLI run: cargo install tauri-cli # 9️⃣ Initialize Android project - name: Initialize Tauri Android project run: | cd src-tauri cargo tauri android init # 🔟 Build Android APK (Debug) - name: Build Android Debug APK run: | cd src-tauri/gen/android ./gradlew assembleDebug # 1️⃣1️⃣ Build Android Release APK - name: Build Android Release APK run: | cd src-tauri/gen/android ./gradlew assembleRelease # 1️⃣2️⃣ Build Linux packages - name: Build Linux packages (deb + rpm) run: | cd src-tauri cargo tauri build # 1️⃣3️⃣ Build Windows exe - name: Build Windows exe run: | cd src-tauri cargo build --release --target x86_64-pc-windows-gnu # 1️⃣4️⃣ Make Linux ELF executable - name: Make Linux ELF executable run: chmod +x src-tauri/target/release/bytechat-desktop # 1️⃣5️⃣ Import GPG key for signing - name: Import GPG key run: | echo "$GPG_PRIVATE_KEY" | gpg --batch --import echo "$GPG_KEY_ID:6:" | gpg --import-ownertrust env: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }} # 1️⃣6️⃣ Sign Linux artifacts - name: Sign Linux artifacts run: | for f in src-tauri/target/release/bytechat-desktop \ src-tauri/target/release/bundle/deb/*.deb \ src-tauri/target/release/bundle/rpm/*.rpm; do echo "$GPG_PASSPHRASE" | gpg --batch --yes --passphrase-fd 0 \ --pinentry-mode loopback --detach-sign -a "$f" done env: GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} # 1️⃣7️⃣ Sign Windows exe - name: Sign Windows exe run: | exe=src-tauri/target/x86_64-pc-windows-gnu/release/bytechat-desktop.exe echo "$GPG_PASSPHRASE" | gpg --batch --yes --passphrase-fd 0 \ --pinentry-mode loopback --detach-sign -a "$exe" env: GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} # 1️⃣8️⃣ Upload Android APKs - name: Upload Android APK uses: actions/upload-artifact@v3 with: name: tauri-android-apk path: | src-tauri/gen/android/app/build/outputs/apk/debug/app-debug.apk src-tauri/gen/android/app/build/outputs/apk/release/app-release.apk # 1️⃣9️⃣ Upload Linux packages - name: Upload Linux packages uses: actions/upload-artifact@v3 with: name: tauri-linux path: | src-tauri/target/release/bytechat-desktop src-tauri/target/release/bytechat-desktop.asc src-tauri/target/release/bundle/deb/*.deb src-tauri/target/release/bundle/deb/*.asc src-tauri/target/release/bundle/rpm/*.rpm src-tauri/target/release/bundle/rpm/*.asc key/bytechat-public.gpg # 2️⃣0️⃣ Upload Windows exe + signature - name: Upload Windows exe uses: actions/upload-artifact@v3 with: name: tauri-windows-exe path: | src-tauri/target/x86_64-pc-windows-gnu/release/bytechat-desktop.exe src-tauri/target/x86_64-pc-windows-gnu/release/bytechat-desktop.exe.asc