From c6c30d92f091ed1829fc3a8119edae644a1d7fcd Mon Sep 17 00:00:00 2001 From: agentbox Date: Sat, 1 Aug 2026 11:37:15 +0000 Subject: [PATCH] perf: cache Android SDK, Gradle, and pip in CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added actions/cache@v3 for: - ~/android-sdk (keyed on OS + API 34) — skips 150MB download - ~/.gradle + android/.gradle-home (keyed on OS + gradle 8.7 + gradle files hash) — skips 130MB gradle download + all dependency resolution and jar caching - ~/.cache/pip (keyed on requirements.txt hash) — skips flask/click/werkzeug installs Build step now checks if cached paths exist before downloading. Expected speedup: 5-6 min → ~1-2 min on cache hits. --- .gitea/workflows/ci.yml | 61 ++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index a1c7429..9aebbf2 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -16,6 +16,12 @@ jobs: with: python-version: "3.13" + - name: Cache pip + uses: actions/cache@v3 + with: + path: ~/.cache/pip + key: pip-${{ runner.os }}-${{ hashFiles('requirements.txt') }} + - name: Install dependencies run: pip install -r requirements.txt @@ -52,17 +58,39 @@ jobs: distribution: temurin java-version: "17" + - name: Cache Android SDK + uses: actions/cache@v3 + with: + path: ~/android-sdk + key: android-sdk-${{ runner.os }}-34 + + - name: Cache Gradle + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + android/.gradle-home + key: gradle-${{ runner.os }}-8.7-${{ hashFiles('android/**/*.gradle*') }} + restore-keys: | + gradle-${{ runner.os }}-8.7- + gradle-${{ runner.os }}- + - name: Build APK run: | export ANDROID_SDK_ROOT="$HOME/android-sdk" - mkdir -p "$ANDROID_SDK_ROOT" - wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip \ - -O /tmp/cmdline-tools.zip - unzip -qo /tmp/cmdline-tools.zip -d /tmp/cmdline-tools-tmp - mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools" - mv /tmp/cmdline-tools-tmp/cmdline-tools "$ANDROID_SDK_ROOT/cmdline-tools/latest" + # Download SDK command-line tools only if not cached + if [ ! -f "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" ]; then + mkdir -p "$ANDROID_SDK_ROOT" + wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip \ + -O /tmp/cmdline-tools.zip + unzip -qo /tmp/cmdline-tools.zip -d /tmp/cmdline-tools-tmp + mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools" + mv /tmp/cmdline-tools-tmp/cmdline-tools "$ANDROID_SDK_ROOT/cmdline-tools/latest" + fi + # Accept licenses + install packages (idempotent — skips if already installed) { yes 2>/dev/null || true; } | "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --licenses > /dev/null 2>&1 || true "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" \ "platform-tools" \ @@ -71,14 +99,21 @@ jobs: echo "sdk.dir=$ANDROID_SDK_ROOT" > android/local.properties - wget -q https://services.gradle.org/distributions/gradle-8.7-bin.zip -O /tmp/gradle.zip - mkdir -p android/.gradle-home - unzip -qo /tmp/gradle.zip -d android/.gradle-home + # Download Gradle only if not cached + if [ ! -d "android/.gradle-home/gradle-8.7" ]; then + wget -q https://services.gradle.org/distributions/gradle-8.7-bin.zip -O /tmp/gradle.zip + mkdir -p android/.gradle-home + unzip -qo /tmp/gradle.zip -d android/.gradle-home + fi - cd android - .gradle-home/gradle-8.7/bin/gradle wrapper --gradle-version 8.7 --no-daemon - ./gradlew assembleDebug --no-daemon - cd .. + # Generate wrapper only if needed + if [ ! -f android/gradlew ]; then + cd android + .gradle-home/gradle-8.7/bin/gradle wrapper --gradle-version 8.7 --no-daemon + cd .. + fi + + cd android && ./gradlew assembleDebug --no-daemon && cd .. cp android/app/build/outputs/apk/debug/app-debug.apk meal-tracker.apk - name: Upload APK artifact