[CHORE] Move Detox to Github Actions (#2340)
* Initial workflow for iOS detox tests
* Increase timeout
* Parallelise tests and optimise when to build
* Refine GH Actions logic
* Improve Detox App caching
* Upload failed test artifacts
* Rate limiting aware data setup
* Remove detox tests from Circle CI
* Revert "Rate limiting aware data setup"
This reverts commit d115604270
.
Co-authored-by: Diego Mello <diegolmello@gmail.com>
This commit is contained in:
parent
74ecab858f
commit
72ec569029
|
@ -75,29 +75,6 @@ restore_cache: &restore-gradle-cache
|
|||
name: Restore gradle cache
|
||||
key: android-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }}
|
||||
|
||||
restore-brew-cache: &restore-brew-cache
|
||||
name: Restore Brew cache
|
||||
key: brew-{{ checksum "yarn.lock" }}-{{ checksum ".circleci/config.yml" }}
|
||||
|
||||
save-brew-cache: &save-brew-cache
|
||||
name: Save brew cache
|
||||
key: brew-{{ checksum "yarn.lock" }}-{{ checksum ".circleci/config.yml" }}
|
||||
paths:
|
||||
- /usr/local/Homebrew
|
||||
|
||||
install-apple-sim-utils: &install-apple-sim-utils
|
||||
name: Install appleSimUtils
|
||||
command: |
|
||||
brew update
|
||||
brew tap wix/brew
|
||||
brew install wix/brew/applesimutils
|
||||
|
||||
rebuild-detox: &rebuild-detox
|
||||
name: Rebuild Detox framework cache
|
||||
command: |
|
||||
npx detox clean-framework-cache
|
||||
npx detox build-framework-cache
|
||||
|
||||
version: 2.1
|
||||
|
||||
# EXECUTORS
|
||||
|
@ -107,39 +84,6 @@ executors:
|
|||
environment:
|
||||
<<: *bash-env
|
||||
|
||||
# COMMANDS
|
||||
commands:
|
||||
detox-test:
|
||||
parameters:
|
||||
folder:
|
||||
type: string
|
||||
steps:
|
||||
- checkout
|
||||
|
||||
- attach_workspace:
|
||||
at: .
|
||||
|
||||
- restore_cache: *restore-npm-cache-mac
|
||||
|
||||
- restore_cache: *restore-brew-cache
|
||||
|
||||
- run: *install-node
|
||||
|
||||
- run: *install-apple-sim-utils
|
||||
|
||||
- run: *install-npm-modules
|
||||
|
||||
- run: *rebuild-detox
|
||||
|
||||
- run:
|
||||
name: Test
|
||||
command: |
|
||||
npx detox test << parameters.folder >> --configuration ios.sim.release --cleanup
|
||||
when: always
|
||||
|
||||
- store_artifacts:
|
||||
path: ./artifacts
|
||||
|
||||
# JOBS
|
||||
jobs:
|
||||
lint-testunit:
|
||||
|
@ -174,57 +118,6 @@ jobs:
|
|||
|
||||
- save_cache: *save-npm-cache-linux
|
||||
|
||||
# E2E
|
||||
e2e-build:
|
||||
executor: mac-env
|
||||
|
||||
steps:
|
||||
- checkout
|
||||
|
||||
- restore_cache: *restore-npm-cache-mac
|
||||
|
||||
- restore_cache: *restore-brew-cache
|
||||
|
||||
- run: *install-node
|
||||
|
||||
- run: *install-apple-sim-utils
|
||||
|
||||
- run: *install-npm-modules
|
||||
|
||||
- run: *rebuild-detox
|
||||
|
||||
- run:
|
||||
name: Build
|
||||
command: |
|
||||
npx detox build --configuration ios.sim.release
|
||||
|
||||
- persist_to_workspace:
|
||||
root: .
|
||||
paths:
|
||||
- ios/build/Build/Products/Release-iphonesimulator/RocketChatRN.app
|
||||
|
||||
- save_cache: *save-npm-cache-mac
|
||||
|
||||
- save_cache: *save-brew-cache
|
||||
|
||||
e2e-test-onboarding:
|
||||
executor: mac-env
|
||||
steps:
|
||||
- detox-test:
|
||||
folder: "./e2e/tests/onboarding"
|
||||
|
||||
e2e-test-room:
|
||||
executor: mac-env
|
||||
steps:
|
||||
- detox-test:
|
||||
folder: "./e2e/tests/room"
|
||||
|
||||
e2e-test-assorted:
|
||||
executor: mac-env
|
||||
steps:
|
||||
- detox-test:
|
||||
folder: "./e2e/tests/assorted"
|
||||
|
||||
# Android builds
|
||||
android-build:
|
||||
<<: *defaults
|
||||
|
@ -433,23 +326,6 @@ workflows:
|
|||
jobs:
|
||||
- lint-testunit
|
||||
|
||||
- e2e-hold:
|
||||
type: approval
|
||||
requires:
|
||||
- lint-testunit
|
||||
- e2e-build:
|
||||
requires:
|
||||
- e2e-hold
|
||||
- e2e-test-onboarding:
|
||||
requires:
|
||||
- e2e-build
|
||||
- e2e-test-room:
|
||||
requires:
|
||||
- e2e-build
|
||||
- e2e-test-assorted:
|
||||
requires:
|
||||
- e2e-build
|
||||
|
||||
- ios-build:
|
||||
requires:
|
||||
- lint-testunit
|
||||
|
|
|
@ -0,0 +1,221 @@
|
|||
name: iOS Detox
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
detox-build:
|
||||
runs-on: macos-latest
|
||||
timeout-minutes: 60
|
||||
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_11.5.app
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Generate Detox app cache key
|
||||
run: echo $(git rev-parse HEAD:app) > "./app-git-revision.txt"
|
||||
|
||||
- name: Cache Detox app
|
||||
uses: actions/cache@v1
|
||||
id: detoxappcache
|
||||
with:
|
||||
path: ios/build/Build/Products/Release-iphonesimulator
|
||||
key: iOSDetoxRelease-v4-${{ hashFiles('yarn.lock') }}-${{ hashFiles('ios/Podfile.lock') }}-${{ hashFiles('./app-git-revision.txt') }}
|
||||
|
||||
- name: Node
|
||||
if: steps.detoxappcache.outputs.cache-hit != 'true'
|
||||
uses: actions/setup-node@v1
|
||||
|
||||
- name: Cache node modules
|
||||
if: steps.detoxappcache.outputs.cache-hit != 'true'
|
||||
uses: actions/cache@v1
|
||||
id: npmcache
|
||||
with:
|
||||
path: node_modules
|
||||
key: node-modules-${{ hashFiles('**/yarn.lock') }}
|
||||
|
||||
- name: Rebuild detox
|
||||
if: steps.detoxappcache.outputs.cache-hit != 'true' && steps.npmcache.outputs.cache-hit == 'true'
|
||||
run: yarn detox clean-framework-cache && yarn detox build-framework-cache
|
||||
|
||||
- name: Install Dependencies
|
||||
if: steps.detoxappcache.outputs.cache-hit != 'true' && steps.npmcache.outputs.cache-hit != 'true'
|
||||
run: yarn install
|
||||
|
||||
- run: yarn detox build e2e --configuration ios.sim.release
|
||||
if: steps.detoxappcache.outputs.cache-hit != 'true'
|
||||
|
||||
detox-test-rooms:
|
||||
needs: detox-build
|
||||
runs-on: macos-latest
|
||||
timeout-minutes: 60
|
||||
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_11.5.app
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Generate Detox app cache key
|
||||
run: echo $(git rev-parse HEAD:app) > "./app-git-revision.txt"
|
||||
|
||||
- name: Cache Detox app
|
||||
uses: actions/cache@v1
|
||||
id: detoxappcache
|
||||
with:
|
||||
path: ios/build/Build/Products/Release-iphonesimulator
|
||||
key: iOSDetoxRelease-v4-${{ hashFiles('yarn.lock') }}-${{ hashFiles('ios/Podfile.lock') }}-${{ hashFiles('./app-git-revision.txt') }}
|
||||
|
||||
- name: Check for Detox app
|
||||
if: steps.detoxappcache.outputs.cache-hit != 'true'
|
||||
run: exit 1
|
||||
|
||||
- name: Node
|
||||
uses: actions/setup-node@v1
|
||||
|
||||
- name: Cache node modules
|
||||
uses: actions/cache@v1
|
||||
id: npmcache
|
||||
with:
|
||||
path: node_modules
|
||||
key: node-modules-${{ hashFiles('**/yarn.lock') }}
|
||||
|
||||
- name: Rebuild detox
|
||||
if: steps.npmcache.outputs.cache-hit == 'true'
|
||||
run: yarn detox clean-framework-cache && yarn detox build-framework-cache
|
||||
|
||||
- name: Install Dependencies
|
||||
if: steps.npmcache.outputs.cache-hit != 'true'
|
||||
run: yarn install
|
||||
|
||||
- run: brew tap wix/brew
|
||||
- run: brew install applesimutils
|
||||
- run: yarn detox test e2e/tests/room --configuration ios.sim.release --cleanup
|
||||
|
||||
- name: Upload test artifacts
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: artifacts
|
||||
path: artifacts
|
||||
|
||||
detox-test-assorted:
|
||||
needs: detox-build
|
||||
runs-on: macos-latest
|
||||
timeout-minutes: 60
|
||||
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_11.5.app
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Generate Detox app cache key
|
||||
run: echo $(git rev-parse HEAD:app) > "./app-git-revision.txt"
|
||||
|
||||
- name: Cache Detox app
|
||||
uses: actions/cache@v1
|
||||
id: detoxappcache
|
||||
with:
|
||||
path: ios/build/Build/Products/Release-iphonesimulator
|
||||
key: iOSDetoxRelease-v4-${{ hashFiles('yarn.lock') }}-${{ hashFiles('ios/Podfile.lock') }}-${{ hashFiles('./app-git-revision.txt') }}
|
||||
|
||||
- name: Check for Detox app
|
||||
if: steps.detoxappcache.outputs.cache-hit != 'true'
|
||||
run: exit 1
|
||||
|
||||
- name: Node
|
||||
uses: actions/setup-node@v1
|
||||
|
||||
- name: Cache node modules
|
||||
uses: actions/cache@v1
|
||||
id: npmcache
|
||||
with:
|
||||
path: node_modules
|
||||
key: node-modules-${{ hashFiles('**/yarn.lock') }}
|
||||
|
||||
- name: Rebuild detox
|
||||
if: steps.npmcache.outputs.cache-hit == 'true'
|
||||
run: yarn detox clean-framework-cache && yarn detox build-framework-cache
|
||||
|
||||
- name: Install Dependencies
|
||||
if: steps.npmcache.outputs.cache-hit != 'true'
|
||||
run: yarn install
|
||||
|
||||
- run: brew tap wix/brew
|
||||
- run: brew install applesimutils
|
||||
- run: yarn detox test e2e/tests/assorted --configuration ios.sim.release --cleanup
|
||||
|
||||
- name: Upload test artifacts
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: artifacts
|
||||
path: artifacts
|
||||
|
||||
detox-test-onboarding:
|
||||
needs: detox-build
|
||||
runs-on: macos-latest
|
||||
timeout-minutes: 60
|
||||
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_11.5.app
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Generate Detox app cache key
|
||||
run: echo $(git rev-parse HEAD:app) > "./app-git-revision.txt"
|
||||
|
||||
- name: Cache Detox app
|
||||
uses: actions/cache@v1
|
||||
id: detoxappcache
|
||||
with:
|
||||
path: ios/build/Build/Products/Release-iphonesimulator
|
||||
key: iOSDetoxRelease-v4-${{ hashFiles('yarn.lock') }}-${{ hashFiles('ios/Podfile.lock') }}-${{ hashFiles('./app-git-revision.txt') }}
|
||||
|
||||
- name: Check for Detox app
|
||||
if: steps.detoxappcache.outputs.cache-hit != 'true'
|
||||
run: exit 1
|
||||
|
||||
- name: Node
|
||||
uses: actions/setup-node@v1
|
||||
|
||||
- name: Cache node modules
|
||||
uses: actions/cache@v1
|
||||
id: npmcache
|
||||
with:
|
||||
path: node_modules
|
||||
key: node-modules-${{ hashFiles('**/yarn.lock') }}
|
||||
|
||||
- name: Rebuild detox
|
||||
if: steps.npmcache.outputs.cache-hit == 'true'
|
||||
run: yarn detox clean-framework-cache && yarn detox build-framework-cache
|
||||
|
||||
- name: Install Dependencies
|
||||
if: steps.npmcache.outputs.cache-hit != 'true'
|
||||
run: yarn install
|
||||
|
||||
- run: brew tap wix/brew
|
||||
- run: brew install applesimutils
|
||||
- run: yarn detox test e2e/tests/onboarding --configuration ios.sim.release --cleanup
|
||||
|
||||
- name: Upload test artifacts
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: artifacts
|
||||
path: artifacts
|
Loading…
Reference in New Issue