[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
|
name: Restore gradle cache
|
||||||
key: android-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }}
|
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
|
version: 2.1
|
||||||
|
|
||||||
# EXECUTORS
|
# EXECUTORS
|
||||||
|
@ -107,39 +84,6 @@ executors:
|
||||||
environment:
|
environment:
|
||||||
<<: *bash-env
|
<<: *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
|
||||||
jobs:
|
jobs:
|
||||||
lint-testunit:
|
lint-testunit:
|
||||||
|
@ -174,57 +118,6 @@ jobs:
|
||||||
|
|
||||||
- save_cache: *save-npm-cache-linux
|
- 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 builds
|
||||||
android-build:
|
android-build:
|
||||||
<<: *defaults
|
<<: *defaults
|
||||||
|
@ -433,23 +326,6 @@ workflows:
|
||||||
jobs:
|
jobs:
|
||||||
- lint-testunit
|
- 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:
|
- ios-build:
|
||||||
requires:
|
requires:
|
||||||
- lint-testunit
|
- 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