Files
agentbox c6c30d92f0
CI / test-and-package (push) Successful in 3m46s
CI / build-android (push) Successful in 9m22s
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.
2026-08-01 11:37:15 +00:00

124 lines
3.8 KiB
YAML

name: CI
on:
push:
branches: [main]
jobs:
test-and-package:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
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
- name: Run tests
run: python -m pytest tests/ -v
- name: Package artifact
run: |
zip -r meal-tracker.zip . \
-x ".git/*" \
-x ".gitea/*" \
-x ".env" \
-x "docker-compose.yml" \
-x ".pytest_cache/*" \
-x "__pycache__/*" \
-x "meals.db"
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: meal-tracker
path: meal-tracker.zip
build-android:
runs-on: ubuntu-latest
needs: test-and-package
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Java 17
uses: actions/setup-java@v3
with:
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"
# 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" \
"build-tools;34.0.0" \
"platforms;android-34" > /dev/null 2>&1 || true
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
mkdir -p 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
.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
uses: actions/upload-artifact@v3
with:
name: meal-tracker-apk
path: meal-tracker.apk