33# and runs Maestro flows on iOS simulator and Android emulator.
44#
55# Secrets:
6- # INTEGRATION_INSTANCE_KEYS — JSON map of named test instances
6+ # INTEGRATION_STAGING_INSTANCE_KEYS — JSON map of named staging test instances
77# ({ "<name>": { "pk": "pk_test_...", "sk": "sk_test_..." } }).
8- # Same secret used by /integration (Playwright). We read the entry named
9- # EXPO_INSTANCE_NAME (set in env: below).
8+ # Same secret used by /integration (Playwright) staging jobs . We read the
9+ # entry named EXPO_INSTANCE_NAME (set in env: below).
1010#
1111# Test users are provisioned per-run via Clerk Backend API and deleted at
1212# teardown — same pattern as /integration's createBapiUser.
13- #
14- # TODO(SDK team): confirm the instance-name slot to add inside
15- # INTEGRATION_INSTANCE_KEYS for this workflow (placeholder: "expo-native").
1613name : " Mobile e2e (@clerk/expo)"
1714
1815on :
2825 default : " manual,skip"
2926
3027env :
31- # TODO(SDK team): replace with the canonical mobile-e2e instance name once confirmed.
32- EXPO_INSTANCE_NAME : expo-native
28+ EXPO_INSTANCE_NAME : clerkstage-with-native-components
3329
3430concurrency :
3531 group : mobile-e2e-${{ github.ref }}
@@ -38,7 +34,7 @@ concurrency:
3834jobs :
3935 android :
4036 name : Android
41- runs-on : ubuntu-latest
37+ runs-on : ' blacksmith-8vcpu- ubuntu-2204 '
4238 timeout-minutes : 45
4339 defaults :
4440 run :
7369 - name : Resolve Clerk instance keys
7470 id : keys
7571 env :
76- INTEGRATION_INSTANCE_KEYS : ${{ secrets.INTEGRATION_INSTANCE_KEYS }}
77- run : |
78- if [ -z "$INTEGRATION_INSTANCE_KEYS" ]; then
79- echo "::error::INTEGRATION_INSTANCE_KEYS secret is not set"
80- exit 1
81- fi
82- pk=$(echo "$INTEGRATION_INSTANCE_KEYS" | jq -er ".[\"$EXPO_INSTANCE_NAME\"].pk") || {
83- echo "::error::No entry '$EXPO_INSTANCE_NAME' found in INTEGRATION_INSTANCE_KEYS"
84- exit 1
85- }
86- sk=$(echo "$INTEGRATION_INSTANCE_KEYS" | jq -er ".[\"$EXPO_INSTANCE_NAME\"].sk")
87- echo "::add-mask::$sk"
88- echo "pk=$pk" >> "$GITHUB_OUTPUT"
89- echo "sk=$sk" >> "$GITHUB_OUTPUT"
72+ INTEGRATION_STAGING_INSTANCE_KEYS : ${{ secrets.INTEGRATION_STAGING_INSTANCE_KEYS }}
73+ run : node scripts/resolve-instance-keys.mjs INTEGRATION_STAGING_INSTANCE_KEYS "$EXPO_INSTANCE_NAME"
9074
9175 - name : Write quickstart .env
9276 working-directory : clerk-expo-quickstart/NativeComponentQuickstart
@@ -126,6 +110,7 @@ jobs:
126110 env :
127111 CLERK_TEST_EMAIL : ${{ steps.user.outputs.email }}
128112 CLERK_TEST_PASSWORD : ${{ steps.user.outputs.password }}
113+ EXCLUDE_TAGS : ${{ inputs.exclude_tags }}
129114 with :
130115 api-level : 34
131116 target : google_apis
@@ -137,7 +122,7 @@ jobs:
137122 cd ../../integration-mobile
138123 # Maestro doesn't auto-recurse into subdirectories; pass each flow explicitly.
139124 find flows -type f -name "*.yaml" ! -path "*/common/*" -print0 | \
140- xargs -0 maestro test --exclude-tags "${{ inputs.exclude_tags }} "
125+ xargs -0 maestro test --exclude-tags "$EXCLUDE_TAGS "
141126
142127 - name : Upload Maestro artifacts on failure
143128 if : failure()
@@ -189,20 +174,8 @@ jobs:
189174 - name : Resolve Clerk instance keys
190175 id : keys
191176 env :
192- INTEGRATION_INSTANCE_KEYS : ${{ secrets.INTEGRATION_INSTANCE_KEYS }}
193- run : |
194- if [ -z "$INTEGRATION_INSTANCE_KEYS" ]; then
195- echo "::error::INTEGRATION_INSTANCE_KEYS secret is not set"
196- exit 1
197- fi
198- pk=$(echo "$INTEGRATION_INSTANCE_KEYS" | jq -er ".[\"$EXPO_INSTANCE_NAME\"].pk") || {
199- echo "::error::No entry '$EXPO_INSTANCE_NAME' found in INTEGRATION_INSTANCE_KEYS"
200- exit 1
201- }
202- sk=$(echo "$INTEGRATION_INSTANCE_KEYS" | jq -er ".[\"$EXPO_INSTANCE_NAME\"].sk")
203- echo "::add-mask::$sk"
204- echo "pk=$pk" >> "$GITHUB_OUTPUT"
205- echo "sk=$sk" >> "$GITHUB_OUTPUT"
177+ INTEGRATION_STAGING_INSTANCE_KEYS : ${{ secrets.INTEGRATION_STAGING_INSTANCE_KEYS }}
178+ run : node scripts/resolve-instance-keys.mjs INTEGRATION_STAGING_INSTANCE_KEYS "$EXPO_INSTANCE_NAME"
206179
207180 - name : Write quickstart .env
208181 working-directory : clerk-expo-quickstart/NativeComponentQuickstart
@@ -241,14 +214,15 @@ jobs:
241214 env :
242215 CLERK_TEST_EMAIL : ${{ steps.user.outputs.email }}
243216 CLERK_TEST_PASSWORD : ${{ steps.user.outputs.password }}
217+ EXCLUDE_TAGS : ${{ inputs.exclude_tags }}
244218 run : |
245219 cd clerk-expo-quickstart/NativeComponentQuickstart
246220 npx expo prebuild --clean
247221 npx expo run:ios --configuration Release --no-bundler
248222 cd ../../integration-mobile
249223 # Maestro doesn't auto-recurse into subdirectories; pass each flow explicitly.
250224 find flows -type f -name "*.yaml" ! -path "*/common/*" -print0 | \
251- xargs -0 maestro test --exclude-tags "${{ inputs.exclude_tags }} ,androidOnly"
225+ xargs -0 maestro test --exclude-tags "$EXCLUDE_TAGS ,androidOnly"
252226
253227 - name : Upload Maestro artifacts on failure
254228 if : failure()
0 commit comments