perf: cache Android SDK, Gradle, and pip in CI
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.
This commit is contained in:
+37
-2
@@ -16,6 +16,12 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: "3.13"
|
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
|
- name: Install dependencies
|
||||||
run: pip install -r requirements.txt
|
run: pip install -r requirements.txt
|
||||||
|
|
||||||
@@ -52,17 +58,39 @@ jobs:
|
|||||||
distribution: temurin
|
distribution: temurin
|
||||||
java-version: "17"
|
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
|
- name: Build APK
|
||||||
run: |
|
run: |
|
||||||
export ANDROID_SDK_ROOT="$HOME/android-sdk"
|
export ANDROID_SDK_ROOT="$HOME/android-sdk"
|
||||||
mkdir -p "$ANDROID_SDK_ROOT"
|
|
||||||
|
|
||||||
|
# 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 \
|
wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip \
|
||||||
-O /tmp/cmdline-tools.zip
|
-O /tmp/cmdline-tools.zip
|
||||||
unzip -qo /tmp/cmdline-tools.zip -d /tmp/cmdline-tools-tmp
|
unzip -qo /tmp/cmdline-tools.zip -d /tmp/cmdline-tools-tmp
|
||||||
mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools"
|
mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools"
|
||||||
mv /tmp/cmdline-tools-tmp/cmdline-tools "$ANDROID_SDK_ROOT/cmdline-tools/latest"
|
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
|
{ 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" \
|
"$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" \
|
||||||
"platform-tools" \
|
"platform-tools" \
|
||||||
@@ -71,14 +99,21 @@ jobs:
|
|||||||
|
|
||||||
echo "sdk.dir=$ANDROID_SDK_ROOT" > android/local.properties
|
echo "sdk.dir=$ANDROID_SDK_ROOT" > android/local.properties
|
||||||
|
|
||||||
|
# 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
|
wget -q https://services.gradle.org/distributions/gradle-8.7-bin.zip -O /tmp/gradle.zip
|
||||||
mkdir -p android/.gradle-home
|
mkdir -p android/.gradle-home
|
||||||
unzip -qo /tmp/gradle.zip -d android/.gradle-home
|
unzip -qo /tmp/gradle.zip -d android/.gradle-home
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Generate wrapper only if needed
|
||||||
|
if [ ! -f android/gradlew ]; then
|
||||||
cd android
|
cd android
|
||||||
.gradle-home/gradle-8.7/bin/gradle wrapper --gradle-version 8.7 --no-daemon
|
.gradle-home/gradle-8.7/bin/gradle wrapper --gradle-version 8.7 --no-daemon
|
||||||
./gradlew assembleDebug --no-daemon
|
|
||||||
cd ..
|
cd ..
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd android && ./gradlew assembleDebug --no-daemon && cd ..
|
||||||
cp android/app/build/outputs/apk/debug/app-debug.apk meal-tracker.apk
|
cp android/app/build/outputs/apk/debug/app-debug.apk meal-tracker.apk
|
||||||
|
|
||||||
- name: Upload APK artifact
|
- name: Upload APK artifact
|
||||||
|
|||||||
Reference in New Issue
Block a user