Skip to content

Conversation

@transphorm
Copy link
Member

@transphorm transphorm commented Sep 30, 2025

Summary by CodeRabbit

  • New Features

    • Added in-app feedback provider.
    • Introduced a new photo picker screen on Android.
  • Documentation

    • Updated README and app docs; added Aadhaar references and installation guidance.
    • Removed NFC implementation sections and related checklists.
  • Chores

    • Overhauled CI/CD: broader PR triggers, caching for builds, refined mobile analysis, deploy, and E2E workflows.
    • Expanded npm publish to additional packages; added license header pre-commit check.
    • Updated tooling and configs (Node 22.12, Yarn settings, ignore rules).
  • Refactor

    • Removed legacy Android passport reader components and NFC-related UI flows.

@transphorm transphorm changed the base branch from main to dev September 30, 2025 18:57
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 30, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

Removes the legacy Android passport/NFC reader module and associated resources; updates Android app build and manifest; adds a FeedbackProvider in App.tsx; broad CI/CD workflow overhauls (new caches, concurrency, triggers, deployment paths, demo/workspace pipelines); adds composite GitHub Actions; updates repo configs (.nvmrc, yarn, ignore rules, security scanners); adjusts docs.

Changes

Cohort / File(s) Summary
Repository configs & docs
/.coderabbit.yaml, /.cursorignore, /.cursorrules, /.cursor/rules/technical-specification.mdc, /.gitignore, /.gitleaks.toml, /.gitleaksignore, /.gitguardian.yml, /.husky/pre-commit, /.nvmrc, /.prettierignore, /.watchmanconfig, /.yarnrc.yml, /AGENTS.md, /README.md, /app/AGENTS.md, /app/README.md, /.vscode/tasks.json
Extend auto-review branches; ignore path updates and private module exception; remove NFC sections and a large tech spec; enhance secret scanners; add license header pre-commit and VSCode tasks; bump Node to 22.12.0; add Prettier ignore; Yarn config; doc updates incl. Aadhaar; cleanup formatting.
GitHub Actions – composite actions
.github/actions/cache-built-deps/action.yml, .github/actions/clone-android-passport-nfc-reader/action.yml, .github/actions/mobile-setup/action.yml
New action to cache built JS artifacts; new action to conditionally clone private android-passport-nfc-reader; update mobile-setup to adjust Yarn flags and add Bundler install.
GitHub Actions – workflows
.github/workflows/* (including circuits*.yml, common-ci.yml, contracts.yml, mobile-*.yml, npm-publish.yml, qrcode-sdk-ci.yml, web.yml, workspace-ci.yml, mobile-sdk-demo-ci.yml)
Shift to PR-based triggers (add staging), add concurrency, caching (Yarn/build artifacts), Node version sanitation, runner changes, split/parallel jobs, enhanced Android/iOS setup, deployment flow refactors (test_mode, WIF, version PRs), new demo/workspace CI.
Android legacy module removal
/app/android/android-passport-reader/**
Delete entire passport/NFC reader module: Gradle config, manifests, activities/fragments, NFC utilities, certificate/trust store code, resources, tests, and wrapper scripts.
Android app build and manifest
/app/android/app/build.gradle, /app/android/app/src/main/AndroidManifest.xml
Java/Kotlin target to 17; versionCode 102, versionName 2.6.8; packaging/jni updates; add AndroidX activity deps; bump jmrtd to 0.7.35; manifest: disable native lib extraction, remove forced portrait, add PhotoPickerActivity and a GMS ModuleDependencies service.
App component tree
/app/App.tsx
Wrap AppNavigation with a new FeedbackProvider.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Dev as Developer
  participant GH as GitHub Actions
  participant Cache as cache-built-deps
  participant Repo as Repo (monorepo)
  participant Mobile as Mobile build jobs
  participant Private as android-passport-nfc-reader

  Dev->>GH: Open PR (dev/staging/main)
  GH->>Repo: Checkout
  GH->>GH: Concurrency group start
  GH->>Cache: Restore built deps (common, mobile-sdk-alpha)
  alt cache hit
    Cache-->>GH: cache-hit=true
  else cache miss
    GH->>Repo: Build dependencies (workspaces)
    GH->>Cache: Save built deps
  end
  par iOS build
    GH->>Mobile: Setup Node/Yarn/Ruby and cache
    GH->>Mobile: Validate workspace/schemes
    Mobile-->>GH: Build app (Debug simulator)
  and Android build
    GH->>Mobile: Setup Node/Yarn/JDK/NDK and cache
    GH->>Private: Clone internal module (if PAT present)
    Mobile-->>GH: Build APK (Debug)
  end
  GH-->>Dev: Status (artifacts, checks)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

Suggested labels

codex

Suggested reviewers

Poem

Goodbye, NFC—your tag has sailed,
Caches primed, our workflows scaled.
New bots hum softly in the queue,
Staging wakes to builds anew.
Feedback wraps the app with care—
Version bumped, we’re light as air.
Onward, CI—deploy if you dare! 🚀

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch justin/fix-staging-merge

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 15a84e1 and c9ee495.

⛔ Files ignored due to path filters (26)
  • app/Gemfile.lock is excluded by !**/*.lock
  • app/android/android-passport-reader/app/src/main/res/font/roboto_bold.ttf is excluded by !**/*.ttf
  • app/android/android-passport-reader/app/src/main/res/font/roboto_bold_italic.ttf is excluded by !**/*.ttf
  • app/android/android-passport-reader/app/src/main/res/font/roboto_italic.ttf is excluded by !**/*.ttf
  • app/android/android-passport-reader/app/src/main/res/font/roboto_medium_italic.ttf is excluded by !**/*.ttf
  • app/android/android-passport-reader/app/src/main/res/font/roboto_regular.ttf is excluded by !**/*.ttf
  • app/android/android-passport-reader/app/src/main/res/mipmap-hdpi/ic_launcher.png is excluded by !**/*.png
  • app/android/android-passport-reader/app/src/main/res/mipmap-hdpi/ic_launcher_round.png is excluded by !**/*.png
  • app/android/android-passport-reader/app/src/main/res/mipmap-mdpi/ic_launcher.png is excluded by !**/*.png
  • app/android/android-passport-reader/app/src/main/res/mipmap-mdpi/ic_launcher_round.png is excluded by !**/*.png
  • app/android/android-passport-reader/app/src/main/res/mipmap-xhdpi/ic_launcher.png is excluded by !**/*.png
  • app/android/android-passport-reader/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png is excluded by !**/*.png
  • app/android/android-passport-reader/app/src/main/res/mipmap-xxhdpi/ic_launcher.png is excluded by !**/*.png
  • app/android/android-passport-reader/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png is excluded by !**/*.png
  • app/android/android-passport-reader/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png is excluded by !**/*.png
  • app/android/android-passport-reader/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png is excluded by !**/*.png
  • app/android/android-passport-reader/examples/passport_ireland.jpg is excluded by !**/*.jpg
  • app/android/android-passport-reader/gradle/wrapper/gradle-wrapper.jar is excluded by !**/*.jar
  • app/ios/Podfile.lock is excluded by !**/*.lock
  • app/src/images/512w.png is excluded by !**/*.png
  • app/src/images/blue_check.svg is excluded by !**/*.svg
  • app/src/images/icons/aadhaar.svg is excluded by !**/*.svg
  • app/src/images/icons/checkmark_gray.svg is excluded by !**/*.svg
  • app/src/images/icons/epassport.svg is excluded by !**/*.svg
  • app/src/images/logo_gray.svg is excluded by !**/*.svg
  • app/src/images/warning.svg is excluded by !**/*.svg
📒 Files selected for processing (107)
  • .coderabbit.yaml (1 hunks)
  • .cursor/rules/technical-specification.mdc (0 hunks)
  • .cursorignore (3 hunks)
  • .cursorrules (0 hunks)
  • .gitguardian.yml (1 hunks)
  • .github/actions/cache-built-deps/action.yml (1 hunks)
  • .github/actions/clone-android-passport-nfc-reader/action.yml (1 hunks)
  • .github/actions/mobile-setup/action.yml (2 hunks)
  • .github/workflows/circuits-build.yml (3 hunks)
  • .github/workflows/circuits.yml (2 hunks)
  • .github/workflows/common-ci.yml (3 hunks)
  • .github/workflows/contracts.yml (1 hunks)
  • .github/workflows/mobile-bundle-analysis.yml (4 hunks)
  • .github/workflows/mobile-ci.yml (9 hunks)
  • .github/workflows/mobile-deploy-auto.yml (5 hunks)
  • .github/workflows/mobile-deploy.yml (23 hunks)
  • .github/workflows/mobile-e2e.yml (10 hunks)
  • .github/workflows/mobile-sdk-demo-ci.yml (1 hunks)
  • .github/workflows/npm-publish.yml (5 hunks)
  • .github/workflows/qrcode-sdk-ci.yml (1 hunks)
  • .github/workflows/web.yml (2 hunks)
  • .github/workflows/workspace-ci.yml (1 hunks)
  • .gitignore (1 hunks)
  • .gitleaks.toml (1 hunks)
  • .gitleaksignore (1 hunks)
  • .husky/pre-commit (1 hunks)
  • .nvmrc (1 hunks)
  • .prettierignore (1 hunks)
  • .vscode/tasks.json (1 hunks)
  • .watchmanconfig (0 hunks)
  • .yarnrc.yml (1 hunks)
  • AGENTS.md (1 hunks)
  • README.md (4 hunks)
  • app/.eslintrc.cjs (4 hunks)
  • app/AGENTS.md (0 hunks)
  • app/App.tsx (3 hunks)
  • app/README.md (10 hunks)
  • app/android/android-passport-reader/.gitignore (0 hunks)
  • app/android/android-passport-reader/README.md (0 hunks)
  • app/android/android-passport-reader/app/.gitignore (0 hunks)
  • app/android/android-passport-reader/app/build.gradle (0 hunks)
  • app/android/android-passport-reader/app/src/androidTest/java/example/jllarraz/com/passportreader/ExampleInstrumentedTest.java (0 hunks)
  • app/android/android-passport-reader/app/src/main/AndroidManifest.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/assets/tessdata/eng.user-patterns (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/common/IntentData.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/common/PreferencesKeys.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/data/AdditionalDocumentDetails.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/data/AdditionalPersonDetails.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/data/Passport.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/data/PersonDetails.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/network/MasterListApi.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/network/MasterListService.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/ui/activities/CameraActivity.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/ui/activities/NfcActivity.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/ui/activities/SelectionActivity.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/ui/fragments/NfcFragment.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/ui/fragments/PassportDetailsFragment.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/ui/fragments/PassportPhotoFragment.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/ui/fragments/SelectionFragment.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/ui/validators/DateRule.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/ui/validators/DocumentNumberRule.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/ui/views/TouchImageView.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/utils/EACCredentials.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/utils/KeyStoreUtils.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/utils/NFCDocumentTag.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/utils/PassportNFC.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/utils/PassportNfcUtils.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/example/jllarraz/com/passportreader/utils/StringUtils.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/org/jmrtd/FeatureStatus.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/org/jmrtd/JMRTDSecurityProvider.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/org/jmrtd/MRTDTrustStore.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/org/jmrtd/VerificationStatus.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/org/jmrtd/cert/CSCAMasterList.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/org/jmrtd/cert/KeyStoreCertStoreParameters.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/org/jmrtd/cert/KeyStoreCertStoreSpi.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/org/jmrtd/cert/PKDCertStoreParameters.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/java/org/jmrtd/cert/PKDMasterListCertStoreParameters.kt (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable-v24/ic_launcher_foreground.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable/ic_check_circle_outline.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable/ic_close_circle_outline.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable/ic_help_circle_outline.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable/ic_launcher_background.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable/ic_passport.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable/ic_person.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable/toggle_background_border.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable/toggle_background_left.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable/toggle_background_right.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/drawable/toggle_text_color.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/font/bold.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/font/medium.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/font/regular.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/layout/activity_nfc.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/layout/activity_photo.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/layout/fragment_nfc.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/layout/fragment_passport_details.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/layout/fragment_photo.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/layout/fragment_selection.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (0 hunks)
  • app/android/android-passport-reader/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (0 hunks)
  • app/android/android-passport-reader/app/src/test/java/example/jllarraz/com/passportreader/ExampleUnitTest.java (0 hunks)
  • app/android/android-passport-reader/build.gradle (0 hunks)
  • app/android/android-passport-reader/gradle.properties (0 hunks)
  • app/android/android-passport-reader/gradlew (0 hunks)
  • app/android/android-passport-reader/gradlew.bat (0 hunks)
  • app/android/android-passport-reader/settings.gradle (0 hunks)
  • app/android/app/build.gradle (5 hunks)
  • app/android/app/src/main/AndroidManifest.xml (2 hunks)
⛔ Files not processed due to max files limit (50)
  • app/android/app/src/main/java/com/proofofpassportapp/MainActivity.kt
  • app/android/app/src/main/java/com/proofofpassportapp/MainApplication.kt
  • app/android/app/src/main/java/com/proofofpassportapp/NativeLoggerBridgeModule.kt
  • app/android/app/src/main/java/com/proofofpassportapp/PhotoPickerActivity.java
  • app/android/app/src/main/java/com/proofofpassportapp/QRCodeScannerModule.java
  • app/android/app/src/main/java/com/proofofpassportapp/QRCodeScannerPackage.java
  • app/android/app/src/main/java/com/proofofpassportapp/utils/QrCodeDetectorProcessor.kt
  • app/android/app/src/main/res/values/styles.xml
  • app/android/build.gradle
  • app/android/gradle.properties
  • app/android/gradle/wrapper/gradle-wrapper.properties
  • app/android/react-native-passport-reader/android/build.gradle
  • app/android/react-native-passport-reader/android/src/main/java/io/tradle/nfc/APDULogger.kt
  • app/android/react-native-passport-reader/android/src/main/java/io/tradle/nfc/RNPassportReaderModule.kt
  • app/android/react-native-passport-reader/index.android.js
  • app/android/settings.gradle
  • app/babel.config.cjs
  • app/declarations.d.ts
  • app/docs/MOBILE_DEPLOYMENT.md
  • app/docs/TREE_SHAKING.md
  • app/docs/examples/tree-shaking/granular-circuits-example.ts
  • app/docs/examples/tree-shaking/level2-optimal-example.ts
  • app/docs/examples/tree-shaking/level3-migration-guide.ts
  • app/docs/examples/tree-shaking/level3-optimal-example.ts
  • app/docs/examples/tree-shaking/optimal-pattern-example.ts
  • app/env.sample
  • app/env.ts
  • app/fastlane/.env.secrets.example
  • app/fastlane/DEV.md
  • app/fastlane/Fastfile
  • app/fastlane/README.md
  • app/fastlane/test/helpers_test.rb
  • app/index.js
  • app/ios/.bundle/config
  • app/ios/CameraView.swift
  • app/ios/LiveMRZScannerView.swift
  • app/ios/MRZScanner.swift
  • app/ios/OpenPassport/Info.plist
  • app/ios/PassportReader.m
  • app/ios/PassportReader.swift
  • app/ios/PhotoLibraryQRScannerViewController.swift
  • app/ios/Podfile
  • app/ios/QRScannerBridge.m
  • app/ios/QRScannerBridge.swift
  • app/ios/Self.xcodeproj/project.pbxproj
  • app/ios/SelfAnalytics.swift
  • app/ios/scripts/pod-install-with-cache-fix.sh
  • app/jest.config.cjs
  • app/jest.setup.js
  • app/metro.config.cjs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@transphorm transphorm merged commit 8c6067a into dev Sep 30, 2025
0 of 2 checks passed
@transphorm transphorm deleted the justin/fix-staging-merge branch September 30, 2025 18:58
@gitguardian
Copy link

gitguardian bot commented Sep 30, 2025

⚠️ GitGuardian has uncovered 11 secrets following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

🔎 Detected hardcoded secrets in your pull request
GitGuardian id GitGuardian status Secret Commit Filename
20511340 Triggered Generic Private Key ec732da common/src/mock_certificates/sha256_rsa_130689_4096/mock_csca.key View secret
20511341 Triggered Generic Private Key ec732da common/src/mock_certificates/sha1_rsa_64321_4096/mock_csca.key View secret
20511342 Triggered Generic Private Key ec732da common/src/mock_certificates/sha256_rsa_107903_4096/mock_dsc.key View secret
20511343 Triggered Generic Private Key ec732da common/src/constants/mockCertificates.ts View secret
20511344 Triggered Generic Private Key ec732da common/src/mock_certificates/sha256_rsa_130689_4096/mock_dsc.key View secret
21022104 Triggered Generic Private Key 2df4dc4 common/src/mock_certificates/aadhaar/mockAadhaarCert.ts View secret
20511345 Triggered Generic Private Key ec732da common/src/mock_certificates/sha256_rsa_56611_4096/mock_dsc.key View secret
20511346 Triggered Generic Private Key ec732da common/src/mock_certificates/sha256_rsa_107903_4096/mock_csca.key View secret
20511347 Triggered Generic Private Key ec732da common/src/constants/mockCertificates.ts View secret
20511348 Triggered Generic Private Key ec732da common/src/mock_certificates/sha256_rsa_122125_4096/mock_csca.key View secret
20511349 Triggered Generic Private Key ec732da common/src/mock_certificates/sha256_rsa_56611_4096/mock_csca.key View secret
🛠 Guidelines to remediate hardcoded secrets
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secrets safely. Learn here the best practices.
  3. Revoke and rotate these secrets.
  4. If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.

To avoid such incidents in the future consider


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants