Skip to content

Commit 0e00408

Browse files
Expose Clerk Google sign-in env vars to Expo (#3772)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent cd8b9fc commit 0e00408

7 files changed

Lines changed: 370 additions & 333 deletions

File tree

.github/workflows/mobile-eas-preview.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ jobs:
5757
with:
5858
eas-version: latest
5959
token: ${{ secrets.EXPO_TOKEN }}
60-
packager: pnpm
60+
# npm, not pnpm: this only installs eas-cli into the action's own
61+
# tool dir, and pnpm 11 hard-fails that install on dtrace-provider's
62+
# ignored build script (no allowBuilds config outside the repo).
63+
packager: npm
6164

6265
- name: Pull preview environment variables
6366
if: steps.expo-token.outputs.present == 'true'

.github/workflows/mobile-eas-production.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,10 @@ jobs:
8080
with:
8181
eas-version: latest
8282
token: ${{ secrets.EXPO_TOKEN }}
83-
packager: pnpm
83+
# npm, not pnpm: this only installs eas-cli into the action's own
84+
# tool dir, and pnpm 11 hard-fails that install on dtrace-provider's
85+
# ignored build script (no allowBuilds config outside the repo).
86+
packager: npm
8487

8588
- name: Pull production environment variables
8689
if: steps.expo-token.outputs.present == 'true'

apps/mobile/app.config.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,15 @@ const config: ExpoConfig = {
196196
publishableKey: repoEnv.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY ?? null,
197197
jwtTemplate: repoEnv.EXPO_PUBLIC_CLERK_JWT_TEMPLATE ?? null,
198198
},
199+
// Native Google sign-in credentials. @clerk/expo reads these from `extra`
200+
// under their exact env-var names (not nested), and its config plugin reads
201+
// the iOS URL scheme at prebuild to register it in Info.plist.
202+
// Unset values must be omitted (not null): the public manifest serializes
203+
// null to {}, which is truthy and would defeat Clerk's fallback checks.
204+
EXPO_PUBLIC_CLERK_GOOGLE_WEB_CLIENT_ID: repoEnv.EXPO_PUBLIC_CLERK_GOOGLE_WEB_CLIENT_ID,
205+
EXPO_PUBLIC_CLERK_GOOGLE_IOS_CLIENT_ID: repoEnv.EXPO_PUBLIC_CLERK_GOOGLE_IOS_CLIENT_ID,
206+
EXPO_PUBLIC_CLERK_GOOGLE_ANDROID_CLIENT_ID: repoEnv.EXPO_PUBLIC_CLERK_GOOGLE_ANDROID_CLIENT_ID,
207+
EXPO_PUBLIC_CLERK_GOOGLE_IOS_URL_SCHEME: repoEnv.EXPO_PUBLIC_CLERK_GOOGLE_IOS_URL_SCHEME,
199208
observability: {
200209
tracesUrl: repoEnv.EXPO_PUBLIC_OTLP_TRACES_URL ?? "https://api.axiom.co/v1/traces",
201210
tracesDataset: repoEnv.EXPO_PUBLIC_OTLP_TRACES_DATASET ?? null,

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"engines": {
4949
"node": "^24.13.1"
5050
},
51-
"packageManager": "pnpm@10.24.0",
51+
"packageManager": "pnpm@11.10.0",
5252
"msw": {
5353
"workerDirectory": [
5454
"apps/web/public"

patches/react-native-screens@4.25.2.patch

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,42 @@
1+
diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt
2+
index 03d8d9f3a5c403c93282d53cbacf1a339e877e85..54d5eabc6c8a408e711a5be97286fdbb8ab1c461 100644
3+
--- a/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt
4+
+++ b/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt
5+
@@ -103,6 +103,34 @@ class ScreenStackHeaderConfigViewManager :
6+
config.setTitle(title)
7+
}
8+
9+
+ // The t3 patch adds these iOS glass-chrome props to the native spec; they have
10+
+ // no Android implementation, but the codegen-generated interface requires the
11+
+ // setters to exist. No-ops keep the Android build compiling.
12+
+ override fun setSubtitle(
13+
+ config: ScreenStackHeaderConfig,
14+
+ subtitle: String?,
15+
+ ) = Unit
16+
+
17+
+ override fun setLargeSubtitle(
18+
+ config: ScreenStackHeaderConfig,
19+
+ largeSubtitle: String?,
20+
+ ) = Unit
21+
+
22+
+ override fun setNavigationItemStyle(
23+
+ config: ScreenStackHeaderConfig,
24+
+ navigationItemStyle: String?,
25+
+ ) = Unit
26+
+
27+
+ override fun setHeaderCenterBarButtonItems(
28+
+ config: ScreenStackHeaderConfig,
29+
+ headerCenterBarButtonItems: ReadableArray?,
30+
+ ) = Unit
31+
+
32+
+ override fun setHeaderToolbarItems(
33+
+ config: ScreenStackHeaderConfig,
34+
+ headerToolbarItems: ReadableArray?,
35+
+ ) = Unit
36+
+
37+
override fun setTitleFontFamily(
38+
config: ScreenStackHeaderConfig,
39+
titleFontFamily: String?,
140
diff --git a/ios/RNSBarButtonItem.h b/ios/RNSBarButtonItem.h
241
index ea5325ea8d17b1ddfa790ff8dab48ce83142d4d3..acd2fd7ceb7162ed300abc4d3c9f0c24f4d63898 100644
342
--- a/ios/RNSBarButtonItem.h
@@ -1067,7 +1106,7 @@ index b7568ecfebd4f4420f2a8d3fec5184d7fc728dd1..41ca1f273f0175929e73105faa463978
10671106
onPressHeaderBarButtonMenuItem?: CT.DirectEventHandler<OnPressHeaderBarButtonMenuItemEvent> | undefined;
10681107
synchronousShadowStateUpdatesEnabled?: CT.WithDefault<boolean, false>;
10691108
diff --git a/lib/typescript/types.d.ts b/lib/typescript/types.d.ts
1070-
index 3b384e03891e38e936f370372a682d73440e7ec2..1e3a966806c8b8b312f75fb367f758efe49dde9d 100644
1109+
index 3b384e03891e38e936f370372a682d73440e7ec2..861ffed850e90f27916c427853b503dbe6ee9840 100644
10711110
--- a/lib/typescript/types.d.ts
10721111
+++ b/lib/typescript/types.d.ts
10731112
@@ -10,6 +10,7 @@ export type SearchBarCommands = {

0 commit comments

Comments
 (0)