v0.12.0 #11
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: 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 }} |