Skip to content

v0.14.1

v0.14.1 #16

Workflow file for this run

name: Builder for Android
on:
push:
tags:
- "v*"
jobs:
build-android:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: "blacksmith-2vcpu-ubuntu-2204"
args: ""
runs-on: ${{ matrix.platform }}
env:
NAME_APP: taskflow
APP_HOME_FOLDER: TaskFlow
MONGODB_URI: ${{ secrets.MONGODB_URI }}
MONGODB_NAME: TaskFlow
JWT_SECRET: ${{ secrets.JWT_SECRET }}
JSONDB_NAME: task_flow_db
SMTP_USERNAME: rusnakdima03@gmail.com
SMTP_PASSWORD: ${{ secrets.SMTP_PASSWORD }}
SMTP_SERVER: smtp.gmail.com
SMTP_PORT: 587
RESET_TOKEN_EXPIRY_HOURS: 1
steps:
- uses: actions/checkout@v4
- name: Create .env file
run: |
echo "NAME_APP=taskflow" > src-tauri/.env
echo "APP_HOME_FOLDER=TaskFlow" >> src-tauri/.env
echo "MONGODB_URI=${{ secrets.MONGODB_URI }}" >> src-tauri/.env
echo "MONGODB_NAME=TaskFlow" >> src-tauri/.env
echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> src-tauri/.env
echo "JSONDB_NAME=task_flow_db" >> src-tauri/.env
echo "SMTP_USERNAME=rusnakdima03@gmail.com" >> src-tauri/.env
echo "SMTP_PASSWORD=${{ secrets.SMTP_PASSWORD }}" >> src-tauri/.env
echo "SMTP_SERVER=smtp.gmail.com" >> src-tauri/.env
echo "SMTP_PORT=587" >> src-tauri/.env
echo "RESET_TOKEN_EXPIRY_HOURS=1" >> src-tauri/.env
- name: Free up disk space
run: |
echo "Freeing up disk space..."
sudo rm -rf /usr/share/dotnet || true
sudo rm -rf /opt/ghc || true
sudo rm -rf /usr/local/share/boost || true
# Skip AGENT_TOOLSDIRECTORY removal in local environments
if [ -n "$AGENT_TOOLSDIRECTORY" ] && [ "$AGENT_TOOLSDIRECTORY" != "/opt/hostedtoolcache" ]; then
sudo rm -rf "$AGENT_TOOLSDIRECTORY" || true
fi
sudo rm -rf /usr/share/swift || true
sudo rm -rf /usr/local/.ghcup || true
sudo apt-get clean || true
docker system prune -a -f || true
df -h
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "temurin"
cache: gradle
- name: Install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf lib32z1 lib32stdc++6 unzip wget
- name: Install Android SDK
run: |
export ANDROID_HOME=$HOME/Android/Sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
mkdir -p "$ANDROID_HOME"
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip commandlinetools-linux-11076708_latest.zip -d $ANDROID_HOME/cmdline-tools
mv $ANDROID_HOME/cmdline-tools/cmdline-tools $ANDROID_HOME/cmdline-tools/latest
rm commandlinetools-linux-11076708_latest.zip
echo "ANDROID_HOME=$ANDROID_HOME" >> $GITHUB_ENV
echo "ANDROID_SDK_ROOT=$ANDROID_HOME" >> $GITHUB_ENV
echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> $GITHUB_PATH
echo "$ANDROID_HOME/platform-tools" >> $GITHUB_PATH
- name: Accept Android SDK licenses and install components
run: |
yes | sdkmanager --licenses
sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34" "ndk;25.1.8937393"
echo "NDK_HOME=$ANDROID_HOME/ndk/25.1.8937393" >> $GITHUB_ENV
- name: Cache Gradle dependencies
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.android/build-cache
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Setup bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
- name: Add Android Rust targets
run: |
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: "./src-tauri -> target"
- name: Install frontend dependencies
run: bun install
- name: Clean up before build
run: |
echo "Cleaning up before build..."
# Clean npm cache
npm cache clean --force
# Clean gradle cache if exists
rm -rf ~/.gradle/daemon/
# Clean any existing build artifacts (but preserve incremental compilation cache)
rm -rf src-tauri/gen/android/app/build/
# Only clean release artifacts, keep debug and incremental cache
rm -rf src-tauri/target/release/
df -h
- name: Grant execute permission for gradlew
run: chmod +x ./src-tauri/gen/android/gradlew
- name: Setup Android Keystore
run: |
cd src-tauri/gen/android
# Use defaults for local testing if secrets are not provided
KEY_ALIAS="${{ secrets.ANDROID_KEY_ALIAS }}"
KEY_PASSWORD="${{ secrets.ANDROID_KEY_PASSWORD }}"
if [ -z "$KEY_ALIAS" ]; then
KEY_ALIAS="androiddebugkey"
fi
if [ -z "$KEY_PASSWORD" ]; then
KEY_PASSWORD="android"
fi
echo "keyAlias=$KEY_ALIAS" > keystore.properties
echo "password=$KEY_PASSWORD" >> keystore.properties
echo "storeFile=$(pwd)/app/keystore.jks" >> keystore.properties
# Create keystore from GitHub secrets (if provided)
if [ -n "${{ secrets.ANDROID_KEY_BASE64 }}" ]; then
base64 -d <<< "${{ secrets.ANDROID_KEY_BASE64 }}" > $(pwd)/app/keystore.jks
echo "Using provided keystore"
else
# Generate a debug keystore for CI builds
echo "Generating debug keystore for CI"
keytool -genkeypair -v -keystore $(pwd)/app/keystore.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-storepass "$KEY_PASSWORD" -keypass "$KEY_PASSWORD" \
-alias "$KEY_ALIAS" \
-dname "CN=Dmitriy303, OU=TCS, O=TechCraft Solutions, L=New York, ST=Washington, C=US"
fi
- name: Build APK
run: |
echo "Building APK..."
chmod +x ./scripts/build-optimized.sh
FORCE_BUILD=true ./scripts/build-optimized.sh build android release
- name: Upload APK artifact
uses: actions/upload-artifact@v4
with:
name: android-apk
path: src-tauri/gen/android/app/build/outputs/apk/universal/release/*.apk
- name: Upload AAB artifact
uses: actions/upload-artifact@v4
with:
name: android-aab
path: src-tauri/gen/android/app/build/outputs/bundle/universalRelease/*.aab
- name: Upload to Existing Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
tag_name: ${{ github.ref_name }}
files: |
src-tauri/gen/android/app/build/outputs/apk/universal/release/*.apk
src-tauri/gen/android/app/build/outputs/bundle/universalRelease/*.aab
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}