name: Build and Release APK on: push: tags: - 'v*' jobs: build: runs-on: docker-compose steps: - name: Checkout source code uses: actions/checkout@v4 - name: Setup keystore and environment run: | echo "${{ secrets.KEYSTORE_BASE64 }}" | tr -d '\n' | base64 -d > app/key.jks echo "${{ secrets.DOTENV_BASE64 }}" | tr -d '\n' | base64 -d > .build/release/.env echo "ACCOUNT_MVR=${{ vars.ACCOUNT_MVR }}" >> .build/release/.env echo "ACCOUNT_USD=${{ vars.ACCOUNT_USD }}" >> .build/release/.env - name: Build APK working-directory: .build/release run: docker compose run --rm release - name: Rename APK run: | APP_NAME="${{ gitea.repository }}" APP_NAME="${APP_NAME//\//-}" TAG="${{ gitea.ref_name }}" find .build/release/release/ -maxdepth 1 -name "*.apk" | head -1 | xargs -I{} mv {} ".build/release/release/${APP_NAME}-${TAG}.apk" - name: Extract release notes run: | VERSION_CODE=$(grep 'versionCode = ' app/build.gradle.kts | sed 's/.*versionCode = \([0-9]*\).*/\1/') CHANGELOG="fastlane/metadata/android/en-US/changelogs/${VERSION_CODE}.txt" if [ -f "$CHANGELOG" ]; then cp "$CHANGELOG" release_notes.md else echo "No changelog found at $CHANGELOG" echo "No release notes" > release_notes.md fi - name: Create Gitea Release env: GITEA_SERVER_URL: ${{ gitea.server_url }} GITEA_REPOSITORY: ${{ gitea.repository }} GITEA_TOKEN: ${{ secrets.PAT_GITEA }} run: | APP_NAME="${{ gitea.repository }}" APP_NAME="${APP_NAME//\//-}" TAG="${{ gitea.ref_name }}" TITLE="${APP_NAME} ${TAG}" NOTES_FILE="release_notes.md" ASSET_PATH=".build/release/release/${APP_NAME}-${TAG}.apk" API_URL="${GITEA_SERVER_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases" RELEASE_RESPONSE=$(curl -s -X POST "$API_URL" \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ -d "{ \"tag_name\": \"${TAG}\", \"name\": \"${TITLE}\", \"body\": $(jq -Rs . < "$NOTES_FILE") }") RELEASE_ID=$(echo "$RELEASE_RESPONSE" | jq -r '.id') if [ "$RELEASE_ID" = "null" ] || [ -z "$RELEASE_ID" ]; then echo "Failed to create release:" echo "$RELEASE_RESPONSE" exit 1 fi echo "Created release with ID: $RELEASE_ID" ASSET_NAME=$(basename "$ASSET_PATH") UPLOAD_URL="${API_URL}/${RELEASE_ID}/assets?name=${ASSET_NAME}" curl -s -X POST "$UPLOAD_URL" \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/octet-stream" \ --data-binary "@${ASSET_PATH}" echo "Uploaded asset: $ASSET_NAME" - name: Send APK to Telegram env: TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} TG_CHAT_ID: ${{ vars.TG_CHAT_ID }} run: | if [ -z "$TG_BOT_TOKEN" ] || [ -z "$TG_CHAT_ID" ]; then echo "TG_BOT_TOKEN or TG_CHAT_ID not set, skipping Telegram upload." exit 0 fi APP_NAME="${{ gitea.repository }}" APP_NAME="${APP_NAME//\//-}" TAG="${{ gitea.ref_name }}" ASSET_PATH=".build/release/release/${APP_NAME}-${TAG}.apk" CAPTION="$(printf '%s\n\n%s' "${APP_NAME} ${TAG}" "$(cat release_notes.md)" | head -c 1024)" curl -s -X POST "https://api.telegram.org/bot${TG_BOT_TOKEN}/sendDocument" \ -F "chat_id=${TG_CHAT_ID}" \ -F "document=@${ASSET_PATH}" \ --form-string "caption=${CAPTION}"