From 0353bb0aef03602fc2bc03863b856f161072c266 Mon Sep 17 00:00:00 2001 From: Justin Hernandez Date: Tue, 26 Aug 2025 08:11:37 -0700 Subject: [PATCH 1/8] update lock files --- app/Gemfile.lock | 8 +-- app/ios/Podfile.lock | 130 +++++++++++++++++++++---------------------- 2 files changed, 69 insertions(+), 69 deletions(-) diff --git a/app/Gemfile.lock b/app/Gemfile.lock index a79935bc4..93cb36d3e 100644 --- a/app/Gemfile.lock +++ b/app/Gemfile.lock @@ -25,7 +25,7 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.4.0) - aws-partitions (1.1150.0) + aws-partitions (1.1151.0) aws-sdk-core (3.230.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) @@ -256,17 +256,17 @@ GEM trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.4.1) + rexml (3.4.2) rouge (3.28.0) ruby-macho (2.5.1) ruby2_keywords (0.0.5) rubyzip (2.4.1) securerandom (0.4.1) security (0.1.5) - signet (0.20.0) + signet (0.21.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) - jwt (>= 1.5, < 3.0) + jwt (>= 1.5, < 4.0) multi_json (~> 1.10) simctl (1.6.10) CFPropertyList diff --git a/app/ios/Podfile.lock b/app/ios/Podfile.lock index b284adeec..a79500da7 100644 --- a/app/ios/Podfile.lock +++ b/app/ios/Podfile.lock @@ -2192,7 +2192,7 @@ SPEC CHECKSUMS: GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 hermes-engine: ea92f60f37dba025e293cbe4b4a548fd26b610a0 lottie-ios: a881093fab623c467d3bce374367755c272bdd59 - lottie-react-native: d97e225bb686cf6ddda429229b370faa9599d584 + lottie-react-native: b0dc69202923f4baf341b360ab636f742b84a36a Mixpanel-swift: e9bef28a9648faff384d5ba6f48ecc2787eb24c0 nanopb: 438bc412db1928dac798aa6fd75726007be04262 NFCPassportReader: 48873f856f91215dbfa1eaaec20eae639672862e @@ -2206,80 +2206,80 @@ SPEC CHECKSUMS: RCTTypeSafety: 28e24a6e44f5cbf912c66dde6ab7e07d1059a205 React: c2830fa483b0334bda284e46a8579ebbe0c5447e React-callinvoker: 4aecde929540c26b841a4493f70ebf6016691eb8 - React-Core: 9c059899f00d46b5cec3ed79251f77d9c469553d - React-CoreModules: 9fac2d31803c0ed03e4ddaa17f1481714f8633a5 - React-cxxreact: a979810a3ca4045ceb09407a17563046a7f71494 + React-Core: 32a581847d74ce9b5f51d9d11a4e4d132ad61553 + React-CoreModules: f53e0674e1747fa41c83bc970e82add97b14ad87 + React-cxxreact: 86f3b1692081fd954a0cb27cc90d14674645b64b React-debug: 7e346b6eeacd2ee1118a0ee7d39f613b428b4be8 - React-defaultsnativemodule: 02b3b73698aca4f8ebfe03e3802bbb8eafb30d6c - React-domnativemodule: 90e3bc5a3e57b367b9787c78a39d7e8dc15cb3b0 - React-Fabric: 7e3f79f77929338739d4f6936ecc12cca23644ac - React-FabricComponents: ba910350959d665f6335bdf6cf6347e99661cdac - React-FabricImage: df5337c9b500542ce744c98327625c420dcd1256 + React-defaultsnativemodule: 5ab6844adce01f0e52671eaa6d806e2214bbfc44 + React-domnativemodule: 448609757e37684cf407cda13d1f6c47deec44cf + React-Fabric: bfef5f9db01f81b73eed5a58fe1e46949c0c665e + React-FabricComponents: 4e845f93a35050a7c0f9dac7805caa62552be939 + React-FabricImage: 3478af0ed02c8728680b23f2dd890e59069856ea React-featureflags: 4c45b3c06f9a124d2598aff495bfc59470f40597 - React-featureflagsnativemodule: daee66dc32dd85a16bfd912911cc33fc7d50542d - React-graphics: a2e6209991a191c94405a234460e05291fa986b9 - React-hermes: 2069b08e965e48b7f8aa2c0ca0a2f383349ed55d - React-idlecallbacksnativemodule: 8e1d156b4e47cc6a5f80f53869131417979f7c64 - React-ImageManager: 17772f78d93539a1a10901b5f537031772fa930c - React-jserrorhandler: 62af5111f6444688182a5850d4b584cbc0c5d6a8 - React-jsi: d68f1d516e5120a510afe356647a6a1e1f98f2db - React-jsiexecutor: 6366a08a0fc01c9b65736f8deacd47c4a397912a - React-jsinspector: e21448249ea4a247f1b5786089e3cfe63d5c0111 - React-jsitracing: dab78a74a581f63320604c9de4ab9039209e0501 - React-logger: d79b704bf215af194f5213a6b7deec50ba8e6a9b - React-Mapbuffer: 42c779748af341935a63ad8831723b8cb1e97830 - React-microtasksnativemodule: fc15e6b9e8cc5a99d1cfa0f31c454c4c3de4e7ae - react-native-app-auth: 149f01d2c824758453c9e7815217ded451974683 - react-native-biometrics: 352e5a794bfffc46a0c86725ea7dc62deb085bdc - react-native-cloud-storage: 9343984544441a394b72d79de845640e3abfbc45 - react-native-get-random-values: 21325b2244dfa6b58878f51f9aa42821e7ba3d06 - react-native-netinfo: f0a9899081c185db1de5bb2fdc1c88c202a059ac - react-native-nfc-manager: 5213321cf6c18d879c8092c0bf56806b771ec5ac - react-native-safe-area-context: 657def25b5590dfbde705aec2925b06725f27450 - react-native-sqlite-storage: f6d515e1c446d1e6d026aa5352908a25d4de3261 + React-featureflagsnativemodule: 1c482a7ea0e69330cc59895192a73a2f6f737c33 + React-graphics: eb61d404819486a2d9335c043a967a0c4b8ca743 + React-hermes: cad69ee9a53870cc38e5386889aa7ea81c75b6a1 + React-idlecallbacksnativemodule: 1e3f0212792ace82cc6f3b91f53f5d034f533acc + React-ImageManager: 6652c4cc3de260b5269d58277de383cacd53a234 + React-jserrorhandler: 552c5fcd2ee64307c568734b965ea082e1be25cf + React-jsi: bc1f6073e203fb540edd6d26f926ad041809b443 + React-jsiexecutor: 1e8fc70dd9614c3e9d5c3c876b2ea3cd1d931ee4 + React-jsinspector: 11cf0ade960351b76217a16e31418b9d7f881513 + React-jsitracing: e512a1023a25de831b51be1c773caa6036125a44 + React-logger: 80d87daf2f98bf95ab668b79062c1e0c3f0c2f8a + React-Mapbuffer: b2642edd9be75d51ead8cda109c986665eae09cf + React-microtasksnativemodule: 94f7e35c4984282f04f946fb1be1d008aff4bdf0 + react-native-app-auth: eb42594042a25455119a8c57194b4fd25b9352f4 + react-native-biometrics: 43ed5b828646a7862dbc7945556446be00798e7d + react-native-cloud-storage: eeffe84e54f693bd2c6cdda098f006039ee8bdf9 + react-native-get-random-values: d16467cf726c618e9c7a8c3c39c31faa2244bbba + react-native-netinfo: cec9c4e86083cb5b6aba0e0711f563e2fbbff187 + react-native-nfc-manager: a280ef94cd4871a471b052f0dc70381cf1223049 + react-native-safe-area-context: 827032edf27079702cbd006f11dc79451a2d744b + react-native-sqlite-storage: 0c84826214baaa498796c7e46a5ccc9a82e114ed React-nativeconfig: 31072ab0146e643594f6959c7f970a04b6c9ddd0 - React-NativeModulesApple: f49bb0befd8650ac3ff8fc2684072b16c09bf478 + React-NativeModulesApple: 356d0eb7e3b79603e9d611cd3bac658a998c71db React-perflogger: 59e1a3182dca2cee7b9f1f7aab204018d46d1914 - React-performancetimeline: 3d70a278cc3344def506e97aff3640e658656110 + React-performancetimeline: 2bf8625ff44f482cba84e48e4ab21dee405d68cd React-RCTActionSheet: d80e68d3baa163e4012a47c1f42ddd8bcd9672cc - React-RCTAnimation: bde981f6bd7f8493696564da9b3bd05721d3b3cc - React-RCTAppDelegate: 0176615c51476c88212bf3edbafb840d39ea7631 - React-RCTBlob: 520a0382bf8e89b9153d60e3c6293e51615834e9 - React-RCTFabric: f04c63400264f44a252ebba62dfb8cff8e5bd9b4 - React-RCTImage: 90448d2882464af6015ed57c98f463f8748be465 - React-RCTLinking: 1bd95d0a704c271d21d758e0f0388cced768d77d - React-RCTNetwork: 218af6e63eb9b47935cc5a775b7a1396cf10ff91 - React-RCTSettings: e10b8e42b0fce8a70fbf169de32a2ae03243ef6b - React-RCTText: e7bf9f4997a1a0b45c052d4ad9a0fe653061cf29 - React-RCTVibration: 5b70b7f11e48d1c57e0d4832c2097478adbabe93 + React-RCTAnimation: 051f0781709c5ed80ba8aa2b421dfb1d72a03162 + React-RCTAppDelegate: 106d225d076988b06aa4834e68d1ab754f40cacf + React-RCTBlob: 895eaf8bca2e76ee1c95b479235c6ccebe586fc6 + React-RCTFabric: 1d736a1f539ae72dcefd473f964f532a0e658309 + React-RCTImage: b73149c0cd54b641dba2d6250aaf168fee784d9f + React-RCTLinking: 23e519712285427e50372fbc6e0265d422abf462 + React-RCTNetwork: a5d06d122588031989115f293654b13353753630 + React-RCTSettings: 87d03b5d94e6eadd1e8c1d16a62f790751aafb55 + React-RCTText: 75e9dd39684f4bcd1836134ac2348efaca7437b3 + React-RCTVibration: 033c161fe875e6fa096d0d9733c2e2501682e3d4 React-rendererconsistency: 35cef4bc4724194c544b6e5e2bd9b3f7aff52082 - React-rendererdebug: 9b1a6a2d4f8086a438f75f28350ccba16b7b706a + React-rendererdebug: 4e801e9f8d16d21877565dca2845a2e56202b8c6 React-rncore: 2c7c94d6e92db0850549223eb2fa8272e0942ac2 - React-RuntimeApple: 90f1dfd648cae853afb60eb13a9579c942b2df33 - React-RuntimeCore: 355ee6b0c3a7f4e66afe44f757a7585fc6008c9e + React-RuntimeApple: ff845be41902d053f1348541a647e669a2f509f4 + React-RuntimeCore: 8b30ac97af1bdd5d2622ee2a75becf1e552b89c7 React-runtimeexecutor: ea90d8e3a9e0f4326939858dafc6ab17c031a5d3 - React-RuntimeHermes: 13d33b49355663bdbbca6719abcbc4f534f274b9 - React-runtimescheduler: 1132af91176dcc8ac566b10f7b57b10873125564 - React-utils: d1bae5ac6a5fb94a772ebfc7a7e1aba3a6706a3a - ReactCodegen: 18aa2cb03418f6ea9f318785e339128accab12f0 - ReactCommon: 1007c09a406a451ddbd874e51511aa541d6034f6 - RNCAsyncStorage: 23e56519cc41d3bade3c8d4479f7760cb1c11996 - RNCClipboard: 60fed4b71560d7bfe40e9d35dea9762b024da86d - RNDeviceInfo: feea80a690d2bde1fe51461cf548039258bd03f2 - RNFBApp: dd35ba8340b89c36e42c4c137915c01d3c792143 - RNFBMessaging: c8d34d9ad44a3258a77e548bba6dc3561af7cf2d - RNFBRemoteConfig: 7e219246c63c47f56cfe07eee1a044ed298261c8 - RNGestureHandler: a52601cdccc6213650ad4a9eb2911360d13f4447 - RNKeychain: a58690e4450434e8e900ed47032fa58c59cc5570 - RNLocalize: 06991b9c31e7a898a9fa6ddb204ce0f53a967248 - RNReactNativeHapticFeedback: 293365e4df1faef21be8b8efe22c7b217c5e695a - RNScreens: eee0beadb969b9c1c0ceca4e89744c8d69d782e0 - RNSentry: 9ecfddd2650b783586da93871ca87561c61facf8 - RNSVG: 28b61fc4856abe8eaea46794419f848986ee7e80 - segment-analytics-react-native: de13f89e52d49c1f4ed33ba86ae24f055722a643 + React-RuntimeHermes: 6a5be21d1f8a603989d8734a0021c0534df23dd9 + React-runtimescheduler: 21ad58e37e35a132f2a5ecad78e68ea7fbc8e2ba + React-utils: 0dbea1179726ad65a1b13470a3f3c73da98f4496 + ReactCodegen: 688a0970a2fc6a4481718d8ca86ff504f2a21723 + ReactCommon: 23eed247b5c8e57b59a823ce209353883da61dd2 + RNCAsyncStorage: b44e8a4e798c3e1f56bffccd0f591f674fb9198f + RNCClipboard: 4abb037e8fe3b98a952564c9e0474f91c492df6d + RNDeviceInfo: d863506092aef7e7af3a1c350c913d867d795047 + RNFBApp: 4097f75673f8b42a7cd1ba17e6ea85a94b45e4d1 + RNFBMessaging: 92325b0d5619ac90ef023a23cfd16fd3b91d0a88 + RNFBRemoteConfig: a569bacaa410acfcaba769370e53a787f80fd13b + RNGestureHandler: 4a7cce66468343e82d601e8f6cdc0148b18b6c6b + RNKeychain: 42a94ceb08a6c33db453bc34cae46458b6a14a08 + RNLocalize: 15463c4d79c7da45230064b4adcf5e9bb984667e + RNReactNativeHapticFeedback: c873497ad3f9fa80447baa18daa9474e671d24bf + RNScreens: 584a35ba1a56a628fc564216b0b6f7b9f070c282 + RNSentry: d66e96602d8e05b7789e3e095aca53a9f21dab55 + RNSVG: e3ad69848b6357587545e0a49628b1148acf082c + segment-analytics-react-native: 5c3e8a4ee6d7532a011ed862d7c7d4fb5e5303e2 Sentry: 2cbbe3592f30050c60e916c63c7f5a2fa584005e SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d - sovran-react-native: eec37f82e4429f0e3661f46aaf4fcd85d1b54f60 + sovran-react-native: a3ad3f8ff90c2002b2aa9790001a78b0b0a38594 SwiftQRScanner: e85a25f9b843e9231dab89a96e441472fe54a724 SwiftyTesseract: 1f3d96668ae92dc2208d9842c8a59bea9fad2cbb Yoga: b05994d1933f507b0a28ceaa4fdb968dc18da178 From 0c2441e8a2ae1ab2d00ff2bff4d069c02961e06a Mon Sep 17 00:00:00 2001 From: Justin Hernandez Date: Tue, 26 Aug 2025 09:30:59 -0700 Subject: [PATCH 2/8] bump and build android --- app/android/app/build.gradle | 2 +- app/fastlane/README.md | 8 ++++++++ app/version.json | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index a5fee5d18..e1f8dba73 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -121,7 +121,7 @@ android { applicationId "com.proofofpassportapp" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 85 + versionCode 88 versionName "2.6.4" manifestPlaceholders = [appAuthRedirectScheme: 'com.proofofpassportapp'] externalNativeBuild { diff --git a/app/fastlane/README.md b/app/fastlane/README.md index 1ac33565d..6f9ce936e 100644 --- a/app/fastlane/README.md +++ b/app/fastlane/README.md @@ -68,6 +68,14 @@ Push a new build to Google Play Internal Testing Push a new build to Google Play Store +### android build_only + +```sh +[bundle exec] fastlane android build_only +``` + +Build Android app without uploading + ### android deploy_auto ```sh diff --git a/app/version.json b/app/version.json index 0603e6120..ec34f8df2 100644 --- a/app/version.json +++ b/app/version.json @@ -4,7 +4,7 @@ "lastDeployed": "2025-08-08T22:35:10Z" }, "android": { - "build": 87, + "build": 88, "lastDeployed": "2025-08-20T21:30:05Z" } } From 95bdc0df097a51ba2e90c8984c6e6cbd52b7aaed Mon Sep 17 00:00:00 2001 From: Justin Hernandez Date: Tue, 26 Aug 2025 10:57:48 -0700 Subject: [PATCH 3/8] update build artifacts --- app/android/app/build.gradle | 2 +- app/ios/Self.xcodeproj/project.pbxproj | 4 ++-- app/version.json | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index e1f8dba73..e9df226f2 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -121,7 +121,7 @@ android { applicationId "com.proofofpassportapp" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 88 + versionCode 89 versionName "2.6.4" manifestPlaceholders = [appAuthRedirectScheme: 'com.proofofpassportapp'] externalNativeBuild { diff --git a/app/ios/Self.xcodeproj/project.pbxproj b/app/ios/Self.xcodeproj/project.pbxproj index 9b6fc0025..b2ccc896f 100644 --- a/app/ios/Self.xcodeproj/project.pbxproj +++ b/app/ios/Self.xcodeproj/project.pbxproj @@ -423,7 +423,7 @@ CODE_SIGN_ENTITLEMENTS = OpenPassport/OpenPassportDebug.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 149; + CURRENT_PROJECT_VERSION = 169; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = 5B29R5LYHQ; ENABLE_BITCODE = NO; @@ -564,7 +564,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = OpenPassport/OpenPassport.entitlements; - CURRENT_PROJECT_VERSION = 149; + CURRENT_PROJECT_VERSION = 169; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = 5B29R5LYHQ; FRAMEWORK_SEARCH_PATHS = ( diff --git a/app/version.json b/app/version.json index ec34f8df2..2cc2fae7e 100644 --- a/app/version.json +++ b/app/version.json @@ -1,10 +1,10 @@ { "ios": { - "build": 167, - "lastDeployed": "2025-08-08T22:35:10Z" + "build": 169, + "lastDeployed": "2025-08-026T16:35:10Z" }, "android": { - "build": 88, - "lastDeployed": "2025-08-20T21:30:05Z" + "build": 89, + "lastDeployed": "2025-08-26T16:30:05Z" } } From a1688a289f92cb4115a0d91ff6ce516e856e5328 Mon Sep 17 00:00:00 2001 From: Justin Hernandez Date: Tue, 26 Aug 2025 15:02:26 -0700 Subject: [PATCH 4/8] show generate mock document button --- app/src/screens/settings/ManageDocumentsScreen.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/src/screens/settings/ManageDocumentsScreen.tsx b/app/src/screens/settings/ManageDocumentsScreen.tsx index 84d9ae1ea..ab8e5f16f 100644 --- a/app/src/screens/settings/ManageDocumentsScreen.tsx +++ b/app/src/screens/settings/ManageDocumentsScreen.tsx @@ -314,11 +314,9 @@ const ManageDocumentsScreen: React.FC = () => { Scan New ID Document - {__DEV__ && ( - - Generate Mock Document - - )} + + Generate Mock Document + From 0174b2f22dd8d58882a435dec36b131d87be6d34 Mon Sep 17 00:00:00 2001 From: Justin Hernandez Date: Tue, 26 Aug 2025 16:00:21 -0700 Subject: [PATCH 5/8] update lock --- app/Gemfile.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/Gemfile.lock b/app/Gemfile.lock index 93cb36d3e..320626c76 100644 --- a/app/Gemfile.lock +++ b/app/Gemfile.lock @@ -26,7 +26,7 @@ GEM atomos (0.1.3) aws-eventstream (1.4.0) aws-partitions (1.1151.0) - aws-sdk-core (3.230.0) + aws-sdk-core (3.231.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) @@ -34,11 +34,11 @@ GEM bigdecimal jmespath (~> 1, >= 1.6.1) logger - aws-sdk-kms (1.110.0) - aws-sdk-core (~> 3, >= 3.228.0) + aws-sdk-kms (1.111.0) + aws-sdk-core (~> 3, >= 3.231.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.197.0) - aws-sdk-core (~> 3, >= 3.228.0) + aws-sdk-s3 (1.198.0) + aws-sdk-core (~> 3, >= 3.231.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) aws-sigv4 (1.12.1) @@ -99,7 +99,7 @@ GEM drb (2.2.3) emoji_regex (3.2.3) escape (0.0.4) - ethon (0.17.0) + ethon (0.15.0) ffi (>= 1.15.0) excon (0.112.0) faraday (1.10.4) @@ -280,8 +280,8 @@ GEM tty-screen (0.8.2) tty-spinner (0.9.3) tty-cursor (~> 0.7) - typhoeus (1.4.1) - ethon (>= 0.9.0) + typhoeus (1.5.0) + ethon (>= 0.9.0, < 0.16.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) From 9dd52b43e53f6c5db52a8dd73db5b41505a9812f Mon Sep 17 00:00:00 2001 From: Justin Hernandez Date: Tue, 26 Aug 2025 18:33:48 -0700 Subject: [PATCH 6/8] fix formatting and update failing e2e test --- .coderabbit.yaml | 2 +- .github/workflows/mobile-deploy.yml | 10 +- .github/workflows/mobile-e2e.yml | 143 +++++++++---------------- README.md | 1 - app/android/app/build.gradle | 2 +- app/ios/Podfile | 13 +++ app/ios/Self.xcodeproj/project.pbxproj | 2 + app/version.json | 2 +- 8 files changed, 74 insertions(+), 101 deletions(-) diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 933bcaf0b..af6a93bc6 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -15,7 +15,7 @@ reviews: auto_review: enabled: true drafts: false - base_branches: ["main", "dev"] + base_branches: ["main", "dev", "staging"] tools: github-checks: timeout_ms: 300000 diff --git a/.github/workflows/mobile-deploy.yml b/.github/workflows/mobile-deploy.yml index 9a067c3a0..fc0d3e951 100644 --- a/.github/workflows/mobile-deploy.yml +++ b/.github/workflows/mobile-deploy.yml @@ -117,8 +117,6 @@ jobs: echo "NODE_VERSION=$VERSION" >> "$GITHUB_ENV" echo "NODE_VERSION_SANITIZED=${VERSION//\//-}" >> "$GITHUB_ENV" - - - name: Set up Xcode if: inputs.platform != 'android' uses: maxim-lobanov/setup-xcode@v1 @@ -572,10 +570,10 @@ jobs: - uses: actions/checkout@v4 if: inputs.platform != 'ios' - - uses: 'google-github-actions/auth@v2' + - uses: "google-github-actions/auth@v2" with: - project_id: 'plucky-tempo-454713-r0' - workload_identity_provider: 'projects/852920390127/locations/global/workloadIdentityPools/gh-self/providers/github-by-repos' + project_id: "plucky-tempo-454713-r0" + workload_identity_provider: "projects/852920390127/locations/global/workloadIdentityPools/gh-self/providers/github-by-repos" service_account: "self-xyz@plucky-tempo-454713-r0.iam.gserviceaccount.com" # Fail fast: set up JDK for keytool and verify Android secrets early - name: Setup Java environment @@ -757,8 +755,6 @@ jobs: run: | echo "org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=1024m -Dfile.encoding=UTF-8" >> ${{ env.APP_PATH }}/android/gradle.properties - - - name: Install Python dependencies for Play Store upload if: inputs.platform != 'ios' run: | diff --git a/.github/workflows/mobile-e2e.yml b/.github/workflows/mobile-e2e.yml index c2a28c06d..0a2c8ce85 100644 --- a/.github/workflows/mobile-e2e.yml +++ b/.github/workflows/mobile-e2e.yml @@ -10,7 +10,7 @@ env: GH_CACHE_VERSION: v1 # Global cache version GH_GEMS_CACHE_VERSION: v1 # Ruby gems cache version # Performance optimizations - GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=4 -Dorg.gradle.parallel=true -Dorg.gradle.configureondemand=true -Dorg.gradle.caching=true + GRADLE_OPTS: -Dorg.gradle.workers.max=4 -Dorg.gradle.parallel=true -Dorg.gradle.caching=true CI: true # Disable Maestro analytics in CI MAESTRO_CLI_NO_ANALYTICS: true @@ -29,12 +29,7 @@ on: jobs: e2e-android: - # TODO: The Android E2E test job is temporarily disabled due to a recurring - # Maestro driver timeout issue in the CI environment. The emulator becomes - # unresponsive, preventing Maestro from connecting. This needs further - # investigation, but has been disabled to unblock the pipeline. - # To test locally, run `./scripts/test-e2e-local.sh android --workflow-match` - if: false + if: false # Temporarily disable Android E2E until emulator disk issue resolved concurrency: group: ${{ github.workflow }}-android-${{ github.ref }} cancel-in-progress: true @@ -61,13 +56,13 @@ jobs: - run: corepack enable - run: corepack prepare yarn@4.6.0 --activate - name: Cache Yarn dependencies - uses: actions/cache@v4 + uses: ./.github/actions/cache-yarn with: - path: .yarn/cache - key: ${{ runner.os }}-node-${{ env.NODE_VERSION_SANITIZED }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-node-${{ env.NODE_VERSION_SANITIZED }}-yarn- + cache-version: ${{ env.GH_CACHE_VERSION }}-node-${{ env.NODE_VERSION_SANITIZED }} - run: yarn install --immutable --silent + - name: Validate Maestro test file + run: | + [ -f app/tests/e2e/launch.android.flow.yaml ] || { echo "❌ Android E2E test file missing"; exit 1; } - name: Cache Maestro id: cache-maestro uses: actions/cache@v4 @@ -90,12 +85,6 @@ jobs: uses: android-actions/setup-android@v3 with: accept-android-sdk-licenses: true - - - name: Cache NDK - uses: actions/cache@v4 - with: - path: ${{ env.ANDROID_HOME }}/ndk/${{ env.ANDROID_NDK_VERSION }} - key: ${{ runner.os }}-ndk-${{ env.ANDROID_NDK_VERSION }} - name: Install NDK run: sdkmanager "ndk;${{ env.ANDROID_NDK_VERSION }}" - name: Build dependencies (outside emulator) @@ -103,29 +92,12 @@ jobs: echo "Building dependencies..." yarn workspace @selfxyz/mobile-app run build:deps --silent || { echo "❌ Dependency build failed"; exit 1; } echo "✅ Dependencies built successfully" - - name: Cache Android build - uses: actions/cache@v4 - with: - path: | - app/android/app/build - app/android/.gradle - key: ${{ runner.os }}-android-build-${{ hashFiles('app/android/**/*.gradle*', 'app/android/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-android-build- - name: Build Android APK - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: ${{ env.ANDROID_API_LEVEL }} - arch: x86_64 - target: google_apis - force-avd-creation: false - emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -camera-front none -memory 8192 -cores 4 -accel on - disable-animations: true - script: | - echo "Building Android APK..." - chmod +x app/android/gradlew - (cd app/android && ./gradlew assembleRelease --quiet --parallel --build-cache --no-configuration-cache) || { echo "❌ Android build failed"; exit 1; } - echo "✅ Android build succeeded" + run: | + echo "Building Android APK..." + chmod +x app/android/gradlew + (cd app/android && ./gradlew assembleDebug --quiet --parallel --build-cache --no-configuration-cache) || { echo "❌ Android build failed"; exit 1; } + echo "✅ Android build succeeded" - name: Install and Test on Android uses: reactivecircus/android-emulator-runner@v2 with: @@ -137,7 +109,7 @@ jobs: disable-animations: true script: | echo "Installing app on emulator..." - APK_PATH="app/android/app/build/outputs/apk/release/app-release.apk" + APK_PATH="app/android/app/build/outputs/apk/debug/app-debug.apk" [ -f "$APK_PATH" ] || { echo "❌ APK not found at $APK_PATH"; exit 1; } adb install -r "$APK_PATH" || { echo "❌ App installation failed"; exit 1; } echo "✅ App installed successfully" @@ -147,9 +119,7 @@ jobs: echo "🎭 Running Maestro tests..." export MAESTRO_DRIVER_STARTUP_TIMEOUT=180000 - maestro test tests/e2e/launch.android.flow.yaml --format junit --output app/maestro-results.xml - env: - E2E_BUILD: "true" + maestro test app/tests/e2e/launch.android.flow.yaml --format junit --output app/maestro-results.xml - name: Upload test results if: always() uses: actions/upload-artifact@v4 @@ -191,13 +161,13 @@ jobs: - run: corepack enable - run: corepack prepare yarn@4.6.0 --activate - name: Cache Yarn dependencies - uses: actions/cache@v4 + uses: ./.github/actions/cache-yarn with: - path: .yarn/cache - key: ${{ runner.os }}-node-${{ env.NODE_VERSION_SANITIZED }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-node-${{ env.NODE_VERSION_SANITIZED }}-yarn- + cache-version: ${{ env.GH_CACHE_VERSION }}-node-${{ env.NODE_VERSION_SANITIZED }} - run: yarn install --immutable --silent + - name: Validate Maestro test file + run: | + [ -f app/tests/e2e/launch.ios.flow.yaml ] || { echo "❌ iOS E2E test file missing"; exit 1; } - name: Cache Maestro id: cache-maestro uses: actions/cache@v4 @@ -226,19 +196,12 @@ jobs: xcodebuild -version echo "Xcode path:" xcode-select -p - - name: Cache Node modules - uses: actions/cache@v4 - with: - path: app/node_modules - key: ${{ runner.os }}-node-${{ env.NODE_VERSION_SANITIZED }}-${{ hashFiles('app/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-node-${{ env.NODE_VERSION_SANITIZED }}- - - name: Cache Ruby gems - uses: ./.github/actions/cache-bundler + - name: Set up Ruby + uses: ruby/setup-ruby@v1 with: - path: app/vendor/bundle - lock-file: app/Gemfile.lock - cache-version: ${{ env.GH_CACHE_VERSION }}-${{ env.GH_GEMS_CACHE_VERSION }}-ruby${{ env.RUBY_VERSION }} + ruby-version: "3.3" + bundler-cache: true + working-directory: app - name: Cache Pods uses: ./.github/actions/cache-pods with: @@ -246,33 +209,14 @@ jobs: app/ios/Pods ~/Library/Caches/CocoaPods lock-file: app/ios/Podfile.lock - - name: Cache Xcode build - uses: actions/cache@v4 - with: - path: | - app/ios/build - ~/Library/Developer/Xcode/DerivedData - ~/Library/Caches/com.apple.dt.Xcode - key: ${{ runner.os }}-xcode-${{ hashFiles('app/ios/Podfile.lock') }}-${{ hashFiles('app/ios/${{ env.IOS_PROJECT_NAME }}.xcworkspace/contents.xcworkspacedata') }} - restore-keys: | - ${{ runner.os }}-xcode-${{ hashFiles('app/ios/Podfile.lock') }}- - ${{ runner.os }}-xcode- - - name: Cache Xcode Index - uses: actions/cache@v4 - with: - path: app/ios/build/Index.noindex - key: ${{ runner.os }}-xcode-index-${{ hashFiles('app/ios/Podfile.lock') }} - restore-keys: | - ${{ runner.os }}-xcode-index- - - name: Cache iOS Simulator + - name: Cache DerivedData uses: actions/cache@v4 with: - path: | - ~/Library/Developer/CoreSimulator/Devices - ~/Library/Developer/Xcode/iOS DeviceSupport - key: ${{ runner.os }}-simulator-v1 + path: ~/Library/Developer/Xcode/DerivedData + key: ${{ runner.os }}-derived-data-${{ env.XCODE_VERSION }}-${{ hashFiles('app/ios/Podfile.lock', 'app/ios/OpenPassport.xcworkspace/contents.xcworkspacedata', 'app/ios/Self.xcworkspace/contents.xcworkspacedata') }} restore-keys: | - ${{ runner.os }}-simulator- + ${{ runner.os }}-derived-data-${{ env.XCODE_VERSION }}-${{ hashFiles('app/ios/Podfile.lock') }}- + ${{ runner.os }}-derived-data-${{ env.XCODE_VERSION }}- - name: Verify iOS Runtime run: | echo "📱 Verifying iOS Runtime availability..." @@ -286,8 +230,9 @@ jobs: - name: Install iOS dependencies run: | echo "Installing iOS dependencies..." - (cd app/ios && pod install --silent) || { echo "❌ Pod install failed"; exit 1; } - echo "✅ Pods installed successfully" + cd app/ios + echo "📦 Installing pods via centralized script…" + bundle exec bash scripts/pod-install-with-cache-fix.sh || { echo "❌ Pod install failed"; exit 1; } - name: Setup iOS Simulator run: | echo "Setting up iOS Simulator..." @@ -358,13 +303,29 @@ jobs: # Store simulator ID for later use echo "IOS_SIMULATOR_ID=$AVAILABLE_SIMULATOR" >> $GITHUB_ENV echo "IOS_SIMULATOR_NAME=$SIMULATOR_NAME" >> $GITHUB_ENV + - name: Resolve iOS workspace + run: | + WORKSPACE_OPEN="app/ios/OpenPassport.xcworkspace" + WORKSPACE_SELF="app/ios/Self.xcworkspace" + + if xcodebuild -list -workspace "$WORKSPACE_OPEN" 2>/dev/null | grep -q "OpenPassport"; then + WORKSPACE_PATH="$WORKSPACE_OPEN" + else + WORKSPACE_PATH="$WORKSPACE_SELF" + fi + + echo "WORKSPACE_PATH=$WORKSPACE_PATH" >> "$GITHUB_ENV" + echo "Resolved workspace: $WORKSPACE_PATH" - name: Build iOS App run: | echo "Building iOS app..." echo "Project: ${{ env.IOS_PROJECT_NAME }}, Scheme: ${{ env.IOS_PROJECT_SCHEME }}" # Verify workspace exists before building - WORKSPACE_PATH="app/ios/${{ env.IOS_PROJECT_NAME }}.xcworkspace" + if [ -z "$WORKSPACE_PATH" ]; then + echo "❌ WORKSPACE_PATH is not set" + exit 1 + fi if [ ! -d "$WORKSPACE_PATH" ]; then echo "❌ Workspace not found at: $WORKSPACE_PATH" echo "Available workspaces:" @@ -388,13 +349,15 @@ jobs: echo "✅ Using scheme: ${{ env.IOS_PROJECT_SCHEME }}" # Use cached derived data and enable parallel builds for faster compilation + # Additional flags disable indexing, restrict architecture, and use whole-module Swift compilation # Use the simulator that was set up earlier in the workflow - xcodebuild -workspace "$WORKSPACE_PATH" -scheme ${{ env.IOS_PROJECT_SCHEME }} -configuration Release -destination "id=${{ env.IOS_SIMULATOR_ID }}" -derivedDataPath app/ios/build -jobs "$(sysctl -n hw.ncpu)" -parallelizeTargets -quiet || { echo "❌ iOS build failed"; exit 1; } + FORCE_BUNDLING=1 RCT_NO_LAUNCH_PACKAGER=1 \ + xcodebuild -workspace "$WORKSPACE_PATH" -scheme ${{ env.IOS_PROJECT_SCHEME }} -configuration Debug -destination "id=${{ env.IOS_SIMULATOR_ID }}" -derivedDataPath app/ios/build -jobs "$(sysctl -n hw.ncpu)" -parallelizeTargets -quiet COMPILER_INDEX_STORE_ENABLE=NO ONLY_ACTIVE_ARCH=YES SWIFT_COMPILATION_MODE=wholemodule || { echo "❌ iOS build failed"; exit 1; } echo "✅ iOS build succeeded" - name: Install and Test on iOS run: | echo "Installing app on simulator..." - APP_PATH=$(find app/ios/build/Build/Products/Release-iphonesimulator -name "*.app" | head -1) + APP_PATH=$(find app/ios/build/Build/Products/Debug-iphonesimulator -name "*.app" | head -1) [ -z "$APP_PATH" ] && { echo "❌ Could not find built iOS app"; exit 1; } echo "Found app at: $APP_PATH" diff --git a/README.md b/README.md index 36de48442..c692fc5ca 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,6 @@ We are actively looking for contributors. Please check the [open issues](https:/ > **Important:** Please open your pull request from the `staging` branch. Pull requests from other branches will be automatically closed. - ## Contact us [Contact us](https://t.me/selfprotocolbuilder) on telegram for feedback or questions. diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index e9df226f2..f01d7b078 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -121,7 +121,7 @@ android { applicationId "com.proofofpassportapp" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 89 + versionCode 90 versionName "2.6.4" manifestPlaceholders = [appAuthRedirectScheme: 'com.proofofpassportapp'] externalNativeBuild { diff --git a/app/ios/Podfile b/app/ios/Podfile index 1a6b51f41..d926779de 100755 --- a/app/ios/Podfile +++ b/app/ios/Podfile @@ -146,8 +146,13 @@ target "Self" do # Add E2E_TESTING compilation condition for main app target when environment variable is set if ENV["E2E_TESTING"] == "1" + puts "🔧 Setting up E2E_TESTING compilation condition..." # Find Self.xcodeproj and add E2E_TESTING compilation condition self_project_path = File.join(installer.sandbox.project_path, "../Self.xcodeproj") + # Alternative path if the above doesn't work + unless File.exist?(self_project_path) + self_project_path = File.join(Dir.pwd, "Self.xcodeproj") + end if File.exist?(self_project_path) project = Xcodeproj::Project.open(self_project_path) project.targets.each do |target| @@ -156,12 +161,20 @@ target "Self" do existing_conditions = config.build_settings["SWIFT_ACTIVE_COMPILATION_CONDITIONS"] || "" unless existing_conditions.to_s.include?("E2E_TESTING") config.build_settings["SWIFT_ACTIVE_COMPILATION_CONDITIONS"] = (existing_conditions.to_s + " E2E_TESTING").strip + puts "✅ Added E2E_TESTING to SWIFT_ACTIVE_COMPILATION_CONDITIONS for #{config.name} configuration" + else + puts "ℹ️ E2E_TESTING already present in SWIFT_ACTIVE_COMPILATION_CONDITIONS for #{config.name} configuration" end end end end project.save + puts "💾 Saved Self.xcodeproj with E2E_TESTING configuration" + else + puts "⚠️ Self.xcodeproj not found at #{self_project_path}" end + else + puts "ℹ️ E2E_TESTING not set - using normal build configuration" end end end diff --git a/app/ios/Self.xcodeproj/project.pbxproj b/app/ios/Self.xcodeproj/project.pbxproj index b2ccc896f..2a141f5d9 100644 --- a/app/ios/Self.xcodeproj/project.pbxproj +++ b/app/ios/Self.xcodeproj/project.pbxproj @@ -550,6 +550,7 @@ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = E2E_TESTING; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; @@ -689,6 +690,7 @@ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = E2E_TESTING; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; VERSIONING_SYSTEM = "apple-generic"; diff --git a/app/version.json b/app/version.json index 2cc2fae7e..1e582d1a0 100644 --- a/app/version.json +++ b/app/version.json @@ -4,7 +4,7 @@ "lastDeployed": "2025-08-026T16:35:10Z" }, "android": { - "build": 89, + "build": 90, "lastDeployed": "2025-08-26T16:30:05Z" } } From feaabf8be909b8a6270edbbe58e9655ee5474baa Mon Sep 17 00:00:00 2001 From: Justin Hernandez Date: Tue, 26 Aug 2025 18:46:08 -0700 Subject: [PATCH 7/8] revert podfile --- app/ios/Podfile | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/app/ios/Podfile b/app/ios/Podfile index d926779de..1a6b51f41 100755 --- a/app/ios/Podfile +++ b/app/ios/Podfile @@ -146,13 +146,8 @@ target "Self" do # Add E2E_TESTING compilation condition for main app target when environment variable is set if ENV["E2E_TESTING"] == "1" - puts "🔧 Setting up E2E_TESTING compilation condition..." # Find Self.xcodeproj and add E2E_TESTING compilation condition self_project_path = File.join(installer.sandbox.project_path, "../Self.xcodeproj") - # Alternative path if the above doesn't work - unless File.exist?(self_project_path) - self_project_path = File.join(Dir.pwd, "Self.xcodeproj") - end if File.exist?(self_project_path) project = Xcodeproj::Project.open(self_project_path) project.targets.each do |target| @@ -161,20 +156,12 @@ target "Self" do existing_conditions = config.build_settings["SWIFT_ACTIVE_COMPILATION_CONDITIONS"] || "" unless existing_conditions.to_s.include?("E2E_TESTING") config.build_settings["SWIFT_ACTIVE_COMPILATION_CONDITIONS"] = (existing_conditions.to_s + " E2E_TESTING").strip - puts "✅ Added E2E_TESTING to SWIFT_ACTIVE_COMPILATION_CONDITIONS for #{config.name} configuration" - else - puts "ℹ️ E2E_TESTING already present in SWIFT_ACTIVE_COMPILATION_CONDITIONS for #{config.name} configuration" end end end end project.save - puts "💾 Saved Self.xcodeproj with E2E_TESTING configuration" - else - puts "⚠️ Self.xcodeproj not found at #{self_project_path}" end - else - puts "ℹ️ E2E_TESTING not set - using normal build configuration" end end end From 72d5eeab84ec9f4616d1b767924c2904129a8869 Mon Sep 17 00:00:00 2001 From: Justin Hernandez Date: Tue, 26 Aug 2025 18:47:20 -0700 Subject: [PATCH 8/8] fixes --- app/ios/Self.xcodeproj/project.pbxproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/ios/Self.xcodeproj/project.pbxproj b/app/ios/Self.xcodeproj/project.pbxproj index 2a141f5d9..b2ccc896f 100644 --- a/app/ios/Self.xcodeproj/project.pbxproj +++ b/app/ios/Self.xcodeproj/project.pbxproj @@ -550,7 +550,6 @@ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = E2E_TESTING; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; @@ -690,7 +689,6 @@ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = E2E_TESTING; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; VERSIONING_SYSTEM = "apple-generic";