feat(mobile): native E2E journeys, dual-platform CI, dependency-compat & SBOM/provenance (#987-#990) - #1010
Merged
llinsss merged 1 commit intoAug 28, 2026
Conversation
…M/provenance Closes DogStark#987, DogStark#988, DogStark#989, DogStark#990. - DogStark#987: Detox journeys for auth, app lock, QR, offline queue and payments under e2e/journeys/ with shared helpers and deterministic backend fixtures (synthetic data only). - DogStark#988: .github/workflows/native-build.yml builds signing-free iOS simulator + Android debug artifacts with Gradle/CocoaPods caching. - DogStark#989: .github/workflows/dependency-compat.yml + check-dependency-compat.ts enforce the Expo/React Native support matrix, expo-doctor and expo install --check. - DogStark#990: .github/workflows/sbom-provenance.yml publishes per-platform CycloneDX SBOM, checksums, build-inputs manifest and signed Sigstore provenance/SBOM attestations for releases. - Docs: docs/NATIVE_CI_AND_SUPPLY_CHAIN.md; npm scripts e2e:journeys, deps:check, sbom.
|
@willi-d7 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Hardens the mobile pipeline across four areas, one per issue. All work is based on the latest
main, narrowly scoped, and uses synthetic data only.closes #987 — Detox safety-critical journeys
New specs under
e2e/journeys/(picked up automatically by the existinge2e-detox.ymlon both the iOS simulator and the Android emulator):auth.test.ts— login success, invalid credentials, offline, background/foreground session persistenceappLock.test.ts— lock on resume, correct PIN, wrong PIN, biometric-permission-denied fallbackqrScan.test.ts— valid pet code, camera-permission-denied, malformed payload, unknown code (404)offlineQueue.test.ts— queue while offline, survive background/foreground, idempotent replay on reconnectpayments.test.ts— successful charge, declined card, offline, timeout + idempotent retry (same Idempotency-Key, no double charge)Support:
e2e/support/journeyHelpers.ts(offline toggle, background/foreground, alert dismissal, best-effort probes) ande2e/fixtures/backendFixtures.ts(deterministic canned responses, includingfailTimes/delayMsfor retry and timeout paths).Flows whose
testIDs are not yet wired use theisVisible/tapIfVisibleprobes — the same pattern already used inonboarding.test.ts— so each spec characterizes current behavior without failing the suite. Tighten to hard assertions as screens gain test IDs.Privacy: only synthetic constants — fake emails, a fake
4242…card, opaquefixture-…-DO-NOT-LOGtokens. No health records, contact details, precise location, wallet material or raw tokens are typed, logged, screenshotted or persisted.closes #988 — Native build CI
.github/workflows/native-build.yml— builds signing-free debug artifacts so CocoaPods / Gradle / manifest / native-module breakages surface on every PR (JS-only checks miss these):expo prebuild→./gradlew assembleDebug, Gradle cache, APK + failure logs uploadedexpo prebuild→pod install→xcodebuild … CODE_SIGNING_ALLOWED=NOfor the simulator, CocoaPods cache, build log uploadedcloses #989 — Dependency compatibility checks
.github/workflows/dependency-compat.ymlruns on changes topackage.json, the lockfile or native config and executesscripts/check-dependency-compat.ts:expo/react-native/reactmatch theSUPPORTEDmatrix in the script (Expo SDK 56 / RN 0.85.3 / React 19.2.7)npx expo-doctornpx expo install --checkAn intentional upgrade must bump
SUPPORTEDin the same PR with iOS/Android build evidence. Local:npm run deps:check.closes #990 — SBOM & provenance for releases
.github/workflows/sbom-provenance.ymlruns per platform (ios,android) onrelease: published/workflow_dispatchand publishes:sbom.cdx.json— CycloneDX SBOM (--omit dev)checksums.sha256— SHA-256 of the SBOM and build-inputs manifestbuild-inputs.json— commit, ref, runner, tool versions, Expo SDK / RN version, EAS profile, timestampactions/attest-build-provenance) + signed SBOM attestation (actions/attest-sbom), keyless SigstoreArtifacts uploaded (90-day retention) and attached to the GitHub Release. No secrets or tokens are written to any of these files. Local:
npm run sbom.Acceptance criteria
isVisiblepattern).…-DO-NOT-LOGmarkers; SBOM/provenance files carry no secrets.docs/NATIVE_CI_AND_SUPPLY_CHAIN.md, new npm scripts (e2e:journeys,deps:check,sbom).Notes / follow-ups
detoxUseFixtures/detoxStartAt/detoxQrPayload/detoxAppLock*launch args are the contract the journeys expect; wire them into the debug app harness to move probes to hard assertions.expo prebuildto succeed in CI; ifios//android/are committed later, drop the prebuild step.native-build.ymlande2e-detox.ymlruns on this PR.