CI now triggers on tags matching 'v*': - Builds APK (always, after tests pass) - On tag push: creates a Gitea Release and attaches meal-tracker.apk + meal-tracker.zip as release assets - Removed CI artifact steps (replaced by release publishing) The v1.0.0 release is live with APK (5.3 MB) and ZIP (134 KB).
103 lines
3.5 KiB
YAML
103 lines
3.5 KiB
YAML
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
|