134 lines
4.4 KiB
YAML
134 lines
4.4 KiB
YAML
name: Build APK
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: cimg/android:2024.01
|
|
|
|
steps:
|
|
- name: Install Node.js
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y curl
|
|
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
|
sudo apt-get install -y nodejs
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Generate Gradle Wrapper
|
|
run: gradle wrapper
|
|
|
|
- name: Grant execute permission
|
|
run: chmod +x ./gradlew
|
|
|
|
- name: Build APK
|
|
run: ./gradlew assembleRelease
|
|
|
|
- name: Locate APK
|
|
id: locate_apk
|
|
run: |
|
|
set -e
|
|
APK_PATH=$(ls app/build/outputs/apk/release/*.apk | head -n1 || true)
|
|
if [ -z "$APK_PATH" ]; then
|
|
echo "No APK found in app/build/outputs/apk/release" >&2
|
|
exit 1
|
|
fi
|
|
echo "APK_PATH=$APK_PATH" >> $GITHUB_ENV
|
|
echo "Found $APK_PATH"
|
|
|
|
# Note: uploading artifacts with actions/upload-artifact@v4 is not supported
|
|
# on some self-hosted/enterprise runners (GHES). We skip storing artifacts
|
|
# via that action and instead upload the APK directly to the Gitea release
|
|
# in the steps below.
|
|
|
|
- name: Create Gitea release
|
|
id: create_release
|
|
env:
|
|
GITEA_TOKEN: ${{ secrets.GIT_TOKEN }}
|
|
GITEA_SERVER: ${{ secrets.GIT_SERVER }}
|
|
run: |
|
|
set -e
|
|
SERVER_CLEAN=$(echo "$GITEA_SERVER" | sed 's#/$##')
|
|
API_BASE="${SERVER_CLEAN}/api/v1"
|
|
|
|
OWNER="${{ github.repository_owner }}"
|
|
REPO_NAME=$(echo "${{ github.repository }}" | cut -d/ -f2)
|
|
TAG="${{ github.ref_name }}"
|
|
|
|
echo "Debug Info:"
|
|
echo "- API URL: $API_BASE/repos/$OWNER/$REPO_NAME/releases"
|
|
echo "- OWNER: $OWNER"
|
|
echo "- REPO: $REPO_NAME"
|
|
echo "- TAG: $TAG"
|
|
|
|
# Próba utworzenia release z przechwyceniem statusu HTTP
|
|
RESPONSE_FILE=$(mktemp)
|
|
HTTP_STATUS=$(curl -s -o "$RESPONSE_FILE" -w "%{http_code}" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: token $GITEA_TOKEN" \
|
|
-X POST \
|
|
-d "{
|
|
\"tag_name\": \"$TAG\",
|
|
\"name\": \"$TAG\",
|
|
\"body\": \"Automated release for $TAG\",
|
|
\"draft\": false,
|
|
\"prerelease\": false
|
|
}" \
|
|
"$API_BASE/repos/$OWNER/$REPO_NAME/releases")
|
|
|
|
RESPONSE_BODY=$(cat "$RESPONSE_FILE")
|
|
echo "HTTP Status: $HTTP_STATUS"
|
|
echo "Response: $RESPONSE_BODY"
|
|
|
|
if [ "$HTTP_STATUS" -eq 409 ]; then
|
|
echo "Release already exists, fetching existing ID..."
|
|
RESPONSE_BODY=$(curl -s -H "Authorization: token $GITEA_TOKEN" "$API_BASE/repos/$OWNER/$REPO_NAME/releases/tags/$TAG")
|
|
RELEASE_ID=$(echo "$RESPONSE_BODY" | sed -n 's/.*"id":\([0-9]*\),.*/\1/p' | head -n1)
|
|
elif [ "$HTTP_STATUS" -eq 201 ]; then
|
|
RELEASE_ID=$(echo "$RESPONSE_BODY" | sed -n 's/.*"id":\([0-9]*\),.*/\1/p' | head -n1)
|
|
else
|
|
echo "Failed to create release. Expected 201 or 409, got $HTTP_STATUS"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$RELEASE_ID" ]; then
|
|
echo "Failed to extract RELEASE_ID from response"
|
|
exit 1
|
|
fi
|
|
|
|
echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV
|
|
echo "Successfully processed release ID: $RELEASE_ID"
|
|
|
|
- name: Upload APK to Gitea release
|
|
env:
|
|
GITEA_TOKEN: ${{ secrets.GIT_TOKEN }}
|
|
GITEA_SERVER: ${{ secrets.GIT_SERVER }}
|
|
run: |
|
|
set -e
|
|
SERVER_CLEAN=$(echo "$GITEA_SERVER" | sed 's#/$##')
|
|
API_BASE="${SERVER_CLEAN}/api/v1"
|
|
|
|
OWNER="${{ github.repository_owner }}"
|
|
REPO_NAME=$(echo "${{ github.repository }}" | cut -d/ -f2)
|
|
|
|
if [ -z "$APK_PATH" ]; then
|
|
echo "APK_PATH not set" >&2
|
|
exit 1
|
|
fi
|
|
if [ -z "$RELEASE_ID" ]; then
|
|
echo "RELEASE_ID not set" >&2
|
|
exit 1
|
|
fi
|
|
|
|
UPLOAD_URL="$API_BASE/repos/$OWNER/$REPO_NAME/releases/$RELEASE_ID/assets?name=$(basename $APK_PATH)"
|
|
echo "Uploading $APK_PATH to $UPLOAD_URL"
|
|
|
|
curl --fail -H "Authorization: token $GITEA_TOKEN" -H "Content-Type: application/octet-stream" \
|
|
--data-binary @"$APK_PATH" "$UPLOAD_URL"
|