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