v0.5.1: Binary chunked image transfer #20
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: Build and Release | |
| on: | |
| push: | |
| tags: | |
| - 'v*.*.*-*' # Matches v0.1.0-test, v1.0.0-alpha, etc. | |
| - 'v*.*.*' # Matches v0.1.0, v1.0.0, etc. | |
| env: | |
| RELEASE_NAME: ${{ github.ref_name }} | |
| jobs: | |
| # ============================================ | |
| # Android APK Build | |
| # ============================================ | |
| build-android: | |
| name: Build Android APK | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| - name: Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v3 | |
| - name: Build shared packages | |
| run: | | |
| cd src/packages | |
| npm install | |
| npm run build -w @zelara/shared | |
| npm run build -w @zelara/skill-tree | |
| npm run build -w @zelara/state | |
| npm run build -w @zelara/device-linking | |
| - name: Install dependencies | |
| run: | | |
| cd apps/mobile | |
| npm install --legacy-peer-deps | |
| - name: Build Android APK | |
| run: | | |
| cd apps/mobile/android | |
| chmod +x gradlew | |
| ./gradlew assembleRelease | |
| - name: Sign APK (if keystore available) | |
| if: env.ANDROID_KEYSTORE_BASE64 != '' | |
| env: | |
| ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} | |
| ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} | |
| ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} | |
| ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }} | |
| run: | | |
| cd apps/mobile/android | |
| echo "$ANDROID_KEYSTORE_BASE64" | base64 -d > release.keystore | |
| # Signing will be handled by Gradle if secrets are configured | |
| - name: Upload APK artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: android-apk | |
| path: apps/mobile/android/app/build/outputs/apk/release/app-release.apk | |
| retention-days: 7 | |
| # ============================================ | |
| # Windows Desktop EXE Build | |
| # ============================================ | |
| build-windows: | |
| name: Build Windows EXE | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Build shared packages | |
| run: | | |
| cd src/packages | |
| npm install | |
| npm run build -w @zelara/shared | |
| npm run build -w @zelara/skill-tree | |
| npm run build -w @zelara/state | |
| npm run build -w @zelara/device-linking | |
| - name: Install Tauri dependencies | |
| run: | | |
| cd apps/desktop | |
| npm install | |
| - name: Build Tauri app | |
| run: | | |
| cd apps/desktop | |
| npm run tauri build | |
| - name: Upload Windows installer | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: windows-installer | |
| path: apps/desktop/src-tauri/target/release/bundle/msi/*.msi | |
| retention-days: 7 | |
| - name: Upload Windows EXE | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: windows-exe | |
| path: apps/desktop/src-tauri/target/release/zelara-desktop.exe | |
| retention-days: 7 | |
| # ============================================ | |
| # macOS Desktop Build (Intel + Apple Silicon) | |
| # ============================================ | |
| build-macos: | |
| name: Build macOS App | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: aarch64-apple-darwin,x86_64-apple-darwin | |
| - name: Build shared packages | |
| run: | | |
| cd src/packages | |
| npm install | |
| npm run build -w @zelara/shared | |
| npm run build -w @zelara/skill-tree | |
| npm run build -w @zelara/state | |
| npm run build -w @zelara/device-linking | |
| - name: Install Tauri dependencies | |
| run: | | |
| cd apps/desktop | |
| npm install | |
| - name: Build Tauri app (Universal Binary) | |
| run: | | |
| cd apps/desktop | |
| npm run tauri build -- --target universal-apple-darwin | |
| - name: Upload macOS DMG | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: macos-dmg | |
| path: apps/desktop/src-tauri/target/universal-apple-darwin/release/bundle/dmg/*.dmg | |
| retention-days: 7 | |
| - name: Upload macOS App | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: macos-app | |
| path: apps/desktop/src-tauri/target/universal-apple-darwin/release/bundle/macos/*.app | |
| retention-days: 7 | |
| # ============================================ | |
| # iOS Build (requires macOS) | |
| # ============================================ | |
| # DISABLED: Requires React Native ios/ directory with Xcode project and Podfile | |
| # TODO: Initialize React Native project with proper iOS configuration | |
| # build-ios: | |
| # name: Build iOS IPA | |
| # runs-on: macos-latest | |
| # | |
| # steps: | |
| # - name: Checkout repository | |
| # uses: actions/checkout@v4 | |
| # with: | |
| # submodules: recursive | |
| # | |
| # - name: Setup Node.js | |
| # uses: actions/setup-node@v4 | |
| # with: | |
| # node-version: '18' | |
| # | |
| # - name: Setup Ruby | |
| # uses: ruby/setup-ruby@v1 | |
| # with: | |
| # ruby-version: '3.0' | |
| # | |
| # - name: Install CocoaPods | |
| # run: | | |
| # sudo gem install cocoapods | |
| # | |
| # - name: Build shared packages | |
| # run: | | |
| # cd src/packages/shared | |
| # npm install | |
| # npm run build | |
| # | |
| # cd ../skill-tree | |
| # npm install | |
| # npm run build | |
| # | |
| # cd ../state | |
| # npm install | |
| # npm run build | |
| # | |
| # cd ../device-linking | |
| # npm install | |
| # npm run build | |
| # | |
| # - name: Install dependencies | |
| # run: | | |
| # cd apps/mobile | |
| # npm install --legacy-peer-deps | |
| # cd ios | |
| # pod install | |
| # | |
| # - name: Build iOS IPA (unsigned) | |
| # run: | | |
| # cd apps/mobile/ios | |
| # xcodebuild -workspace Zelara.xcworkspace \ | |
| # -scheme Zelara \ | |
| # -configuration Release \ | |
| # -sdk iphoneos \ | |
| # -archivePath build/Zelara.xcarchive \ | |
| # archive \ | |
| # CODE_SIGN_IDENTITY="" \ | |
| # CODE_SIGNING_REQUIRED=NO \ | |
| # CODE_SIGNING_ALLOWED=NO | |
| # | |
| # - name: Export IPA | |
| # run: | | |
| # cd apps/mobile/ios | |
| # xcodebuild -exportArchive \ | |
| # -archivePath build/Zelara.xcarchive \ | |
| # -exportPath build \ | |
| # -exportOptionsPlist ExportOptions.plist || echo "IPA export failed (expected without signing)" | |
| # | |
| # - name: Upload iOS build artifact | |
| # uses: actions/upload-artifact@v4 | |
| # if: success() | |
| # with: | |
| # name: ios-ipa | |
| # path: apps/mobile/ios/build/*.ipa | |
| # retention-days: 7 | |
| # ============================================ | |
| # Linux AppImage Build | |
| # ============================================ | |
| build-linux: | |
| name: Build Linux AppImage | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| libgtk-3-dev \ | |
| libwebkit2gtk-4.1-dev \ | |
| libappindicator3-dev \ | |
| librsvg2-dev \ | |
| patchelf \ | |
| libssl-dev | |
| - name: Build shared packages | |
| run: | | |
| cd src/packages | |
| npm install | |
| npm run build -w @zelara/shared | |
| npm run build -w @zelara/skill-tree | |
| npm run build -w @zelara/state | |
| npm run build -w @zelara/device-linking | |
| - name: Install Tauri dependencies | |
| run: | | |
| cd apps/desktop | |
| npm install | |
| - name: Build Tauri app | |
| run: | | |
| cd apps/desktop | |
| npm run tauri build | |
| - name: Upload Linux AppImage | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-appimage | |
| path: apps/desktop/src-tauri/target/release/bundle/appimage/*.AppImage | |
| retention-days: 7 | |
| - name: Upload Linux DEB | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-deb | |
| path: apps/desktop/src-tauri/target/release/bundle/deb/*.deb | |
| retention-days: 7 | |
| # ============================================ | |
| # Create GitHub Release | |
| # ============================================ | |
| create-release: | |
| name: Create GitHub Release | |
| needs: [build-android, build-windows, build-macos, build-linux] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Display artifact structure | |
| run: ls -R artifacts/ | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| name: Release ${{ github.ref_name }} | |
| draft: false | |
| prerelease: ${{ contains(github.ref_name, 'alpha') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'test') }} | |
| generate_release_notes: true | |
| files: | | |
| artifacts/android-apk/*.apk | |
| artifacts/windows-installer/*.msi | |
| artifacts/windows-exe/*.exe | |
| artifacts/macos-dmg/*.dmg | |
| artifacts/linux-appimage/*.AppImage | |
| artifacts/linux-deb/*.deb | |
| body: | | |
| ## Zelara ${{ github.ref_name }} | |
| ### Downloads | |
| **Mobile**: | |
| - 📱 Android: `app-release.apk` | |
| - 🍎 iOS: Coming soon (requires native project setup) | |
| **Desktop**: | |
| - 🪟 Windows: `.msi` installer or `.exe` portable | |
| - 🍎 macOS: `.dmg` installer (Universal Binary - Intel + Apple Silicon) | |
| - 🐧 Linux: `.AppImage` portable or `.deb` package | |
| ### Installation Instructions | |
| **Android**: | |
| 1. Download `app-release.apk` | |
| 2. Enable "Install from Unknown Sources" in Settings | |
| 3. Open APK to install | |
| **Windows**: | |
| 1. Download `.msi` for installer or `.exe` for portable | |
| 2. Run installer or extract portable version | |
| **macOS**: | |
| 1. Download `.dmg` | |
| 2. Open DMG and drag app to Applications | |
| 3. Right-click app → Open (first time, to bypass Gatekeeper) | |
| **Linux**: | |
| 1. Download `.AppImage` or `.deb` | |
| 2. AppImage: `chmod +x *.AppImage && ./Zelara*.AppImage` | |
| 3. DEB: `sudo dpkg -i *.deb` | |
| ### What's Included | |
| ✅ Device Linking (Desktop ↔ Mobile via QR code) | |
| ✅ Recycling Task (Camera + Image Validation) | |
| ✅ Point System (Progress persistence) | |
| ✅ Mock CV Validation (ONNX model not yet integrated) | |
| ### Known Limitations | |
| - Mock validation only (returns 85% confidence) | |
| - Finance module not yet unlockable | |
| - iOS build unsigned (requires Xcode signing) | |
| --- | |
| 🤖 Built with GitHub Actions | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |