Skip to content

Commit 8f9453a

Browse files
committed
Add the foundations of the Orb
1 parent 67d12db commit 8f9453a

12 files changed

+227
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/config.yml

scripts/pack.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
set -e
3+
circleci config pack src > config.yml

src/@orb.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
version: 2.1
2+
description: Orb for building and testing React Native projects

src/commands/android_build.yml

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
parameters:
2+
project_path:
3+
type: string
4+
default: "./android"
5+
app_build_type:
6+
type: enum
7+
enum: ["Debug", "Release"]
8+
default: "Debug"
9+
test_build_type:
10+
type: enum
11+
enum: ["debug", "release"]
12+
default: "debug"
13+
14+
steps:
15+
- run:
16+
name: Create cache checksum files
17+
command: |
18+
mkdir -p ~/.tmp/checksumfiles
19+
find . -type f -name 'build.gradle' -not -path "*node_modules*" -exec cat {} + >> ~/.tmp/checksumfiles/build.gradle
20+
find . -type f -name 'settings.gradle' -not -path "*node_modules*" -exec cat {} + >> ~/.tmp/checksumfiles/settings.gradle
21+
- restore_cache:
22+
key: |
23+
gradle-wrapper-{{ arch }}-{{ checksum "<<parameters.project_path>>/gradle/wrapper/gradle-wrapper.properties" }}-{{ .Environment.CACHE_VERSION }}
24+
- restore_cache:
25+
keys:
26+
- gradle-home-cache-{{ arch }}-{{ checksum "~/.tmp/checksumfiles/build.gradle" }}-{{ checksum "~/.tmp/checksumfiles/settings.gradle" }}-{{ .Environment.CACHE_VERSION }}
27+
- gradle-home-cache
28+
- restore_cache:
29+
name: Restoring Gradle Build caches
30+
keys:
31+
- gradle-build-cache-{{ .Revision }}
32+
- gradle-build-cache
33+
- run:
34+
name: Dispersing Gradle Build caches for restoring
35+
command: |
36+
[ -d ~/gradle-build-caches ] &&
37+
[ -n "$(ls -A ~/gradle-build-caches)" ] &&
38+
rm -rf ~/.gradle/caches/build-cache-* &&
39+
mkdir -p ~/.gradle/caches/ &&
40+
mv ~/gradle-build-caches/* ~/.gradle/caches/ || true
41+
# download and cache dependencies and Gradle
42+
- run:
43+
name: Downloading Gradle Dependencies
44+
command: "cd <<parameters.project_path>> && ./gradlew --max-workers 2 downloadDependencies"
45+
- save_cache:
46+
name: Saving Gradle wrapper cache
47+
paths:
48+
- ~/.gradle/wrapper/
49+
key: gradle-wrapper-{{ checksum "<<parameters.project_path>>/gradle/wrapper/gradle-wrapper.properties" }}
50+
- save_cache:
51+
name: Saving Gradle home cache
52+
paths:
53+
- ~/.gradle/caches/
54+
key: gradle-home-cache-{{ checksum "~/.tmp/checksumfiles/build.gradle" }}-{{ checksum "~/.tmp/checksumfiles/settings.gradle" }}
55+
- run:
56+
name: Build Android Debug APK
57+
command: "cd <<parameters.project_path>> && chmod +x gradlew && ./gradlew --build-cache --max-workers 2 --continue assemble<<parameters.app_build_type>> assembleAndroidTest -DtestBuildType=<<parameters.test_build_type>> --stacktrace"
58+
- run:
59+
name: Collecting Gradle Build caches for saving
60+
command: |
61+
mkdir -p ~/gradle-build-caches
62+
[ -d ~/.gradle/caches ] &&
63+
[ -n "$(ls -Ad ~/.gradle/caches/build-cache-* 2>/dev/null)" ] &&
64+
rm -rf ~/gradle-build-caches/* &&
65+
mv ~/.gradle/caches/build-cache-* ~/gradle-build-caches || true
66+
when: always
67+
- save_cache:
68+
name: Saving Gradle Build caches
69+
paths:
70+
- ~/gradle-build-caches
71+
key: gradle-debug-build-cache-{{ .Revision }}
72+
when: always
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
parameters:
2+
platform_version:
3+
type: string
4+
default: "android-28"
5+
build_tools_version:
6+
type: string
7+
default: "28.0.3"
8+
9+
steps:
10+
- run:
11+
name: Install Android Emulator
12+
shell: /bin/bash -e
13+
command: |
14+
yes | sdkmanager "platform-tools" "tools" >/dev/null
15+
yes | sdkmanager "platforms;<<parameters.platform_version>>" "system-images;<<parameters.platform_version>>;google_apis;x86" >/dev/null
16+
yes | sdkmanager "emulator" --channel=3 >/dev/null
17+
yes | sdkmanager "build-tools;<<parameters.build_tools_version>>" >/dev/null
18+
yes | sdkmanager --licenses >/dev/null
19+
yes | sdkmanager --list
20+
21+
# to force ssh key generation for emulators
22+
- run:
23+
name: ADB Start Stop
24+
command: |
25+
adb start-server
26+
adb devices
27+
adb kill-server
28+
ls -la ~/.android
29+
30+
- run:
31+
name: Create Android Emulator
32+
command: avdmanager create avd --force -n TestingAVD -k "system-images;<<parameters.platform_version>>;google_apis;x86" -g google_apis -d "Nexus 4"
33+
34+
- run:
35+
name: Start Android Emulator in background
36+
command: |
37+
/usr/local/share/android-sdk/emulator/emulator @TestingAVD -version
38+
/usr/local/share/android-sdk/emulator/emulator @TestingAVD -skin 470x860 -cores 1 -gpu auto -accel on -memory 1024 -no-audio -no-snapshot -no-boot-anim -no-window -logcat *:W | grep -i 'ReactNative\|com.reactnativecommunity\|RNCNetInfo'
39+
background: true
40+
41+
- run:
42+
name: Wait for AVD to be ready
43+
no_output_timeout: "5m"
44+
command: |
45+
boot=""
46+
echo "Waiting for AVD to finish booting"
47+
export PATH=$(dirname $(dirname $(command -v android)))/platform-tools:$PATH
48+
until [[ "$boot" =~ "1" ]]; do
49+
sleep 5
50+
boot=$(adb -e shell getprop sys.boot_completed 2>&1)
51+
done
52+
sleep 15 # extra time to let the OS settle
53+
adb shell settings put global window_animation_scale 0
54+
adb shell settings put global transition_animation_scale 0
55+
adb shell settings put global animator_duration_scale 0
56+
echo "Android Virtual Device is now ready."

src/commands/android_sdk_install.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
steps:
2+
- run:
3+
name: Configure Environment Variables
4+
command: |
5+
echo 'export PATH="$PATH:/usr/local/opt/node@8/bin:~/.yarn/bin:~/project/node_modules/.bin:~/project/example/node_modules/.bin"' >> $BASH_ENV
6+
echo 'export ANDROID_HOME="/usr/local/share/android-sdk"' >> $BASH_ENV
7+
echo 'export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"' >> $BASH_ENV
8+
echo 'export PATH="$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$PATH"' >> $BASH_ENV
9+
echo 'export QEMU_AUDIO_DRV=none' >> $BASH_ENV
10+
echo 'export JAVA_HOME=/Library/Java/Home' >> $BASH_ENV
11+
source $BASH_ENV
12+
- run:
13+
name: Install Android SDK Tools
14+
command: |
15+
HOMEBREW_NO_AUTO_UPDATE=1 brew tap homebrew/cask >/dev/null
16+
HOMEBREW_NO_AUTO_UPDATE=1 brew cask install android-sdk >/dev/null
17+
HOMEBREW_NO_AUTO_UPDATE=1 brew cask install intel-haxm >/dev/null
18+
HOMEBREW_NO_AUTO_UPDATE=1 brew install node@8 >/dev/null >/dev/null

src/commands/ios_simulator_start.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
parameters:
2+
device:
3+
type: string
4+
default: "iPhone X"
5+
6+
steps:
7+
- run:
8+
name: Start iOS simulator (background)
9+
background: true
10+
command: xcrun simctl boot "<<parameters.device>>" || true

src/commands/setup_macos_executor.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
steps:
2+
- run:
3+
name: Configure Environment Variables
4+
command: |
5+
echo 'export PATH="$PATH:/usr/local/opt/node@8/bin:~/.yarn/bin:~/project/node_modules/.bin:~/project/example/node_modules/.bin"' >> $BASH_ENV
6+
echo 'export ANDROID_HOME="/usr/local/share/android-sdk"' >> $BASH_ENV
7+
echo 'export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"' >> $BASH_ENV
8+
echo 'export PATH="$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$PATH"' >> $BASH_ENV
9+
echo 'export QEMU_AUDIO_DRV=none' >> $BASH_ENV
10+
echo 'export JAVA_HOME=/Library/Java/Home' >> $BASH_ENV
11+
source $BASH_ENV
12+
13+
- restore_cache:
14+
key: |
15+
brew-cache-{{ arch }}-{{ .Environment.CACHE_VERSION }}
16+
17+
- run:
18+
name: Configure Detox Environment
19+
command: |
20+
HOMEBREW_NO_AUTO_UPDATE=1 brew tap wix/brew >/dev/null
21+
HOMEBREW_NO_AUTO_UPDATE=1 brew tap homebrew/cask >/dev/null
22+
HOMEBREW_NO_AUTO_UPDATE=1 brew install node@8 >/dev/null
23+
HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils >/dev/null
24+
HOMEBREW_NO_AUTO_UPDATE=1 brew cask install android-sdk >/dev/null
25+
HOMEBREW_NO_AUTO_UPDATE=1 brew cask install intel-haxm >/dev/null
26+
touch .watchmanconfig
27+
node -v
28+
29+
- save_cache:
30+
paths:
31+
- /usr/local/Homebrew
32+
- ~/Library/Caches/Homebrew
33+
key: |
34+
brew-cache-{{ arch }}-{{ .Environment.CACHE_VERSION }}

src/commands/yarn_install.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
steps:
2+
- run:
3+
name: Create cache checksum file
4+
command: |
5+
mkdir -p ~/.tmp/checksumfiles
6+
find . -type f -name 'package.json' -not -path "*node_modules*" -exec cat {} + >> ~/.tmp/checksumfiles/package.json
7+
- restore_cache:
8+
key: |
9+
yarn-cache-{{ arch }}-{{ checksum "~/.tmp/checksumfiles/package.json" }}-{{ checksum "yarn.lock" }}-{{ .Environment.CACHE_VERSION }}
10+
- run:
11+
name: Yarn Install
12+
command: yarn install --non-interactive --cache-folder ~/.cache/yarn
13+
- save_cache:
14+
paths:
15+
- ~/.cache/yarn
16+
key: |
17+
yarn-cache-{{ arch }}-{{ checksum "~/.tmp/checksumfiles/package.json" }}-{{ checksum "yarn.lock" }}-{{ .Environment.CACHE_VERSION }}

src/executors/linux_android.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
docker:
2+
- image: reactnativecommunity/react-native-android
3+
resource_class: 'medium'
4+
environment:
5+
- _JAVA_OPTIONS: '-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Xmx2048m'
6+
- GRADLE_OPTS: '-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-XX:+HeapDumpOnOutOfMemoryError -Xmx2048m"'
7+
- BUILD_THREADS: 2

0 commit comments

Comments
 (0)