diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..395fc29f0d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,114 @@ + +.dockerignore +docker-build +env/dev/env/config.cljs +modules/react-native-status/android/build + + +# OSX +# +.DS_Store +.projectile +.cljs_rhino_repl/ +.#* + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace + +# Android/IJ +# +.idea +.gradle +local.properties +*.iml + +# Atom +.tags* + +# node.js +# +node_modules/ +npm-debug.log +.nvmrc + +# BUCK +buck-out/ +\.buckd/ +android/app/libs +android/app/obj +android/app/build +android/build +android/keystores/debug.keystore + +# Generated by re-natal +# +index.android.js +index.ios.js +target/ +env/dev/env/config.cljs +.re-natal.local +externs/ +shim.js + +# Generated by lein voom +# +/pom.xml + + +# Figwheel +# +figwheel_server.log +.nrepl-port + +# Lein +# +.lein-failures +.lein-repl-history + +## Doo +# +out +doo-index.html + +# Re-natal +re-natal + +# Status +Statusgo.framework +status-go-local.aar +status-dev-cli + +#ios +ios/Pods +ios/StatusIm.xcworkspace +.ruby-version + +#python +*.pyc +*.cache + +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +*/fastlane/report.xml +*/fastlane/Preview.html +*/fastlane/screenshots diff --git a/Makefile b/Makefile index 46e49fda4a..4711bfcde4 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: react-native test +.PHONY: react-native test setup help: ##@other Show this help @perl -e '$(HELP_FUN)' $(MAKEFILE_LIST) @@ -130,18 +130,23 @@ geth-connect: ##@other Connect to Geth on the device adb forward tcp:8545 tcp:8545 build/bin/geth attach http://localhost:8545 -android-ports: ##@other Add reverse proxy to Android Device/Simulator - adb reverse tcp:8081 tcp:8081 - adb reverse tcp:3449 tcp:3449 - adb reverse tcp:4567 tcp:4567 +android-ports-avd: ##@other Add reverse proxy to Android Device/Simulator + adb -e reverse tcp:8081 tcp:8081 + adb -e reverse tcp:3449 tcp:3449 + adb -e reverse tcp:4567 tcp:4567 + +android-ports-real: ##@other Add reverse proxy to Android Device/Simulator + adb -d reverse tcp:8081 tcp:8081 + adb -d reverse tcp:3449 tcp:3449 + adb -d reverse tcp:4567 tcp:4567 + startdev-%: $(eval SYSTEM := $(word 2, $(subst -, , $@))) $(eval DEVICE := $(word 3, $(subst -, , $@))) - if [[ "$(SYSTEM)" == "android" ]]; then\ - ${MAKE} prepare && ${MAKE} android-ports; \ - else \ - ${MAKE} prepare-ios; \ - fi + case "$(SYSTEM)" in \ + "android") ${MAKE} prepare && ${MAKE} android-ports-$(DEVICE);; \ + "ios") ${MAKE} prepare-ios;; \ + esac ${MAKE} dev-$(SYSTEM)-$(DEVICE) ${MAKE} -j2 react-native repl-$(SYSTEM) diff --git a/docker-build/Dockerfile b/docker-build/Dockerfile new file mode 100644 index 0000000000..0da503dcf6 --- /dev/null +++ b/docker-build/Dockerfile @@ -0,0 +1,99 @@ +FROM openjdk:8-jdk + +ENV DEBIAN_FRONTEND noninteractive +ENV ANDROID_HOME /opt/android-sdk-linux +ENV PATH ${PATH}:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools:${PATH}:${ANDROID_HOME}/tools +ENV ANDROID_NDK /opt/android-ndk-linux +ENV ANDROID_NDK_HOME /opt/android-ndk-linux + +WORKDIR /opt + +RUN mkdir -p /opt/android-sdk-linux && mkdir -p ~/.android && touch ~/.android/repositories.cfg + +# Install dependencies +RUN apt-get update && \ + apt-get install -yq supervisor curl unzip wget sudo maven libc6 libstdc++6 zlib1g libncurses5 make file --no-install-recommends && \ + apt-get clean + +RUN cd /opt/android-sdk-linux && \ + wget -q --output-document=sdk-tools.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip && \ + unzip sdk-tools.zip && \ + rm -f sdk-tools.zip && \ + sdkmanager "cmake;3.6.4111459" + +RUN cd /opt/android-sdk-linux && \ + wget -q --output-document=sdk-platform-tools.zip 'https://dl.google.com/android/repository/platform-tools-latest-linux.zip' && \ + unzip sdk-platform-tools.zip && \ + rm -f sdk-platform-tools.zip + +RUN wget -q --output-document=android-ndk.zip https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip && \ + unzip android-ndk.zip && \ + rm -f android-ndk.zip && \ + mv android-ndk-r15c android-ndk-linux + +RUN yes | sdkmanager --licenses + +# install Node JS (https://github.com/nodejs/docker-node/blob/90d5e3df903b830d039d3fe8f30e3a62395db37e/7.5/Dockerfile) + +RUN groupadd --gid 1000 node \ + && useradd --uid 1000 --gid node --shell /bin/bash --create-home node + +ENV NPM_CONFIG_LOGLEVEL info +# that's the only version that doesn't hang on installing react-native-http inside docker +ENV NODE_VERSION 8.9.1 +ENV NODE_ENV development + +RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \ + && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \ + && rm "node-v$NODE_VERSION-linux-x64.tar.xz" \ + && ln -s /usr/local/bin/node /usr/local/bin/nodejs + +# END install Node JS + +# Support Gradle +ENV TERM dumb + +# Install Lein +# Check out latest releases from https://github.com/technomancy/leiningen/releases +ENV LEIN_VERSION=2.8.1 +ENV LEIN_INSTALL=/usr/local/bin/ + +RUN mkdir -p $LEIN_INSTALL \ + && wget -q https://raw.githubusercontent.com/technomancy/leiningen/$LEIN_VERSION/bin/lein-pkg \ + && mv lein-pkg $LEIN_INSTALL/lein \ + && chmod 0755 $LEIN_INSTALL/lein \ + && wget -q https://github.com/technomancy/leiningen/releases/download/$LEIN_VERSION/leiningen-$LEIN_VERSION-standalone.zip \ + && mkdir -p /usr/share/java \ + && mv leiningen-$LEIN_VERSION-standalone.zip /usr/share/java/leiningen-$LEIN_VERSION-standalone.jar + +# Install React-Native +RUN npm install -g react-native-cli + +# Add files needed for installing dependencies +# Use directory /build for that purpose +WORKDIR /build + +ADD .env.jenkins .env + +ADD ./project.clj ./ + +RUN lein deps + +ADD ./package.json package-lock.json ./ + +RUN npm install + +ADD . ./ + +RUN make setup +RUN make prepare + +COPY supervisord.conf /etc/supervisord.conf + +RUN keytool -genkey -v -keystore status-im.keystore -storepass password -alias status -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=mqttserver.ibm.com, OU=ID, O=IBM, L=Hursley, S=Hants, C=GB" -keypass password +RUN mkdir -p /root/.gradle +RUN mv status-im.keystore /root/.gradle/ + +RUN ./android/gradlew --parallel -q -b android/build.gradle assembleRelease + +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"] diff --git a/docker-build/README.md b/docker-build/README.md new file mode 100644 index 0000000000..3715b2261d --- /dev/null +++ b/docker-build/README.md @@ -0,0 +1,37 @@ +# Build + +``` +docker-compose -f docker-build/docker-compose.yml build +``` + +This will install all the required sdks, depending on the connection will take some time. + +# Run + +``` +docker-compose -f docker-build/docker-compose.yml up +``` + +This will start `adbd` and `fighwheel` listening on port `4567`. + +You need to connect your device and accept the key. + +After the figwheel prompt you can install the application running: + +``` +docker-compose -f docker-build/docker-compose.yml exec adbd make run-android +``` + +# Notes + +## Adbd key + +The adbd key is generated every time you start/stop the container, so you will have to accept it if that happens. + +## Security + +This will give the docker image access to your USB devices and run in priviliged mode, so run at your own risk. + +## Multiple adbd + +You will need to make sure no `adbd` is running on your local machine, as that would interfer with the one running in docker. diff --git a/docker-build/docker-compose.yml b/docker-build/docker-compose.yml new file mode 100644 index 0000000000..9e7bc37eae --- /dev/null +++ b/docker-build/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3' +services: + adbd: + privileged: true + build: + context: $PWD + dockerfile: docker-build/Dockerfile + ports: + - 4567:4567 + volumes: + - /dev/bus/usb:/dev/bus/usb + - ../src:/build/src + - ../test:/build/test + - ../android/app/src/:/build/android/app/src + diff --git a/supervisord.conf b/supervisord.conf new file mode 100644 index 0000000000..486f37d2aa --- /dev/null +++ b/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon = true + +[program:fighweel] +command = make startdev-android-real +autorestart = true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stdout +stderr_logfile_maxbytes=0 + +[program:adbd] +command = adb -a -P 5037 server nodaemon +autorestart = true