build: lib/ pipeline via react-native-builder-bob (closes #47) #70
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| pull_request: | |
| push: | |
| branches: [develop] | |
| # Toolchain drift (`xcode-version: latest-stable`) can fail a run that a | |
| # later Xcode builds cleanly, and GitHub refuses to retry runs older than a | |
| # month — so allow a manual re-run without a no-op commit. | |
| workflow_dispatch: | |
| jobs: | |
| typecheck: | |
| name: Typecheck (lib + example) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Install root deps | |
| run: npm ci | |
| - name: Typecheck library | |
| run: npx tsc --noEmit | |
| - name: Install example deps | |
| run: cd example/expo-app && npm ci | |
| - name: Typecheck example | |
| run: cd example/expo-app && npx tsc --noEmit | |
| build-ios: | |
| name: Build (iOS, Expo CNG) | |
| runs-on: macos-15 | |
| needs: typecheck | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Select latest Xcode | |
| # Expo SDK 55's modules-core uses Swift 6.1 features (e.g. new | |
| # @MainActor forms). The default Xcode on GitHub runners (16.4 / | |
| # Swift 6.0) errors with "unknown attribute 'MainActor'" — pin | |
| # to the newest Xcode the runner image ships. | |
| uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: latest-stable | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: '3.3' | |
| - name: Install cocoapods + cocoapods-spm | |
| run: | | |
| gem install cocoapods | |
| gem install cocoapods-spm | |
| - name: Install root deps | |
| run: npm ci | |
| - name: Install example deps | |
| run: cd example/expo-app && npm ci | |
| - name: Expo prebuild (CNG — generates ios/ via our config plugin) | |
| run: cd example/expo-app && npx expo prebuild --no-install --platform ios | |
| - name: Pod install (Expo wrapper) | |
| run: cd example/expo-app && npx pod-install | |
| - name: xcodebuild | |
| # Scheme name is derived from app.json `name` ("SourceEditor | |
| # Example"), camelCased by Expo's prebuild → "SourceEditorExample". | |
| run: | | |
| cd example/expo-app/ios | |
| set -o pipefail | |
| xcodebuild \ | |
| -workspace SourceEditorExample.xcworkspace \ | |
| -scheme SourceEditorExample \ | |
| -sdk iphonesimulator \ | |
| -configuration Debug \ | |
| -destination 'generic/platform=iOS Simulator' \ | |
| CODE_SIGNING_ALLOWED=NO \ | |
| build | |
| build-android: | |
| name: Build (Android, Expo CNG) | |
| runs-on: ubuntu-latest | |
| needs: typecheck | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| # Sora-Editor's `language-textmate` AAR + the gradle plugin chain | |
| # require JDK 17. | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| - uses: android-actions/setup-android@v3 | |
| with: | |
| packages: 'platform-tools platforms;android-35 build-tools;35.0.0' | |
| - name: Install root deps | |
| run: npm ci | |
| - name: Install example deps | |
| run: cd example/expo-app && npm ci | |
| - name: Expo prebuild (CNG — generates android/ via our config plugin) | |
| # Same plugin as iOS injects coreLibraryDesugaring on Android | |
| # (Sora's TextMate AAR declares the requirement at metadata level). | |
| run: cd example/expo-app && npx expo prebuild --no-install --platform android | |
| - name: Gradle assembleDebug | |
| run: | | |
| cd example/expo-app/android | |
| ./gradlew :app:assembleDebug --no-daemon --console=plain | |
| build-macos: | |
| name: Build (macOS, bare RN-macos) | |
| runs-on: macos-15 | |
| needs: typecheck | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: latest-stable | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - uses: ruby/setup-ruby@v1 | |
| with: | |
| ruby-version: '3.3' | |
| - name: Install cocoapods | |
| # macOS path uses RN's first-party `spm_dependency` helper from | |
| # react_native_pods.rb — no third-party cocoapods-spm gem needed | |
| # (see example/macos-app/macos/Podfile). | |
| run: gem install cocoapods | |
| - name: Install root deps | |
| run: npm ci | |
| - name: Install example deps | |
| run: cd example/macos-app && npm install --legacy-peer-deps | |
| - name: Pod install | |
| run: cd example/macos-app/macos && pod install | |
| - name: xcodebuild | |
| run: | | |
| cd example/macos-app/macos | |
| set -o pipefail | |
| xcodebuild \ | |
| -workspace MacosApp.xcworkspace \ | |
| -scheme MacosApp-macOS \ | |
| -configuration Debug \ | |
| -destination 'platform=macOS' \ | |
| CODE_SIGNING_ALLOWED=NO \ | |
| build |