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"