Files
tabatago/.gitea/workflows/pr-iphone-deploy.yml
millianlmx 9b06c0ae5c
Some checks failed
PR → Build → Firebase OTA → LGTM / Wait for LGTM comment (pull_request) Has been cancelled
PR → Build → Firebase OTA → LGTM / Build & Deploy to Firebase OTA (pull_request) Has been cancelled
feat: switch to Firebase OTA deployment, drop ios-deploy
2026-06-26 21:48:07 +00:00

162 lines
6.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# TabataGo — PR → Build → Archive → Firebase OTA → Wait LGTM → Merge
# =============================================================================
# Chaque PR déclenche ce workflow :
# 1. Build l'app sur le Runner Mac
# 2. Archive → Export .ipa → Déploie via Firebase App Distribution
# 3. Poste un commentaire sur la PR
# 4. Attend un commentaire "LGTM" de Millian
# 5. Merge automatique
# =============================================================================
name: PR → Build → Firebase OTA → LGTM
on:
pull_request:
branches: [main]
types: [opened, synchronize, reopened]
# ── Permissions ──────────────────────────────────────────────────────────────
permissions:
contents: write
pull-requests: write
# ── Jobs ─────────────────────────────────────────────────────────────────────
jobs:
# ─── Build + Deploy ────────────────────────────────────────────────────────
build-deploy:
name: Build & Deploy to Firebase OTA
runs-on: macos
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Xcode
run: |
sudo xcode-select -s /Applications/Xcode.app
xcodebuild -version
- name: Install xcodegen
run: brew install xcodegen
- name: Generate Xcode project
run: |
cd tabatago-swift
xcodegen generate
- name: Install Firebase CLI
run: brew install firebase-cli
- name: Archive app
run: |
cd tabatago-swift
xcodebuild archive \
-scheme TabataGo \
-sdk iphoneos \
-destination "generic/platform=iOS" \
-configuration Debug \
-archivePath ../build/TabataGo.xcarchive \
-allowProvisioningUpdates \
CODE_SIGN_STYLE=Automatic
- name: Export IPA
run: |
xcodebuild -exportArchive \
-archivePath ../build/TabataGo.xcarchive \
-exportPath ../build/ \
-exportOptionsPlist ExportOptions.plist \
-allowProvisioningUpdates
- name: Deploy to Firebase App Distribution
env:
FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }}
run: |
echo "${{ secrets.FIREBASE_SERVICE_ACCOUNT }}" | base64 -d > /tmp/firebase-key.json
export GOOGLE_APPLICATION_CREDENTIALS=/tmp/firebase-key.json
firebase appdistribution:distribute ../build/TabataGo.ipa \
--app "${FIREBASE_APP_ID}" \
--groups "millian-test" \
--release-notes "PR: ${{ github.event.pull_request.title }}"
rm /tmp/firebase-key.json
- name: Post "Ready to test" comment
env:
GT_TOKEN: ${{ secrets.GITEA_TOKEN }}
GITEA_URL: ${{ vars.GITEA_URL || 'https://gitea.1000co.fr' }}
run: |
PR="${{ github.event.pull_request.number }}"
REPO="${{ github.repository }}"
BODY="## 📱 Prêt à tester !\\n\\nL'app a été déployée via Firebase App Distribution.\\n\\n- Teste les changements\\n- Reply **LGTM** pour merger\\n- Reply **KO** pour bloquer"
curl -s -X POST \
-H "Authorization: token ${GT_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"body\": \"${BODY}\"}" \
"${GITEA_URL}/api/v1/repos/${REPO}/issues/${PR}/comments"
# ─── Wait for LGTM ─────────────────────────────────────────────────────────
wait-approval:
name: Wait for LGTM comment
needs: build-deploy
runs-on: macos
timeout-minutes: 120 # 2 heures max
steps:
- name: Poll for LGTM
env:
GT_TOKEN: ${{ secrets.GITEA_TOKEN }}
GITEA_URL: ${{ vars.GITEA_URL || 'https://gitea.1000co.fr' }}
run: |
PR_NUMBER="${{ github.event.pull_request.number }}"
REPO="${{ github.repository }}"
PR_TITLE="${{ github.event.pull_request.title }}"
API="${GITEA_URL}/api/v1/repos/${REPO}"
MAX_TRIES=240 # 2h = 240 × 30s
TRIES=0
echo "⏳ Attente du commentaire LGTM sur la PR #${PR_NUMBER}..."
echo " Reply 'LGTM' sur la PR pour merger."
# Marquer l'ancien commentaire du workflow comme point de départ
LAST_ID=$(curl -s -H "Authorization: token ${GT_TOKEN}" \
"${API}/issues/${PR_NUMBER}/comments" | \
python3 -c "import json,sys; cs=json.load(sys.stdin); print(cs[-1]['id'] if cs else 0)" 2>/dev/null || echo 0)
while [ $TRIES -lt $MAX_TRIES ]; do
sleep 30
TRIES=$((TRIES + 1))
# Récupère les nouveaux commentaires
COMMENTS=$(curl -s -H "Authorization: token ${GT_TOKEN}" \
"${API}/issues/${PR_NUMBER}/comments?since_id=${LAST_ID}")
if echo "$COMMENTS" | grep -qi '"body": *"LGTM"'; then
echo ""
echo "✅ LGTM reçu ! Merge de la PR..."
curl -s -X POST \
-H "Authorization: token ${GT_TOKEN}" \
-H "Content-Type: application/json" \
-d "{\"Do\":\"merge\",\"MergeTitleField\":\"${PR_TITLE}\"}" \
"${API}/pulls/${PR_NUMBER}/merge"
echo ""
echo "✅ PR mergée."
exit 0
fi
if echo "$COMMENTS" | grep -qi '"body": *"KO"'; then
echo ""
echo "❌ KO reçu. PR bloquée."
exit 1
fi
# Petit heartbeat toutes les 2 min
if [ $((TRIES % 4)) -eq 0 ]; then
echo " ⏳ Toujours en attente... (${TRIES}/240, $(date +%H:%M))"
fi
done
echo "❌ Timeout — pas de LGTM reçu après 2h."
exit 1