chore: release 1.21.7 #2119
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: 🛠 iOS e2e tests | |
| on: | |
| pull_request: | |
| paths: | |
| - ".github/workflows/ios-e2e-test.yml" | |
| - "react-native-keyboard-controller.podspec" | |
| - "package.json" | |
| - "ios/**" | |
| - "example/**" | |
| - "e2e/**" | |
| - "src/**" | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - ".github/workflows/ios-e2e-test.yml" | |
| - "react-native-keyboard-controller.podspec" | |
| - "package.json" | |
| - "ios/**" | |
| - "example/**" | |
| - "e2e/**" | |
| - "src/**" | |
| concurrency: | |
| group: ios-e2e-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| name: 🏗️ Build E2E ipa (Xcode ${{ matrix.config.xcode }}) | |
| runs-on: macos-${{ matrix.config.macos }} | |
| timeout-minutes: 60 | |
| env: | |
| WORKING_DIRECTORY: example | |
| strategy: | |
| matrix: | |
| config: [{ xcode: "16.4", macos: 15 }, { xcode: "26.1", macos: 26 }] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20.x | |
| cache: "yarn" | |
| - uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: ${{ matrix.config.xcode }} | |
| - name: Get Xcode version | |
| run: xcodebuild -version | |
| - name: Save yarn cache directory path | |
| id: yarn-cache-dir-path | |
| run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | |
| - name: Restore node_modules from cache | |
| uses: actions/cache@v4 | |
| id: yarn-cache | |
| with: | |
| path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |
| key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-yarn- | |
| - name: Install root dependencies | |
| run: yarn install | |
| - name: Install example project dependencies | |
| working-directory: ${{ env.WORKING_DIRECTORY }} | |
| run: yarn | |
| - name: Install e2e dependencies | |
| run: yarn install --cwd e2e | |
| - name: Install Ccache | |
| uses: hendrikmuhs/ccache-action@v1.2 | |
| with: | |
| max-size: 1.5G | |
| key: ${{ runner.os }}-xcode-${{ matrix.config.xcode }}-ccache-e2e-ios | |
| create-symlink: true | |
| - name: Setup ccache behavior | |
| run: | | |
| echo "CCACHE_SLOPPINESS=clang_index_store,file_stat_matches,include_file_ctime,include_file_mtime,ivfsoverlay,pch_defines,modules,system_headers,time_macros" >> $GITHUB_ENV | |
| echo "CCACHE_FILECLONE=true" >> $GITHUB_ENV | |
| echo "CCACHE_DEPEND=true" >> $GITHUB_ENV | |
| echo "CCACHE_INODECACHE=true" >> $GITHUB_ENV | |
| - name: Restore Pods cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| example/ios/Pods | |
| ~/Library/Caches/CocoaPods | |
| ~/.cocoapods | |
| key: ${{ runner.os }}-xcode-${{ matrix.config.xcode }}-pods-${{ hashFiles('**/Podfile.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-xcode-${{ matrix.config.xcode }}-pods- | |
| - name: Install pods | |
| working-directory: ${{ env.WORKING_DIRECTORY }}/ios | |
| run: export USE_CCACHE=1 && pod install || pod update --repo-update | |
| - name: Restore DerivedData cache | |
| uses: actions/cache@v5 | |
| with: | |
| path: example/ios/build | |
| key: ${{ runner.os }}-e2e-derived-data-xcode-${{ matrix.config.xcode }}-${{ hashFiles('**/Podfile.lock', '**/Gemfile.lock', '**/package.json', '**/yarn.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-e2e-derived-data-xcode-${{ matrix.config.xcode }}- | |
| - name: Build app | |
| working-directory: e2e | |
| run: yarn build-example:ios | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: ios-e2e-ipa-xcode${{ matrix.config.xcode }} | |
| path: example/ios/build/Build/Products/Release-iphonesimulator/KeyboardControllerExample.app/** | |
| determine-e2e-matrix: | |
| name: ⚖️ Determine E2E Test Matrix | |
| runs-on: ubuntu-latest | |
| outputs: | |
| matrix: ${{ steps.set-matrix.outputs.matrix }} | |
| steps: | |
| - name: Set matrix for PR or main | |
| id: set-matrix | |
| run: | | |
| if [[ "${{ github.event_name }}" == "pull_request" ]]; then | |
| # Subset for PRs: Only ios 15, 26, 26e (adjust as needed) | |
| echo 'matrix={"devices": [{"ios": 15, artifact: "16.4", "xcode": "16.4", "macos": 15, "runtime": "15.5", "iphone": "iPhone 13 Pro", "os": "15.5"}, {"ios": 17, artifact: "16.4", "xcode": "16.4", "macos": 15, "runtime": "17.5", "iphone": "iPhone 15 Pro", "os": "17.5"}, {"ios": "26e", artifact: "26.1", "xcode": "26.1", "macos": 15, "iphone": "iPhone 16e", "os": "26.1"}]}' >> $GITHUB_OUTPUT | |
| else | |
| # Full set for main | |
| echo 'matrix={"devices": [{"ios": 15, artifact: "16.4", "xcode": "16.4", "macos": 15, "runtime": "15.5", "iphone": "iPhone 13 Pro", "os": "15.5"}, {"ios": 16, artifact: "16.4", "xcode": "16.4", "macos": 15, "runtime": "16.4", "iphone": "iPhone 14 Pro", "os": "16.4"}, {"ios": 17, artifact: "16.4", "xcode": "16.4", "macos": 15, "runtime": "17.5", "iphone": "iPhone 15 Pro", "os": "17.5"}, {"ios": 18, artifact: "16.4", "xcode": "16.4", "macos": 15, "iphone": "iPhone 16 Pro", "os": "18.5"}, {"ios": 26, artifact: "16.4", "xcode": "26.0", "macos": 15, "iphone": "iPhone 17 Pro", "os": "26.2"}, {"ios": "26e", artifact: "26.1", "xcode": "26.1", "macos": 15, "iphone": "iPhone 16e", "os": "26.1"}]}' >> $GITHUB_OUTPUT | |
| fi | |
| e2e-test: | |
| name: ⚙️ Automated test cases (iOS-${{ matrix.devices.ios }}, XCode-${{ matrix.devices.artifact }}) | |
| runs-on: macos-${{ matrix.devices.macos }} | |
| timeout-minutes: 90 | |
| env: | |
| WORKING_DIRECTORY: example | |
| strategy: | |
| matrix: ${{ fromJson(needs.determine-e2e-matrix.outputs.matrix) }} | |
| needs: [build, determine-e2e-matrix] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download a single artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ios-e2e-ipa-xcode${{ matrix.devices.artifact }} | |
| path: example/ios/build/Build/Products/Release-iphonesimulator/KeyboardControllerExample.app/ | |
| - uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: ${{ matrix.devices.xcode }} | |
| - name: Get Xcode version | |
| run: xcodebuild -version | |
| # needed for additional runtime installation | |
| - name: Install Xcodes | |
| run: brew tap xcodesorg/made | |
| - name: Install additional iOS runtimes | |
| if: ${{ matrix.devices.runtime != '' && matrix.devices.runtime != null }} | |
| uses: ./.github/actions/retry-sudo-with-timeout | |
| with: | |
| command: "xcodes runtimes install --keep-archive 'iOS ${{ matrix.devices.runtime }}'" | |
| timeout: 600 # 10 minutes | |
| max_retries: 3 | |
| retry_interval: 60 | |
| - name: List all available simulators | |
| run: xcrun simctl list | |
| # https://bitrise.io/blog/post/xcode-15-performance-regressions | |
| - name: Install yeetd | |
| run: | | |
| defaults write dev.biscuit.yeetd killapsd true | |
| wget https://github.com/biscuitehh/yeetd/releases/download/1.0/yeetd-normal.pkg | |
| sudo installer -pkg yeetd-normal.pkg -target / | |
| yeetd & | |
| # needed for simulator pre-booting | |
| - name: Install CoreUtils | |
| run: brew install coreutils | |
| - name: Boot simulator | |
| uses: ./.github/actions/boot-simulator | |
| with: | |
| simulator-name: ${{ matrix.devices.iphone }} | |
| simulator-version: ${{ matrix.devices.os }} | |
| - name: Install AppleSimulatorUtils | |
| run: brew tap wix/brew && brew install applesimutils | |
| - name: Save yarn cache directory path | |
| id: yarn-cache-dir-path | |
| run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | |
| - name: Restore node_modules from cache | |
| uses: actions/cache@v4 | |
| id: yarn-cache | |
| with: | |
| path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |
| key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-yarn- | |
| - name: Install root dependencies | |
| run: yarn install | |
| - name: Install e2e dependencies | |
| run: yarn install --cwd e2e | |
| - name: Use software keyboard | |
| run: defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool NO | |
| - name: Test app | |
| working-directory: e2e | |
| run: SOFT_CHECK=false yarn test-example:ios-${{ matrix.devices.ios }} | |
| - uses: actions/upload-artifact@v4 | |
| if: ${{ failure() }} | |
| with: | |
| name: ios-fail-screen-shoots | |
| path: e2e/artifacts |