Skip to content

Bump brace-expansion from 1.1.11 to 1.1.13 in /examples/expo-gl-react-camera-effects #62

Bump brace-expansion from 1.1.11 to 1.1.13 in /examples/expo-gl-react-camera-effects

Bump brace-expansion from 1.1.11 to 1.1.13 in /examples/expo-gl-react-camera-effects #62

name: CI cookbook-expo
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
e2e-ios:
runs-on: macos-15
timeout-minutes: 45
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
# Use default Xcode (16.4) — has matching simulator runtimes
# Expo SDK 53 Swift 6 issues handled by patching pbxproj after pod install
- run: corepack enable
- name: Install dependencies
run: |
yarn install
cd packages/cookbook-expo && yarn install
- name: Build gl-react packages
run: |
for d in packages/gl-react packages/gl-react-expo; do
npx babel --root-mode upward --source-maps --extensions '.ts,.tsx' -d "$d/lib" "$d/src"
done
- name: Expo prebuild
working-directory: packages/cookbook-expo
run: npx expo prebuild --platform ios --no-install
- name: Pod install
working-directory: packages/cookbook-expo/ios
run: pod install
# Patch expo-modules-core Swift sources to compile on Swift 6 (Xcode 16.4)
- name: Patch expo-modules-core for Swift 6
run: |
# Add @preconcurrency import where needed
find packages/cookbook-expo/node_modules/expo-modules-core/ios -name "*.swift" | xargs sed -i '' 's/^import UIKit/@preconcurrency import UIKit/; s/^import Foundation/@preconcurrency import Foundation/' 2>/dev/null || true
# Suppress sendable warnings by adding nonisolated(unsafe) or @unchecked Sendable
# The simplest approach: set SWIFT_STRICT_CONCURRENCY=minimal in Pods pbxproj
sed -i '' 's/SWIFT_VERSION = 6\.0;/SWIFT_VERSION = 6.0; SWIFT_STRICT_CONCURRENCY = minimal;/g' packages/cookbook-expo/ios/Pods/Pods.xcodeproj/project.pbxproj 2>/dev/null || true
- name: Build iOS app for simulator
working-directory: packages/cookbook-expo
run: |
xcodebuild \
-workspace ios/cookbookexpo.xcworkspace \
-scheme cookbookexpo \
-sdk iphonesimulator \
-configuration Debug \
-destination 'generic/platform=iOS Simulator' \
-derivedDataPath build \
CODE_SIGNING_ALLOWED=NO \
-quiet
- name: Boot iOS Simulator
run: |
DEVICE_ID=$(xcrun simctl list devices available -j | python3 -c "
import json, sys
data = json.load(sys.stdin)
for runtime, devices in data['devices'].items():
for d in devices:
if 'iPhone' in d['name'] and d['isAvailable']:
print(d['udid'])
sys.exit(0)
sys.exit(1)
")
xcrun simctl boot "$DEVICE_ID" || true
echo "DEVICE_ID=$DEVICE_ID" >> "$GITHUB_ENV"
- name: Install app on simulator
run: |
APP_PATH=$(find packages/cookbook-expo/build -name "*.app" -path "*/Debug-iphonesimulator/*" | head -1)
xcrun simctl install "$DEVICE_ID" "$APP_PATH"
# Bundle JS offline so Metro isn't needed at runtime
- name: Bundle JS
working-directory: packages/cookbook-expo
env:
NODE_PATH: ${{ github.workspace }}/packages/cookbook-expo/node_modules
run: |
node node_modules/expo/bin/cli export:embed \
--platform ios \
--entry-file "${{ github.workspace }}/packages/cookbook-expo/index.ts" \
--bundle-output ios/main.jsbundle \
--assets-dest ios \
--dev false
- name: Reinstall app with bundle
run: |
APP_PATH=$(find packages/cookbook-expo/build -name "*.app" -path "*/Debug-iphonesimulator/*" | head -1)
cp packages/cookbook-expo/ios/main.jsbundle "$APP_PATH/main.jsbundle"
xcrun simctl install "$DEVICE_ID" "$APP_PATH"
- name: Install Maestro
run: |
curl -Ls "https://get.maestro.mobile.dev" | bash
echo "$HOME/.maestro/bin" >> "$GITHUB_PATH"
- name: Run Maestro smoke test
working-directory: packages/cookbook-expo
env:
MAESTRO_DRIVER_STARTUP_TIMEOUT: 120000
run: ~/.maestro/bin/maestro test .maestro/smoke.yaml
- uses: actions/upload-artifact@v4
if: always()
with:
name: maestro-screenshots
path: ~/.maestro/tests/
retention-days: 7