Skip to content

Commit 426e5a9

Browse files
ci: run instanode-web e2e-prod payment/UI suite on every API build (deploy) (#275)
Adds a dispatch-e2e-prod job that fires the e2e-prod-from-deploy repository_dispatch to instanode-web on every push to master. instanode-web's e2e-prod.yml already listens for it — installs Chromium and drives the full live-ui-payment flow (free cohort → UI Upgrade → Razorpay TEST checkout → card → assert Pro) + the live suite against the just-deployed prod. push-to-master only (the full leg mints a real TEST-mode subscription; we run it on the deploy, not on every PR). Closes the 'payment/UI test runs on every API build' gap. Co-authored-by: Claude <noreply@anthropic.com>
1 parent 3d6dc38 commit 426e5a9

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

.github/workflows/ci.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,3 +320,62 @@ jobs:
320320
if [ "$http_code" != "204" ]; then
321321
echo "::warning::cross-repo dispatch returned $http_code (expected 204). Not failing the api PR yet."
322322
fi
323+
324+
# Cross-repo payment/UI integration gate. The api owns the cohort test-mode
325+
# checkout routing + the Razorpay webhook tier-elevation — an api change that
326+
# breaks them would not trigger instanode-web CI on its own, so the
327+
# browser-level money-funnel regression could ship despite green api units.
328+
#
329+
# On every push to master (an API "build"/deploy) this fires a
330+
# repository_dispatch that instanode-web's e2e-prod.yml listens for
331+
# (`e2e-prod-from-deploy`): it installs Chromium and drives the full
332+
# live-ui-payment flow (free cohort → UI Upgrade → Razorpay TEST checkout →
333+
# card → assert Pro) against the just-deployed prod, plus the rest of the live
334+
# suite. push-to-master only (NOT per-PR): the full leg mints a real TEST-mode
335+
# subscription, so we run it on the deploy, not on every PR push.
336+
#
337+
# Auth: REPO_ACCESS_TOKEN must have `repo` scope on instanode-web (same secret
338+
# as the auth-contract dispatch above). Missing → soft-skip so api CI stays
339+
# green during rollout.
340+
dispatch-e2e-prod:
341+
name: Trigger instanode-web e2e-prod payment/UI suite (post-deploy)
342+
runs-on: ubuntu-latest
343+
needs: build-and-test
344+
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
345+
steps:
346+
- name: Fire e2e-prod-from-deploy repository_dispatch on instanode-web
347+
env:
348+
DISPATCH_TOKEN: ${{ secrets.REPO_ACCESS_TOKEN }}
349+
SHA: ${{ github.sha }}
350+
TRIGGER: ${{ github.event_name }}
351+
run: |
352+
set -euo pipefail
353+
if [ -z "${DISPATCH_TOKEN:-}" ]; then
354+
echo "::warning::REPO_ACCESS_TOKEN not set; skipping cross-repo e2e-prod dispatch. " \
355+
"Provision the secret (with \`repo\` scope on instanode-web) to run the payment/UI suite on every API build."
356+
exit 0
357+
fi
358+
# SHA is a 40-char hex from github.sha — repo-controlled. Validate shape.
359+
case "$SHA" in
360+
[0-9a-f]*) ;;
361+
*) echo "::error::unexpected SHA shape: $SHA"; exit 1 ;;
362+
esac
363+
case "$TRIGGER" in
364+
push) ;;
365+
*) echo "::error::unexpected TRIGGER: $TRIGGER"; exit 1 ;;
366+
esac
367+
payload=$(printf '{"event_type":"e2e-prod-from-deploy","client_payload":{"api_sha":"%s","trigger":"%s","api_url":"https://api.instanode.dev","web_origin":"https://instanode.dev"}}' \
368+
"$SHA" "$TRIGGER")
369+
echo "Dispatching to InstaNode-dev/instanode-web: $payload"
370+
http_code=$(curl -sS -o /tmp/dispatch_e2e.out -w '%{http_code}' \
371+
-X POST \
372+
-H "Accept: application/vnd.github+json" \
373+
-H "Authorization: Bearer ${DISPATCH_TOKEN}" \
374+
-H "X-GitHub-Api-Version: 2022-11-28" \
375+
https://api.github.com/repos/InstaNode-dev/instanode-web/dispatches \
376+
-d "$payload")
377+
echo "dispatch response: HTTP $http_code"
378+
cat /tmp/dispatch_e2e.out || true
379+
if [ "$http_code" != "204" ]; then
380+
echo "::warning::e2e-prod dispatch returned $http_code (expected 204). Not failing the api build yet."
381+
fi

0 commit comments

Comments
 (0)