Files
itstransport-android/.gitea/workflows/build-release.yml
admin 5c2f089b4e
All checks were successful
Build & Deploy APK / build (push) Successful in 1m53s
fix: add signing config so release APK can be installed
The release build had no signing config, producing an unsigned APK
that Android refuses to install. Added debug keystore signing for
release builds and a CI step to ensure the keystore exists.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 22:08:41 +01:00

98 lines
3.8 KiB
YAML

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: Ensure signing keystore
run: |
KEYSTORE="$HOME/.android/debug.keystore"
if [ ! -f "$KEYSTORE" ]; then
mkdir -p "$HOME/.android"
keytool -genkeypair -v \
-keystore "$KEYSTORE" \
-alias androiddebugkey \
-keyalg RSA -keysize 2048 -validity 10000 \
-storepass android -keypass android \
-dname "CN=Android Debug,O=Android,C=US"
echo "Generated debug keystore"
else
echo "Keystore already exists"
fi
- 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"