name: Build & Deploy APK on: push: branches: [main] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout run: | git clone --depth 1 --branch "${GITHUB_REF_NAME}" \ "http://admin:${{ secrets.GITHUB_TOKEN }}@192.168.5.10:3000/${GITHUB_REPOSITORY}.git" . - name: Validate environment run: | echo "Java: $(java --version 2>&1 | head -1)" echo "ANDROID_HOME: $ANDROID_HOME" echo "sdk.dir=$ANDROID_HOME" > local.properties cat local.properties - name: Build Release APK shell: bash run: | GRADLE_PROPS="gradle/wrapper/gradle-wrapper.properties" DIST_URL=$(grep distributionUrl "$GRADLE_PROPS" | cut -d'=' -f2 | sed 's/\\//g') GRADLE_DIR="$HOME/.gradle/wrapper/dists/gradle-8.11.1-bin" if [ ! -d "$GRADLE_DIR" ]; then mkdir -p /tmp/gradle-download wget -q "$DIST_URL" -O /tmp/gradle-download/gradle.zip mkdir -p "$GRADLE_DIR" unzip -qo /tmp/gradle-download/gradle.zip -d "$GRADLE_DIR" rm /tmp/gradle-download/gradle.zip fi GRADLE_BIN=$(find "$GRADLE_DIR" -name "gradle" -path "*/bin/gradle" | head -1) echo "Using Gradle: $GRADLE_BIN" "$GRADLE_BIN" assembleRelease --no-daemon - name: Deploy APK to Gitea release shell: bash run: | GITEA="http://192.168.5.10:3000" REPO="admin/itstransport-android" TOKEN="${{ secrets.GITHUB_TOKEN }}" VERSION_NAME=$(grep 'versionName' app/build.gradle.kts | head -1 | sed 's/.*"\(.*\)".*/\1/') VERSION_CODE=$(grep 'versionCode' app/build.gradle.kts | head -1 | sed 's/[^0-9]*//g') COMMIT_MSG=$(git log -1 --pretty=%s) APK=$(find app/build/outputs/apk/release -name "*.apk" | head -1) test -n "$APK" || { echo "ERROR: No APK found"; exit 1; } TAG="v${VERSION_NAME}-${VERSION_CODE}" echo "Deploying $TAG — $(du -h "$APK" | cut -f1)" # Delete existing release with same tag (if re-building same version) EXISTING=$(curl -s -H "Authorization: token $TOKEN" "$GITEA/api/v1/repos/$REPO/releases/tags/$TAG" | python3 -c "import sys,json; print(json.load(sys.stdin).get('id',''))" 2>/dev/null) if [ -n "$EXISTING" ]; then curl -s -X DELETE -H "Authorization: token $TOKEN" "$GITEA/api/v1/repos/$REPO/releases/$EXISTING" echo "Deleted existing release $EXISTING" fi # Create release RELEASE_ID=$(curl -s -X POST -H "Authorization: token $TOKEN" \ -H "Content-Type: application/json" \ "$GITEA/api/v1/repos/$REPO/releases" \ -d "{\"tag_name\":\"$TAG\",\"name\":\"v$VERSION_NAME\",\"body\":\"$COMMIT_MSG\",\"draft\":false,\"prerelease\":false}" \ | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])") echo "Created release ID: $RELEASE_ID" # Upload APK as release asset curl -s -X POST -H "Authorization: token $TOKEN" \ -H "Content-Type: application/octet-stream" \ "$GITEA/api/v1/repos/$REPO/releases/$RELEASE_ID/assets?name=itstransport.apk" \ --data-binary @"$APK" echo "APK uploaded to release $TAG"