Skip to content

feat: example with KeyboardAwareScrollView that covers entire screen #1130

feat: example with KeyboardAwareScrollView that covers entire screen

feat: example with KeyboardAwareScrollView that covers entire screen #1130

Workflow file for this run

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/**"
jobs:
build:
name: 🏗️ Build E2E ipa
runs-on: macos-14
timeout-minutes: 60
env:
WORKING_DIRECTORY: example
concurrency:
group: ios-e2e-${{ github.ref }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18.x
cache: "yarn"
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: "15.4"
- 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/[email protected]
with:
max-size: 1.5G
key: ${{ runner.os }}-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 }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Install pods
working-directory: ${{ env.WORKING_DIRECTORY }}/ios
run: export USE_CCACHE=1 && pod install
- name: Build app
working-directory: e2e
run: yarn build-example:ios
- uses: actions/upload-artifact@v4
with:
name: ios-e2e-ipa
path: example/ios/build/Build/Products/Release-iphonesimulator/KeyboardControllerExample.app/**
e2e-test:
name: ⚙️ Automated test cases (iOS-${{ matrix.devices.ios }})
runs-on: macos-${{ matrix.devices.macos }}
timeout-minutes: 90
env:
WORKING_DIRECTORY: example
concurrency:
group: ios-e2e-${{ matrix.devices.ios }}-${{ github.ref }}
cancel-in-progress: true
strategy:
matrix:
devices: [
{ ios: 15, xcode: "15.4", macos: 14, runtime: "15.5" },
{ ios: 16, xcode: "15.4", macos: 14, runtime: "16.4" },
{ ios: 17, xcode: "15.4", macos: 14 },
# { ios: 18, xcode: "16.0", macos: 15 },
]
needs: build
steps:
- uses: actions/checkout@v4
- name: Download a single artifact
uses: actions/download-artifact@v4
with:
name: ios-e2e-ipa
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 robotsandpencils/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
- 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