diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/android-release.yml similarity index 78% rename from .gitea/workflows/build.yml rename to .gitea/workflows/android-release.yml index 51bfdda..5816d8e 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/android-release.yml @@ -1,4 +1,4 @@ -name: Build Android Release +name: Android APK Release on: push: @@ -6,7 +6,7 @@ on: - main - master tags: - - "*" + - "android-app-v*" workflow_dispatch: permissions: @@ -16,7 +16,7 @@ permissions: jobs: android: - name: Build Android + name: Build Android APK runs-on: ubuntu-latest steps: @@ -163,31 +163,31 @@ jobs: exit 1 fi - cp "$apk_path" "$pkg_dir/gongyun-app-release.apk" - ls -alh "$pkg_dir/gongyun-app-release.apk" + cp "$apk_path" "$pkg_dir/gongyun-android-app-release.apk" + ls -alh "$pkg_dir/gongyun-android-app-release.apk" - - name: Rename Android APK + - name: Prepare Android APK artifact shell: bash run: | set -euo pipefail - apk="dist/android/gongyun-app-release.apk" + apk="dist/android/gongyun-android-app-release.apk" if [ ! -f "$apk" ]; then echo "Release APK was not found at $apk." exit 1 fi - cp "$apk" gongyun-app-release.apk - ls -alh gongyun-app-release.apk + cp "$apk" gongyun-android-app-release.apk + ls -alh gongyun-android-app-release.apk - name: Upload Android APK artifact uses: actions/upload-artifact@v3 with: - name: gongyun-app-release.apk - path: gongyun-app-release.apk + name: gongyun-android-app-release.apk + path: gongyun-android-app-release.apk - name: Publish Gitea release - if: startsWith(github.ref, 'refs/tags/') + if: startsWith(github.ref, 'refs/tags/android-app-v') shell: bash env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} @@ -196,6 +196,7 @@ jobs: GITEA_REPO: app TAG_NAME: ${{ github.ref_name }} TARGET_COMMITISH: ${{ github.sha }} + ANDROID_APK_FILE: gongyun-android-app-release.apk run: | set -euo pipefail @@ -206,6 +207,8 @@ jobs: releases_url="$GITEA_API_URL/repos/$GITEA_OWNER/$GITEA_REPO/releases" release_by_tag_url="$releases_url/tags/$TAG_NAME" + export RELEASE_TITLE="Android App APK ${TAG_NAME}" + export RELEASE_BODY="Android app installation package (APK) for ${TAG_NAME}." status="$(curl -sS -o release.json -w "%{http_code}" \ -H "Authorization: token $GITEA_TOKEN" \ @@ -220,8 +223,8 @@ jobs: print(json.dumps({ "tag_name": tag, "target_commitish": os.environ.get("TARGET_COMMITISH", ""), - "name": tag, - "body": f"Automated release for {tag}.", + "name": f"Android App APK {tag}", + "body": f"Android app installation package (APK) for {tag}.", "draft": False, "prerelease": False, })) @@ -250,6 +253,32 @@ jobs: PY )" + release_update_payload="$(python3 - <<'PY' + import json + import os + + print(json.dumps({ + "name": os.environ["RELEASE_TITLE"], + "body": os.environ["RELEASE_BODY"], + "draft": False, + "prerelease": False, + })) + PY + )" + + update_status="$(curl -sS -o release.json -w "%{http_code}" \ + -X PATCH \ + -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/json" \ + -d "$release_update_payload" \ + "$releases_url/$release_id")" + + if [ "$update_status" != "200" ]; then + echo "Failed to update Android release metadata. HTTP status: $update_status" + cat release.json + exit 1 + fi + assets_url="$releases_url/$release_id/assets" curl -sS -f \ @@ -259,8 +288,14 @@ jobs: python3 - <<'PY' > asset-ids-to-delete.txt import json + import os - names = {"gongyun-app-release.apk"} + tag = os.environ["TAG_NAME"] + names = { + os.environ["ANDROID_APK_FILE"], + f"gongyun-{tag}.apk", + "gongyun-app-release.apk", + } with open("assets.json", encoding="utf-8") as f: for asset in json.load(f): if asset.get("name") in names: @@ -276,18 +311,19 @@ jobs: fi done < asset-ids-to-delete.txt + release_asset_name="gongyun-${TAG_NAME}.apk" curl -sS -f \ -X POST \ -H "Authorization: token $GITEA_TOKEN" \ - -F "attachment=@gongyun-app-release.apk" \ - "$assets_url?name=gongyun-app-release.apk" + -F "attachment=@$ANDROID_APK_FILE" \ + "$assets_url?name=$release_asset_name" - name: Post-build disk cleanup if: always() shell: bash run: | set -euo pipefail - rm -rf build dist .dart_tool android/.gradle android/app-release.jks android/key.properties || true + rm -rf build dist .dart_tool android/.gradle android/app-release.jks android/key.properties gongyun-android-app-release.apk gongyun-app-release.apk || true if command -v docker >/dev/null 2>&1; then docker system prune -af --volumes || true docker builder prune -af || true diff --git a/pubspec.yaml b/pubspec.yaml index 2f9ee6c..3c2ac7e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.3.0+1 +version: 1.3.1+2 environment: sdk: ^3.11.4