From f103134762645f37270deec137ce26991bdf49b2 Mon Sep 17 00:00:00 2001 From: neckfire Date: Mon, 13 Jul 2026 09:18:46 +0200 Subject: [PATCH] ci: fix YAML (sort le patch Android dans un script, plus de heredoc) Co-Authored-By: Claude Opus 4.8 --- .gitea/workflows/build.yml | 69 ++++++-------------------------------- tool/patch_android.py | 63 ++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 58 deletions(-) create mode 100644 tool/patch_android.py diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index ffd4ffa..e608042 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -24,72 +24,25 @@ jobs: -e KSPW="${{ secrets.ANDROID_KEYSTORE_PASSWORD }}" \ -e ALIAS="${{ secrets.ANDROID_KEY_ALIAS }}" \ -e BUILD_NAME="${NAME}" -e BUILD_NUMBER="${RUN}" \ - "${FLUTTER_IMAGE}" bash -euxc ' - git config --global --add safe.directory /app - flutter create --platforms=android --org nfteam --project-name gamemanager . - # Permissions Android (internet + auto-install APK) - MAN=android/app/src/main/AndroidManifest.xml - sed -i "s#\n \n android/key.properties < version.json < version.json - name: Publish Gitea release run: | set -e - RUN="${{ github.run_number }}"; TAG="v1.0.${RUN}" + RUN="${{ github.run_number }}" + TAG="v1.0.${RUN}" API="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}" AUTH="Authorization: token ${{ secrets.GITHUB_TOKEN }}" - REL=$(curl -s -X POST "$API/releases" -H "$AUTH" -H 'Content-Type: application/json' \ - -d "{\"tag_name\":\"${TAG}\",\"name\":\"GameManager ${TAG}\",\"target_commitish\":\"main\"}") - ID=$(echo "$REL" | python3 -c "import sys,json;print(json.load(sys.stdin)['id'])") - curl -s -X POST "$API/releases/$ID/assets?name=gamemanager.apk" -H "$AUTH" \ - -F "attachment=@gamemanager.apk;type=application/vnd.android.package-archive" >/dev/null - curl -s -X POST "$API/releases/$ID/assets?name=version.json" -H "$AUTH" \ - -F "attachment=@version.json;type=application/json" >/dev/null - echo "Release ${TAG} publiée" + REL=$(curl -s -X POST "${API}/releases" -H "${AUTH}" -H 'Content-Type: application/json' -d "{\"tag_name\":\"${TAG}\",\"name\":\"GameManager ${TAG}\",\"target_commitish\":\"main\"}") + ID=$(echo "${REL}" | python3 -c "import sys,json;print(json.load(sys.stdin)['id'])") + curl -s -X POST "${API}/releases/${ID}/assets?name=gamemanager.apk" -H "${AUTH}" -F "attachment=@gamemanager.apk;type=application/vnd.android.package-archive" >/dev/null + curl -s -X POST "${API}/releases/${ID}/assets?name=version.json" -H "${AUTH}" -F "attachment=@version.json;type=application/json" >/dev/null + echo "Release ${TAG} publiee" - name: Notify ntfy if: always() run: | if [ "${{ job.status }}" = "success" ]; then E="white_check_mark"; P="default"; else E="rotating_light"; P="high"; fi - curl -s -H "Authorization: Bearer ${{ secrets.NTFY_TOKEN }}" -H "Title: gamemanager APK — ${{ job.status }}" \ - -H "Priority: ${P}" -H "Tags: ${E}" \ - -d "Build APK #${{ github.run_number }} : ${{ job.status }}" \ - "${{ secrets.NTFY_URL }}/${{ secrets.NTFY_TOPIC }}" || true + curl -s -H "Authorization: Bearer ${{ secrets.NTFY_TOKEN }}" -H "Title: gamemanager APK - ${{ job.status }}" -H "Priority: ${P}" -H "Tags: ${E}" -d "Build APK #${{ github.run_number }} : ${{ job.status }}" "${{ secrets.NTFY_URL }}/${{ secrets.NTFY_TOPIC }}" || true diff --git a/tool/patch_android.py b/tool/patch_android.py new file mode 100644 index 0000000..4d6b54b --- /dev/null +++ b/tool/patch_android.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +"""Patche le scaffold Android généré par `flutter create` : + - permissions (internet + auto-install APK) + - signature release depuis key.properties + - schéma de redirection OIDC (flutter_appauth) +Lancé dans la CI après `flutter create`. Idempotent.""" +import os +import re + +KSPW = os.environ["KSPW"] +ALIAS = os.environ["ALIAS"] + +# 1) key.properties +with open("android/key.properties", "w") as f: + f.write( + f"storePassword={KSPW}\n" + f"keyPassword={KSPW}\n" + f"keyAlias={ALIAS}\n" + "storeFile=/app/gamemanager.keystore\n" + ) + +# 2) AndroidManifest : permissions +man = "android/app/src/main/AndroidManifest.xml" +s = open(man).read() +perms = ( + '\n' + ' \n' +) +if "REQUEST_INSTALL_PACKAGES" not in s: + s = s.replace("