name: CI on: push: branches: [main] tags: ['v*'] jobs: test: 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: Install dependencies run: pip install -r requirements.txt - name: Run tests run: python -m pytest tests/ -v build-android: runs-on: ubuntu-latest needs: test steps: - name: Checkout uses: actions/checkout@v3 - name: Setup Java 17 uses: actions/setup-java@v3 with: distribution: temurin java-version: "17" - 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" { 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 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 cd android .gradle-home/gradle-8.7/bin/gradle wrapper --gradle-version 8.7 --no-daemon ./gradlew assembleDebug --no-daemon cd .. # Copy APK to workspace root cp android/app/build/outputs/apk/debug/app-debug.apk meal-tracker.apk - name: Package web app if: startsWith(github.ref, 'refs/tags/v') run: | zip -r meal-tracker.zip . \ -x ".git/*" ".gitea/*" ".env" ".pytest_cache/*" \ "__pycache__/*" "meals.db" \ "android/.gradle/*" "android/.gradle-home/*" \ "android/app/build/*" "android/local.properties" - name: Publish release if: startsWith(github.ref, 'refs/tags/v') run: | TAG="${GITHUB_REF#refs/tags/}" API="$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY" # Create release RELEASE=$(curl -s -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ -H "Content-Type: application/json" \ -X POST "$API/releases" \ -d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":\"Release $TAG\"}") RELEASE_ID=$(echo "$RELEASE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('id',''))") if [ -n "$RELEASE_ID" ]; then UPLOAD="$API/releases/$RELEASE_ID/assets" curl -s -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ -F "attachment=@meal-tracker.apk;filename=meal-tracker-${TAG}.apk" "$UPLOAD" curl -s -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ -F "attachment=@meal-tracker.zip;filename=meal-tracker-${TAG}.zip" "$UPLOAD" echo "Release $TAG published with APK + ZIP" else echo "Failed to create release: $RELEASE" exit 1 fi