Pulse/.forgejo/workflows/release.yaml

110 lines
3.6 KiB
YAML
Raw Normal View History

2025-05-01 16:17:55 +00:00
name: Android Release Build
on:
push:
tags:
- '*'
workflow_dispatch: {}
jobs:
build:
runs-on: debian
steps:
- name: Checkout source
uses: actions/checkout@v4
2025-05-01 16:45:31 +00:00
- name: Configure SDK path
run: echo "sdk.dir=/opt/android-sdk" > local.properties
2025-05-01 16:25:54 +00:00
- name: Check Java version
run: |
if ! command -v java >/dev/null; then
echo "❌ Java is not installed"
exit 1
fi
echo "✅ Java version:"
java -version
2025-05-01 16:17:55 +00:00
- name: Decode keystore
run: |
2025-05-01 16:56:45 +00:00
echo "$RELEASE_KEY_B64" | base64 -d > app/release-key.jks
2025-05-01 16:17:55 +00:00
env:
RELEASE_KEY_B64: ${{ secrets.RELEASE_KEY_B64 }}
2025-05-01 17:06:40 +00:00
- name: Test keystore
run: |
2025-05-01 17:10:33 +00:00
keytool -list -v -keystore app/release-key.jks -storepass "$KEYSTORE_PASSWORD"
2025-05-01 17:06:40 +00:00
env:
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
2025-05-01 18:37:04 +00:00
- name: Extract version from build.gradle
id: version
run: |
2025-05-01 18:47:46 +00:00
VERSION=$(sed -nE 's/^[[:space:]]*versionName[[:space:]]*=[[:space:]]*"([^"]+)"/\1/p' app/build.gradle)
VERSION="v${VERSION#v}" # normalize to vX.Y.Z
echo "$VERSION" > version.txt
echo "✅ Detected version: $VERSION"
2025-05-01 18:37:04 +00:00
2025-05-01 16:17:55 +00:00
- name: Set up gradle
run: chmod +x ./gradlew
2025-05-01 16:38:44 +00:00
- name: Inject signing credentials
run: |
2025-05-01 17:55:39 +00:00
echo "RELEASE_STORE_FILE=app/release-key.jks" >> gradle.properties
2025-05-01 16:38:44 +00:00
echo "RELEASE_STORE_PASSWORD=$KEYSTORE_PASSWORD" >> gradle.properties
2025-05-01 17:50:09 +00:00
echo "RELEASE_KEY_ALIAS=release-key" >> gradle.properties
echo "RELEASE_KEY_PASSWORD=$KEY_PASSWORD" >> gradle.properties
2025-05-01 17:58:37 +00:00
env:
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
2025-05-01 16:38:44 +00:00
- name: Build signed APK
run: ./gradlew clean assembleRelease
2025-05-01 16:17:55 +00:00
env:
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
2025-05-01 18:28:43 +00:00
- name: Create Forgejo release
run: |
2025-05-01 18:41:19 +00:00
TAG_NAME=$(cat version.txt)
echo "📦 Creating release for tag: $TAG_NAME"
2025-05-01 18:28:43 +00:00
curl -sSL -X POST "$FORGEJO_API/repos/${OWNER}/${REPO}/releases" \
-H "Authorization: token $FORGEJO_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"tag_name\": \"$TAG_NAME\",
\"name\": \"$TAG_NAME\",
2025-05-01 18:37:04 +00:00
\"body\": \"Automatically generated Android release\",
2025-05-01 18:28:43 +00:00
\"draft\": false,
\"prerelease\": false
}"
env:
FORGEJO_API: https://weforge.xyz/api/v1
OWNER: partisan
REPO: Pulse
2025-05-01 18:37:04 +00:00
FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
2025-05-01 18:28:43 +00:00
2025-05-01 18:26:02 +00:00
- name: Upload APK to release
run: |
2025-05-01 18:41:19 +00:00
TAG_NAME=$(cat version.txt)
echo "📤 Uploading APK to release tag: $TAG_NAME"
2025-05-01 18:26:02 +00:00
RELEASE_ID=$(curl -s -H "Authorization: token $FORGEJO_TOKEN" \
"$FORGEJO_API/repos/${OWNER}/${REPO}/releases/tags/$TAG_NAME" | jq -r .id)
curl -sSL -X POST "$FORGEJO_API/repos/${OWNER}/${REPO}/releases/${RELEASE_ID}/assets?name=app-release.apk" \
-H "Authorization: token $FORGEJO_TOKEN" \
-H "Content-Type: application/vnd.android.package-archive" \
--data-binary "@app/build/outputs/apk/release/app-release.apk"
env:
FORGEJO_API: https://weforge.xyz/api/v1
OWNER: partisan
REPO: Pulse
FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
2025-05-01 16:38:44 +00:00
- name: Cleanup secrets
run: |
2025-05-01 16:56:45 +00:00
rm -f app/release-key.jks gradle.properties
2025-05-01 16:38:44 +00:00
echo "🧹 Secrets cleaned up"