v2.0.8 - collapsible sidebar and better desktop updates #49
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: | |
| release: | |
| types: [created] | |
| permissions: | |
| contents: write | |
| jobs: | |
| create-release: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| release_id: ${{ steps.get_version.outputs.version }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v1 | |
| with: | |
| bun-version: 1.2.2 | |
| - name: Get version | |
| id: get_version | |
| run: echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT | |
| build-tauri: | |
| needs: create-release | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - platform: macos-latest | |
| args: --target universal-apple-darwin | |
| - platform: ubuntu-latest | |
| args: "" | |
| runs-on: ${{ matrix.platform }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v1 | |
| with: | |
| bun-version: 1.2.2 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} | |
| - name: Cache Homebrew | |
| if: matrix.platform == 'macos-latest' | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/Library/Caches/Homebrew | |
| /opt/homebrew/Cellar/sccache | |
| /opt/homebrew/Cellar/openssl@3 | |
| key: ${{ runner.os }}-brew-${{ hashFiles('.github/workflows/release.yml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-brew- | |
| - name: Install sccache (macOS) | |
| if: matrix.platform == 'macos-latest' | |
| run: | | |
| brew install sccache | |
| brew link --overwrite --force sccache | |
| sccache --version | |
| - name: Install sccache (Linux) | |
| if: matrix.platform == 'ubuntu-latest' | |
| run: | | |
| SCCACHE_VERSION=0.8.2 | |
| SCCACHE_URL="https://github.com/mozilla/sccache/releases/download/v${SCCACHE_VERSION}/sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl.tar.gz" | |
| curl -L "$SCCACHE_URL" | tar xz | |
| sudo mv sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl/sccache /usr/local/bin/ | |
| chmod +x /usr/local/bin/sccache | |
| sccache --version | |
| - name: Cache sccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ matrix.platform == 'macos-latest' && '~/Library/Caches/Mozilla.sccache' || '~/.cache/sccache' }} | |
| key: ${{ runner.os }}-sccache-release-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-sccache-release- | |
| ${{ runner.os }}-sccache- | |
| - name: Install dependencies (Linux) | |
| if: matrix.platform == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libwebkit2gtk-4.1-dev \ | |
| libssl-dev \ | |
| libgtk-3-dev \ | |
| libayatana-appindicator3-dev \ | |
| librsvg2-dev | |
| - name: Install frontend dependencies | |
| working-directory: ./frontend | |
| run: bun install | |
| - name: Configure sccache | |
| run: | | |
| echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV | |
| echo "SCCACHE_CACHE_SIZE=2G" >> $GITHUB_ENV | |
| - name: Build Tauri App | |
| uses: tauri-apps/tauri-action@v0 | |
| 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 }} | |
| APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} | |
| APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | |
| APPLE_ID: ${{ secrets.APPLE_ID }} | |
| APPLE_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} | |
| APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} | |
| VITE_OPEN_SECRET_API_URL: https://enclave.trymaple.ai | |
| VITE_MAPLE_BILLING_API_URL: https://billing.opensecret.cloud | |
| VITE_CLIENT_ID: ba5a14b5-d915-47b1-b7b1-afda52bc5fc6 | |
| with: | |
| projectPath: './frontend' | |
| tagName: ${{ github.ref_name }} | |
| releaseName: 'Maple v${{ github.ref_name }}' | |
| releaseBody: 'See the assets to download this version and install.' | |
| releaseDraft: true | |
| prerelease: false | |
| args: ${{ matrix.args }} | |
| assetNamePattern: '[name]_[version]_[arch].[ext]' | |
| build-android: | |
| needs: create-release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '21' | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v3 | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v1 | |
| with: | |
| bun-version: 1.2.2 | |
| - name: Cache Bun dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.bun/install/cache | |
| frontend/node_modules | |
| key: ${{ runner.os }}-bun-${{ hashFiles('frontend/bun.lockb') }} | |
| restore-keys: | | |
| ${{ runner.os }}-bun- | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: aarch64-linux-android,armv7-linux-androideabi,x86_64-linux-android,i686-linux-android | |
| - name: Setup Android NDK | |
| uses: nttld/setup-ndk@v1 | |
| id: setup-ndk | |
| with: | |
| ndk-version: r27c | |
| add-to-path: true | |
| - name: Cache Gradle | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.gradle/caches | |
| ~/.gradle/wrapper | |
| frontend/src-tauri/gen/android/.gradle | |
| frontend/src-tauri/gen/android/build | |
| frontend/src-tauri/gen/android/app/build | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('frontend/src-tauri/gen/android/**/*.gradle*', 'frontend/src-tauri/gen/android/gradle-wrapper.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| - name: Install sccache | |
| run: | | |
| SCCACHE_VERSION=0.8.2 | |
| SCCACHE_URL="https://github.com/mozilla/sccache/releases/download/v${SCCACHE_VERSION}/sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl.tar.gz" | |
| curl -L "$SCCACHE_URL" | tar xz | |
| sudo mv sccache-v${SCCACHE_VERSION}-x86_64-unknown-linux-musl/sccache /usr/local/bin/ | |
| chmod +x /usr/local/bin/sccache | |
| sccache --version | |
| - name: Cache sccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/sccache | |
| key: ${{ runner.os }}-sccache-android-release-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-sccache-android-release- | |
| ${{ runner.os }}-sccache- | |
| - name: Cache Cargo bin (Tauri CLI) | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cargo/bin/ | |
| key: ${{ runner.os }}-cargo-bin-tauri-cli-2.9.2 | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-bin-tauri-cli- | |
| ${{ runner.os }}-cargo-bin- | |
| - name: Install Linux dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libssl-dev | |
| - name: Install frontend dependencies | |
| working-directory: ./frontend | |
| run: bun install | |
| - name: Install Tauri CLI | |
| run: | | |
| if ! command -v cargo-tauri &> /dev/null; then | |
| cargo install tauri-cli --version "2.9.2" --locked | |
| else | |
| echo "Tauri CLI already installed" | |
| fi | |
| env: | |
| CARGO_CFG_TARGET_OS: linux | |
| - name: Setup Android signing | |
| env: | |
| ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} | |
| ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} | |
| ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} | |
| run: | | |
| cd frontend/src-tauri/gen/android | |
| echo "$ANDROID_KEYSTORE_BASE64" | base64 --decode > $RUNNER_TEMP/keystore.jks | |
| echo "keyAlias=$ANDROID_KEY_ALIAS" > keystore.properties | |
| echo "password=$ANDROID_KEY_PASSWORD" >> keystore.properties | |
| echo "storeFile=$RUNNER_TEMP/keystore.jks" >> keystore.properties | |
| - name: Generate tauri.properties (Workaround for Tauri 2.9.x bug) | |
| run: | | |
| # Workaround for Tauri 2.9.x not generating tauri.properties correctly | |
| # See: https://github.com/tauri-apps/tauri/issues/YOUR_ISSUE_NUMBER | |
| VERSION=$(jq -r '.version' frontend/src-tauri/tauri.conf.json) | |
| VERSION_CODE=$(jq -r '.bundle.android.versionCode' frontend/src-tauri/tauri.conf.json) | |
| mkdir -p frontend/src-tauri/gen/android/app | |
| cat > frontend/src-tauri/gen/android/app/tauri.properties << EOF | |
| // THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. | |
| tauri.android.versionName=$VERSION | |
| tauri.android.versionCode=$VERSION_CODE | |
| EOF | |
| echo "Generated tauri.properties with version $VERSION and versionCode $VERSION_CODE" | |
| - name: Configure sccache | |
| run: | | |
| echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV | |
| echo "SCCACHE_DIR=$HOME/.cache/sccache" >> $GITHUB_ENV | |
| echo "SCCACHE_CACHE_SIZE=2G" >> $GITHUB_ENV | |
| - name: Build Tauri Android App (Signed Release) | |
| working-directory: ./frontend | |
| run: | | |
| export ANDROID_HOME=$ANDROID_SDK_ROOT | |
| export NDK_HOME=${{ steps.setup-ndk.outputs.ndk-path }} | |
| # Set up Android NDK toolchain paths | |
| export PATH=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH | |
| # Set up cross-compilation environment variables for each target | |
| export AR_aarch64_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar | |
| export CC_aarch64_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang | |
| export CXX_aarch64_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang++ | |
| export RANLIB_aarch64_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib | |
| export AR_armv7_linux_androideabi=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar | |
| export CC_armv7_linux_androideabi=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang | |
| export CXX_armv7_linux_androideabi=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang++ | |
| export RANLIB_armv7_linux_androideabi=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib | |
| export AR_x86_64_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar | |
| export CC_x86_64_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang | |
| export CXX_x86_64_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang++ | |
| export RANLIB_x86_64_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib | |
| export AR_i686_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar | |
| export CC_i686_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android24-clang | |
| export CXX_i686_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android24-clang++ | |
| export RANLIB_i686_linux_android=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib | |
| # Create symlinks for ranlib that OpenSSL expects | |
| sudo ln -sf $NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib /usr/local/bin/aarch64-linux-android-ranlib | |
| sudo ln -sf $NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib /usr/local/bin/armv7a-linux-androideabi-ranlib | |
| sudo ln -sf $NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib /usr/local/bin/x86_64-linux-android-ranlib | |
| sudo ln -sf $NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib /usr/local/bin/i686-linux-android-ranlib | |
| cargo tauri android build | |
| env: | |
| VITE_OPEN_SECRET_API_URL: https://enclave.trymaple.ai | |
| VITE_MAPLE_BILLING_API_URL: https://billing.opensecret.cloud | |
| VITE_CLIENT_ID: ba5a14b5-d915-47b1-b7b1-afda52bc5fc6 | |
| - name: Upload Android APK to Release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh release upload ${{ github.ref_name }} \ | |
| frontend/src-tauri/gen/android/app/build/outputs/apk/universal/release/app-universal-release.apk \ | |
| --clobber | |
| - name: Upload Android AAB to Release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh release upload ${{ github.ref_name }} \ | |
| frontend/src-tauri/gen/android/app/build/outputs/bundle/universalRelease/app-universal-release.aab \ | |
| --clobber | |
| update-latest-json: | |
| needs: build-tauri | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download release artifacts | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| mkdir -p artifacts | |
| gh release download ${{ github.ref_name }} -D artifacts | |
| - name: Generate latest.json | |
| id: generate-latest | |
| run: | | |
| VERSION="${{ github.ref_name }}" | |
| RELEASE_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") | |
| # Get signatures from the artifacts | |
| # We build a single universal macOS binary that works on both Intel and Apple Silicon | |
| # but Tauri updater requires entries for each architecture to work properly | |
| MACOS_SIG=$(cat artifacts/*.app.tar.gz.sig) | |
| LINUX_X64_SIG=$(cat artifacts/*.AppImage.sig) | |
| # Create latest.json for auto-updates | |
| # Note: Even though we build one universal binary for macOS, | |
| # we need separate entries for each architecture in the JSON | |
| # to ensure the updater works correctly on all Macs | |
| cat > latest.json << EOF | |
| { | |
| "version": "${VERSION#v}", | |
| "notes": "See the release notes at https://github.com/OpenSecretCloud/Maple/releases/tag/${VERSION}", | |
| "pub_date": "${RELEASE_DATE}", | |
| "platforms": { | |
| "darwin-x86_64": { | |
| "signature": "${MACOS_SIG}", | |
| "url": "https://github.com/OpenSecretCloud/Maple/releases/download/${VERSION}/Maple_${VERSION#v}_universal.app.tar.gz" | |
| }, | |
| "darwin-aarch64": { | |
| "signature": "${MACOS_SIG}", | |
| "url": "https://github.com/OpenSecretCloud/Maple/releases/download/${VERSION}/Maple_${VERSION#v}_universal.app.tar.gz" | |
| }, | |
| "linux-x86_64": { | |
| "signature": "${LINUX_X64_SIG}", | |
| "url": "https://github.com/OpenSecretCloud/Maple/releases/download/${VERSION}/Maple_${VERSION#v}_amd64.AppImage" | |
| } | |
| } | |
| } | |
| EOF | |
| - name: Upload latest.json | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh release upload ${{ github.ref_name }} latest.json --clobber |