Skip to content

v2.0.8 - collapsible sidebar and better desktop updates #49

v2.0.8 - collapsible sidebar and better desktop updates

v2.0.8 - collapsible sidebar and better desktop updates #49

Workflow file for this run

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