Compare commits

..

4 Commits

Author SHA1 Message Date
Giancarmine Salucci
416c8b07d2 ci: remove broken concurrency block, make release step idempotent
Some checks failed
Android Build & Publish / android (push) Has been cancelled
- Removed concurrency/cancel-in-progress: on this Gitea runner version
  cancelled runs get re-queued causing an infinite restart loop
- Release creation now checks for existing tag first (GET releases/tags/TAG)
  and reuses the existing release ID if found, preventing the second
  duplicate run from failing with a 409/422 tag-already-exists error
2026-05-25 21:01:09 +02:00
Giancarmine Salucci
32d4178875 ci: add concurrency group to prevent duplicate runner builds
All checks were successful
Android Build & Publish / android (push) Successful in 2m3s
2026-05-25 20:52:40 +02:00
Giancarmine Salucci
697f7de9d1 ci: retry gradlew up to 3x to survive transient CDN/network errors
All checks were successful
Android Build & Publish / android (push) Successful in 2m0s
2026-05-25 16:44:44 +02:00
Giancarmine Salucci
3204a19dc1 ci: retrigger after docker hub flake (run 87)
Some checks failed
Android Build & Publish / android (push) Failing after 32s
2026-05-25 13:39:24 +02:00

View File

@@ -94,11 +94,21 @@ jobs:
- name: Build Debug APK
working-directory: android
run: ./gradlew assembleDebug --no-daemon
run: |
# Retry up to 3 times to survive transient network errors when the
# Gradle wrapper downloads its distribution from GitHub CDN.
for attempt in 1 2 3; do
./gradlew assembleDebug --no-daemon && break
[ "$attempt" -lt 3 ] && echo "Attempt $attempt failed — retrying in 30s..." && sleep 30 || exit 1
done
- name: Build Release APK (unsigned — no signing key required)
working-directory: android
run: ./gradlew assembleRelease --no-daemon
run: |
for attempt in 1 2 3; do
./gradlew assembleRelease --no-daemon && break
[ "$attempt" -lt 3 ] && echo "Attempt $attempt failed — retrying in 30s..." && sleep 30 || exit 1
done
# ── 9. Upload APKs as workflow artifacts ─────────────────────────────────
- name: Upload APKs as artifacts
@@ -170,13 +180,20 @@ jobs:
MD_LIST=$(echo "$COMMIT_LOG" | sed 's/^/- /')
BODY=$(printf '%s' "$MD_LIST" | python3 -c "import sys,json; print(json.dumps(sys.stdin.read()))")
# ── Create the release ───────────────────────────────────────────────
RESP=$(curl -sf -X POST "$API/releases" \
-H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"tag_name\":\"$TAG\",\"name\":\"Build $VERSION\",\"body\":$BODY,\"draft\":false,\"prerelease\":false}")
RELEASE_ID=$(echo "$RESP" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Created release $TAG (id=$RELEASE_ID)"
# ── Create release (idempotent: reuse existing tag if already present) ───
EXISTING=$(curl -sf "$API/releases/tags/$TAG" \
-H "Authorization: token $TOKEN" || true)
if [[ -n "$EXISTING" ]]; then
RELEASE_ID=$(echo "$EXISTING" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Release $TAG already exists (id=$RELEASE_ID) — reusing."
else
RESP=$(curl -sf -X POST "$API/releases" \
-H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"tag_name\":\"$TAG\",\"name\":\"Build $VERSION\",\"body\":$BODY,\"draft\":false,\"prerelease\":false}")
RELEASE_ID=$(echo "$RESP" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Created release $TAG (id=$RELEASE_ID)"
fi
# ── Upload APKs as release assets ────────────────────────────────────
upload_asset() {