Files
tabatago/.gitea/workflows/pr-iphone-deploy.yml
millianlmx 7a02a8949e
Some checks failed
PR → iPhone → LGTM / Build & Install on iPhone (pull_request) Has been cancelled
PR → iPhone → LGTM / Wait for LGTM comment (pull_request) Has been cancelled
fix: gitea→github context, add ios-deploy, remove -k
2026-06-26 21:24:47 +00:00

152 lines
5.7 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 → iPhone → Wait LGTM → Merge
# =============================================================================
# Chaque PR déclenche ce workflow :
# 1. Build l'app sur le Runner Mac
# 2. Installe sur l'iPhone (OTA via réseau local ou VPN)
# 3. Poste un commentaire sur la PR
# 4. Attend un commentaire "LGTM" de Millian
# 5. Merge automatique
# =============================================================================
name: PR → iPhone → 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 & Install on iPhone
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 ios-deploy
run: brew install ios-deploy
- name: Build & Install on iPhone
env:
IPHONE_UDID: ${{ secrets.IPHONE_UDID }}
run: |
cd tabatago-swift
# Build for device
xcodebuild build \
-scheme TabataGo \
-sdk iphoneos \
-destination "platform=iOS,id=${IPHONE_UDID}" \
-configuration Debug \
-allowProvisioningUpdates \
-derivedDataPath ../build \
CODE_SIGN_STYLE=Automatic \
2>&1 | tail -20
# Install on connected iPhone
ios-deploy --bundle ../build/Build/Products/Debug-iphoneos/TabataGo.app --id ${IPHONE_UDID}
echo "✅ App built for iPhone (UDID: ${IPHONE_UDID})"
- 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 sur ton iPhone.\\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