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: | # Avoid pipefail issues with find|zip find . -type f \ ! -path './.git/*' \ ! -path './.gitea/*' \ ! -name '.env' \ ! -path './.pytest_cache/*' \ ! -path './__pycache__/*' \ ! -name 'meals.db' \ ! -path './android/.gradle/*' \ ! -path './android/.gradle-home/*' \ ! -path './android/app/build/*' \ ! -name 'android/local.properties' \ ! -name 'android/gradle/wrapper/gradle-wrapper.jar' \ ! -name 'android/gradlew.bat' \ > /tmp/files.txt zip -q meal-tracker.zip -@ < /tmp/files.txt echo "Packaged $(wc -l < /tmp/files.txt) files ($(du -h meal-tracker.zip | cut -f1))" - 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