#!/bin/bash # Hermes verification: tabatago iPhone deploy workflow PASS=0 FAIL=0 REPO=/opt/data/projects/tabatago WF="$REPO/.gitea/workflows/pr-iphone-deploy.yml" DOCS="$REPO/docs/ci-cd-setup.md" pass() { PASS=$((PASS + 1)); echo "PASS"; } fail() { FAIL=$((FAIL + 1)); echo "FAIL"; } echo "=== Hermes Verify: iPhone Deploy Workflow ===" echo -n "[1] Workflow exists: " test -f "$WF" && pass || fail echo -n "[2] Workflow has pull_request trigger: " grep -q 'pull_request:' "$WF" && pass || fail echo -n "[3] Workflow has build-deploy job: " grep -q 'build-deploy' "$WF" && pass || fail echo -n "[4] Workflow has wait-approval job: " grep -q 'wait-approval' "$WF" && pass || fail echo -n "[5] runs-on macos: " grep -q 'runs-on: macos' "$WF" && pass || fail echo -n "[6] xcodegen generate: " grep -q 'xcodegen generate' "$WF" && pass || fail echo -n "[7] TabataGo scheme: " grep -q 'TabataGo' "$WF" && pass || fail echo -n "[8] IPHONE_UDID secret: " grep -q 'IPHONE_UDID' "$WF" && pass || fail echo -n "[9] GITEA_TOKEN secret: " grep -q 'GITEA_TOKEN' "$WF" && pass || fail echo -n "[10] LGTM polling: " grep -q 'LGTM' "$WF" && pass || fail echo -n "[11] Merge logic: " grep -qi 'merge' "$WF" && pass || fail echo -n "[12] Docs exist: " test -f "$DOCS" && pass || fail echo -n "[13] Docs covers macOS: " grep -q 'macOS' "$DOCS" && pass || fail echo -n "[14] Docs covers IPHONE_UDID: " grep -q 'IPHONE_UDID' "$DOCS" && pass || fail echo -n "[15] Docs covers GITEA_TOKEN: " grep -q 'GITEA_TOKEN' "$DOCS" && pass || fail echo -n "[16] Docs covers Troubleshooting: " grep -q 'Troubleshooting' "$DOCS" && pass || fail echo -n "[17] PR open on Gitea: " PR_CHECK=$(python3 -c " import subprocess, json, urllib.request remote = subprocess.run(['git','-C','$REPO','remote','get-url','origin'], capture_output=True, text=True).stdout.strip() token = remote.split('@')[0].replace('https://', '') req = urllib.request.Request( 'https://gitea.1000co.fr/api/v1/repos/millianlmx/tabatago/pulls?state=open&head=ci/iphone-deploy-workflow', headers={'Authorization': f'token {token}'} ) with urllib.request.urlopen(req) as resp: prs = json.loads(resp.read()) pr = prs[0] print(f'{pr[\"number\"]}|{pr[\"mergeable\"]}|{pr[\"base\"][\"ref\"]}') " 2>/dev/null) PR_NUM=$(echo "$PR_CHECK" | cut -d'|' -f1) if [ -n "$PR_NUM" ]; then echo "PASS (##$PR_NUM)" && PASS=$((PASS + 1)) else echo "FAIL" && FAIL=$((FAIL + 1)) fi echo -n "[18] PR mergeable: " MERGEABLE=$(echo "$PR_CHECK" | cut -d'|' -f2) if [ "$MERGEABLE" = "True" ]; then echo "PASS" && PASS=$((PASS + 1)) else echo "FAIL (got: $MERGEABLE)" && FAIL=$((FAIL + 1)) fi echo -n "[19] PR targets main: " BASE=$(echo "$PR_CHECK" | cut -d'|' -f3) if [ "$BASE" = "main" ]; then echo "PASS" && PASS=$((PASS + 1)) else echo "FAIL (got: $BASE)" && FAIL=$((FAIL + 1)) fi echo "=========================================" echo "Results: $PASS passed, $FAIL failed" if [ "$FAIL" -gt 0 ]; then exit 1; else echo "=== ALL VERIFICATIONS PASSED ==="; fi