feat: native module substitution #99
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: check | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| paths-ignore: | |
| - '**/*.md' | |
| - '.gitignore' | |
| - 'docs/**' | |
| - '**/*.txt' | |
| - 'LICENSE' | |
| - '**/README*' | |
| pull_request: | |
| branches: [ main, develop ] | |
| paths-ignore: | |
| - '**/*.md' | |
| - '.gitignore' | |
| - 'docs/**' | |
| - '**/*.txt' | |
| - 'LICENSE' | |
| - '**/README*' | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| lint: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ./.github/actions/setup | |
| - name: Install ktlint | |
| run: | | |
| curl -sSLO https://github.com/pinterest/ktlint/releases/latest/download/ktlint | |
| chmod +x ktlint | |
| sudo mv ktlint /usr/local/bin/ | |
| - name: Run ESLint | |
| run: bun run lint | |
| - name: Test pack | |
| working-directory: packages/react-native-sandbox | |
| run: npm pack | |
| test: | |
| runs-on: macos-15 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ./.github/actions/setup | |
| - name: Run Test | |
| run: bun run test | |
| example-ios: | |
| runs-on: macos-15 | |
| needs: [lint, test] | |
| strategy: | |
| matrix: | |
| example: [demo] | |
| concurrency: | |
| group: '${{ github.workflow }}-ios-${{ matrix.example }}-${{ github.head_ref || github.ref_name }}' | |
| cancel-in-progress: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ./.github/actions/setup | |
| - name: Setup ccache | |
| uses: hendrikmuhs/ccache-action@v1.2 | |
| with: | |
| key: ${{ github.job }}-${{ matrix.example }} | |
| max-size: "2G" | |
| - name: Setup ccache path | |
| run: | | |
| echo "/opt/homebrew/opt/ccache/libexec" >> $GITHUB_PATH | |
| echo "CCACHE_LOGFILE=/tmp/ccache.log" >> $GITHUB_ENV | |
| - name: Install example dependencies | |
| working-directory: apps/${{ matrix.example }} | |
| run: | | |
| bun install --frozen-lockfile | |
| bundle install | |
| - name: Install iOS dependencies (CocoaPods) | |
| working-directory: apps/${{ matrix.example }}/ios | |
| run: bundle exec pod install | |
| - name: Build iOS | |
| working-directory: apps/${{ matrix.example }} | |
| run: npx react-native build-ios --mode Debug | |
| - name: ccache stats | |
| run: | | |
| ccache -s | |
| echo "---" | |
| cat /tmp/ccache.log | |
| example-android: | |
| runs-on: ubuntu-latest | |
| needs: [lint, test] | |
| strategy: | |
| matrix: | |
| example: [demo] | |
| concurrency: | |
| group: '${{ github.workflow }}-android-${{ matrix.example }}-${{ github.head_ref || github.ref_name }}' | |
| cancel-in-progress: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ./.github/actions/setup | |
| with: | |
| java-version: '17' | |
| - name: Install example dependencies | |
| working-directory: apps/${{ matrix.example }} | |
| run: bun install --frozen-lockfile | |
| - name: Build Android | |
| working-directory: apps/${{ matrix.example }} | |
| run: npx react-native build-android --mode Debug | |
| harness-ios: | |
| runs-on: macos-15 | |
| needs: [lint, test] | |
| timeout-minutes: 45 | |
| concurrency: | |
| group: '${{ github.workflow }}-harness-ios-${{ github.head_ref || github.ref_name }}' | |
| cancel-in-progress: true | |
| env: | |
| HARNESS_IOS_DEVICE: iPhone 16 Pro | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ./.github/actions/setup | |
| - name: Setup ccache | |
| uses: hendrikmuhs/ccache-action@v1.2 | |
| with: | |
| key: harness-ios | |
| max-size: 2G | |
| - name: Setup ccache path | |
| run: echo "/opt/homebrew/opt/ccache/libexec" >> $GITHUB_PATH | |
| - name: Install CocoaPods | |
| working-directory: apps/fs-experiment/ios | |
| run: pod install | |
| - name: Build iOS | |
| working-directory: apps/fs-experiment | |
| run: npx react-native build-ios --mode Debug | |
| - name: Find built app | |
| id: app-path | |
| run: | | |
| APP_PATH=$(find ~/Library/Developer/Xcode/DerivedData \ | |
| -name "MultInstance-FSExperiment.app" \ | |
| -path "*/Debug-iphonesimulator/*" \ | |
| | head -1) | |
| echo "path=$APP_PATH" >> "$GITHUB_OUTPUT" | |
| - name: Boot simulator & install app | |
| id: simulator | |
| uses: ./.github/actions/boot-simulator | |
| with: | |
| device: ${{ env.HARNESS_IOS_DEVICE }} | |
| app-path: ${{ steps.app-path.outputs.path }} | |
| - name: Run harness tests (iOS) | |
| working-directory: apps/fs-experiment | |
| env: | |
| HARNESS_IOS_VERSION: ${{ steps.simulator.outputs.ios-version }} | |
| run: bun run harness:ios | |
| harness-android: | |
| runs-on: ubuntu-latest | |
| needs: [lint, test] | |
| timeout-minutes: 45 | |
| concurrency: | |
| group: '${{ github.workflow }}-harness-android-${{ github.head_ref || github.ref_name }}' | |
| cancel-in-progress: true | |
| env: | |
| HARNESS_ANDROID_DEVICE: test_device | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: ./.github/actions/setup | |
| with: | |
| java-version: '17' | |
| - name: Enable KVM | |
| run: | | |
| echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
| sudo udevadm control --reload-rules | |
| sudo udevadm trigger --name-match=kvm | |
| - name: Build Android APK | |
| working-directory: apps/fs-experiment | |
| run: npx react-native build-android --tasks assembleDebug | |
| - name: Run emulator and harness tests | |
| uses: ReactiveCircus/android-emulator-runner@v2 | |
| with: | |
| api-level: 35 | |
| target: google_apis | |
| arch: x86_64 | |
| avd-name: test_device | |
| force-avd-creation: true | |
| emulator-options: -no-snapshot-save -no-window -noaudio -no-boot-anim | |
| disable-animations: true | |
| script: | | |
| adb install apps/fs-experiment/android/app/build/outputs/apk/debug/app-debug.apk | |
| cd apps/fs-experiment && bun harness:android |