Remove build Dockerfiles and NVM script

This commit is contained in:
Pedro Pombeiro 2019-03-06 22:49:44 +01:00
parent 5440378bbc
commit 4569e2283c
No known key found for this signature in database
GPG Key ID: C4A24185B2AA48A1
17 changed files with 1 additions and 958 deletions

View File

@ -1,21 +1,5 @@
android-ndk;r10e;070be287539e3e7706f8dabfb6bf9879
android-sdk-build-tools;28.0.1;
android-sdk-platform;android-27;
android-sdk;4333796;aa190cfd7299cd6a1c687355bb2764e4
bundler;1.17.2;bundler
clojure_cli;1.9.0.391;
cmake;3.11.2;
conan;1.12.0;
golang;1.11.5;
leiningen;2.8.1;
maven;3.5.4;
nix;2.2.1;
node;8.15.0;
nvm;0.33.11;
qt;5.11.2;974fda61267cfb6e45984ee5f0a285f8
qtci;55ffd9f225708b3aa1443851cfa8dead2c1f9959;
react_native_cli;2.0.1;
react_native_desktop;v0.56.1_4;
watchman;4.9.0;
windows_base_image;20181113;2d1a92dbef85bab94d8f7e571a5e0d10
yarn;1.13.0;

View File

@ -1,5 +1,5 @@
{:paths ["components/src" "src" "react-native/src/cljsjs" "resources"]
:deps {org.clojure/clojure {:mvn/version "1.9.0"} ;; Keep in sync with .TOOLVERSIONS
:deps {org.clojure/clojure {:mvn/version "1.9.0"} ;; Keep in sync with version from Nix
org.clojure/clojurescript {:mvn/version "1.10.238"}
org.clojure/core.async {:mvn/version "0.4.474"}
reagent {:mvn/version "0.7.0"

View File

@ -1,76 +0,0 @@
# This image is only for extracting and cleaning up NDK and SDK
ARG BASE_IMAGE_TAG
FROM statusteam/status-build-base:${BASE_IMAGE_TAG} AS sdk_and_ndk
ARG ANDROID_NDK_VERSION
ARG ANDROID_SDK_VERSION
ARG SDK_PLATFORM_VERSION
ARG SDK_BUILD_TOOLS_VERSION
# names of packages to install with sdkmanager
ENV SDK_PACKAGES emulator patcher;v4 \
platforms;android-26 \
platforms;${SDK_PLATFORM_VERSION} \
build-tools;${SDK_BUILD_TOOLS_VERSION} \
extras;android;m2repository extras;google;m2repository
# install SDK
COPY sdk-tools-linux-${ANDROID_SDK_VERSION}.zip /tmp/sdk-tools-linux.zip
RUN unzip -q /tmp/sdk-tools-linux.zip -d /usr/lib/android-sdk \
&& mkdir ~/.android && touch ~/.android/repositories.cfg \
&& yes | /usr/lib/android-sdk/tools/bin/sdkmanager --licenses > /dev/null \
&& for PKG in ${SDK_PACKAGES}; do \
yes | /usr/lib/android-sdk/tools/bin/sdkmanager --install "${PKG}" > /dev/null; done \
&& chmod 777 -R /usr/lib/android-sdk
# cleanup SDK
RUN cd /usr/lib/android-sdk \
&& rm -fr extras emulator ndk-bundle/toolchains/{aarch64-linux-android-4.9,x86-4.9,x86_64-4.9,llvm}
# install NDK
COPY android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip /tmp/android-ndk-linux.zip
RUN unzip -q /tmp/android-ndk-linux.zip -d /usr/lib \
&& ln -sf /usr/lib/android-ndk-${ANDROID_NDK_VERSION} /usr/lib/android-ndk \
&& chmod 777 -R /usr/lib/android-ndk
# cleanup NDK
RUN cd /usr/lib/android-ndk && rm -fr docs tests samples \
&& find toolchains -mindepth 1 -maxdepth 1 | grep -vE '(arm|aarch|x86|mips).*4.(8|9)' | xargs rm -fr \
&& find prebuilt -mindepth 1 -maxdepth 1 | grep -vE '(android-arm|linux-x86)' | xargs rm -fr \
&& find platforms -mindepth 1 -maxdepth 1 | grep -v android-21 | xargs rm -fr \
&& find sources -mindepth 2 -maxdepth 2 | grep -v 'gnu-libstdc' | xargs rm -fr
################################################################################
FROM statusteam/status-build-base:${BASE_IMAGE_TAG}
ARG BUNDLER_VERSION
ARG ANDROID_NDK_VERSION
ARG ANDROID_SDK_VERSION
# We have to do this because Jenkins doesn't let us
# https://issues.jenkins-ci.org/browse/JENKINS-49076
ENV GRADLE_USER_HOME=/var/tmp/gradle \
BUNDLE_PATH=/var/tmp/bundle \
ANDROID_HOME=/usr/lib/android-sdk \
ANDROID_SDK_ROOT=/usr/lib/android-sdk \
ANDROID_NDK=/usr/lib/android-ndk \
ANDROID_NDK_HOME=/usr/lib/android-ndk
# Install Android SDK & NDK
COPY --from=sdk_and_ndk /usr/lib/android-sdk /usr/lib/android-sdk
COPY --from=sdk_and_ndk /usr/lib/android-ndk /usr/lib/android-ndk
RUN chmod o+w /usr/lib/android-sdk /usr/lib/android-ndk
RUN add-apt-repository -y ppa:cwchien/gradle \
&& apt-add-repository -y ppa:brightbox/ruby-ng \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get -q -y --no-install-recommends install \
gradle ruby2.5 ruby2.5-dev \
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man
RUN gem install bundler -v ${BUNDLER_VERSION} \
&& gem install json cocoapods CFPropertyList
LABEL source="https://github.com/status-im/status-react/tree/develop/docker/android" \
description="Image for building Android version of Status app." \
maintainer="jakub@status.im"

View File

@ -1,59 +0,0 @@
__toolversion = $(shell $(GIT_ROOT)/scripts/toolversion $(1))
GIT_COMMIT = $(shell git rev-parse --short HEAD)
GIT_ROOT = $(shell git rev-parse --show-toplevel)
ANDROID_NDK_VERSION = $(call __toolversion, android-ndk)
ANDROID_NDK_CHECKSUM = $(call __toolversion, -c android-ndk)
ANDROID_NDK_ARCHIVE = android-ndk-$(ANDROID_NDK_VERSION)-linux-x86_64.zip
ANDROID_NDK_URL = https://dl.google.com/android/repository/$(ANDROID_NDK_ARCHIVE)
ANDROID_SDK_VERSION = $(call __toolversion, android-sdk)
ANDROID_SDK_CHECKSUM = $(call __toolversion, -c android-sdk)
ANDROID_SDK_URL = https://dl.google.com/android/repository/sdk-tools-linux-$(ANDROID_SDK_VERSION).zip
ANDROID_SDK_ARCHIVE = sdk-tools-linux-$(ANDROID_SDK_VERSION).zip
BUNDLER_VERSION=$(call __toolversion, bundler)
SDK_PLATFORM_VERSION=$(call __toolversion, android-sdk-platform)
SDK_BUILD_TOOLS_VERSION=$(call __toolversion, android-sdk-build-tools)
# WARNING: Remember to change the tag when updating the image
BASE_IMAGE_TAG = $(shell cd $(GIT_ROOT)/docker/base && make get-image-tag)
DEPS_HASH = $(shell $(GIT_ROOT)/scripts/gen-deps-hash.sh -b $(BASE_IMAGE_TAG) \
-d bundler \
-d android-ndk \
-d android-sdk \
-d android-sdk-platform \
-d android-sdk-build-tools)
IMAGE_TAG = 1.1.2-$(DEPS_HASH)
IMAGE_NAME = statusteam/status-build-android:$(IMAGE_TAG)
build: $(ANDROID_NDK_ARCHIVE) $(ANDROID_SDK_ARCHIVE)
docker build \
--build-arg="BASE_IMAGE_TAG=$(BASE_IMAGE_TAG)" \
--build-arg="BUNDLER_VERSION=$(BUNDLER_VERSION)" \
--build-arg="ANDROID_NDK_VERSION=$(ANDROID_NDK_VERSION)" \
--build-arg="ANDROID_SDK_VERSION=$(ANDROID_SDK_VERSION)" \
--build-arg="SDK_BUILD_TOOLS_VERSION=$(SDK_BUILD_TOOLS_VERSION)" \
--build-arg="SDK_PLATFORM_VERSION=$(SDK_PLATFORM_VERSION)" \
--label="commit=$(GIT_COMMIT)" \
-t $(IMAGE_NAME) .
$(ANDROID_NDK_ARCHIVE):
wget -q "$(ANDROID_NDK_URL)" -O "$(ANDROID_NDK_ARCHIVE)"
echo "$(ANDROID_NDK_CHECKSUM) $(ANDROID_NDK_ARCHIVE)" | md5sum --check
$(ANDROID_SDK_ARCHIVE):
wget -q "$(ANDROID_SDK_URL)" -O "$(ANDROID_SDK_ARCHIVE)"
echo "$(ANDROID_SDK_CHECKSUM) $(ANDROID_SDK_ARCHIVE)" | md5sum --check
test: ## Run build inside the image as a test
docker run -u $(shell id -u):$(shell id -g) \
--name android-test --rm \
--tmpfs /var/tmp:rw,size=1G,exec,mode=1777 \
-v $(GIT_ROOT):/repo:rw \
-w /repo $(IMAGE_NAME) \
docker/android/build.sh
push: build
docker push $(IMAGE_NAME)

View File

@ -1,3 +0,0 @@
# Description
This dockerfile is used to generate an image based on Ubuntu that will be used by Jenkins to build the Android version of the Status app.

View File

@ -1,23 +0,0 @@
#!/usr/bin/env bash
set -e -x
export FASTLANE_DISABLE_COLORS=1
export REALM_DISABLE_ANALYTICS=1
export YARN_CACHE_FOLDER=/var/tmp/yarn
export NPM_CONFIG_CACHE=/var/tmp/npm
export HOME=/tmp
make clean
## Prep
bundle install --quiet
make prepare-android
## Lint
lein cljfmt check
## Test
lein test-cljs
## Build
lein prod-build-android
# Compile
cd android
./gradlew assembleDebug -Dorg.gradle.daemon=false

View File

@ -1,60 +0,0 @@
FROM ubuntu:16.04
ARG NODE_VERSION
ARG YARN_VERSION
ARG LEIN_VERSION
# We have to do this because Jenkins doesn't let us
# https://issues.jenkins-ci.org/browse/JENKINS-49076
ENV PATH=/home/jenkins/.nvm/versions/node/v${NODE_VERSION}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
LANG=en_US.UTF-8 \
LC_ALL=en_US.UTF-8 \
LANGUAGE=en_US.UTF-8 \
LEIN_HOME=/var/tmp/lein \
LEIN_URL=https://raw.githubusercontent.com/technomancy/leiningen/${LEIN_VERSION}/bin/lein \
YARN_CACHE_FOLDER=/var/tmp/yarn \
NVM_DIR=/home/jenkins/.nvm
RUN mkdir /var/tmp/npm /var/tmp/lein \
&& chmod 777 /var/tmp/npm /var/tmp/lein \
&& apt-get update && apt-get -q -y --no-install-recommends install curl software-properties-common \
&& add-apt-repository -y ppa:webupd8team/java \
&& echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections \
&& echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections \
&& curl -sL https://deb.nodesource.com/setup_10.x | bash - \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get -q -y --no-install-recommends install \
file autoconf automake libtool build-essential \
jq git wget zip unzip s3cmd nodejs locales \
ca-certificates oracle-java8-installer oracle-java8-set-default \
&& locale-gen ${LANG} \
&& npm install -g yarn@${YARN_VERSION} \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man
# These are the UID and GID values used by Jenkins
RUN addgroup --gid 1001 jenkins \
&& adduser --shell /bin/bash \
--disabled-password --gecos "" \
--uid 1001 --gid 1001 jenkins \
&& su jenkins -c "git config --global user.email 'jenkins'" \
&& su jenkins -c "git config --global user.name 'jenkins@status.im'"
# Leiningen setup
RUN wget ${LEIN_URL} -O /usr/local/bin/lein \
&& chmod 755 /usr/local/bin/lein \
&& lein version
# Install NVM for Jenkins
ADD nvm_install.sh /tmp/nvm_install.sh
RUN su -l jenkins -c \
"bash /tmp/nvm_install.sh && \
. ${NVM_DIR}/nvm.sh && \
nvm install ${NODE_VERSION} && \
nvm alias default ${NODE_VERSION}"
WORKDIR /home/jenkins
LABEL source="https://github.com/status-im/status-react/tree/develop/docker/base" \
description="Base Image used for building Status app." \
maintainer="jakub@status.im"

View File

@ -1,26 +0,0 @@
__toolversion = $(shell $(GIT_ROOT)/scripts/toolversion $(1))
GIT_COMMIT = $(shell git rev-parse --short HEAD)
GIT_ROOT = $(shell git rev-parse --show-toplevel)
# WARNING: Remember to change the tag when updating the image
DEPS_HASH = $(shell $(GIT_ROOT)/scripts/gen-deps-hash.sh -d leiningen -d node -d yarn)
IMAGE_TAG = 1.1.1-$(DEPS_HASH)
IMAGE_NAME = statusteam/status-build-base:$(IMAGE_TAG)
build: nvm_install.sh
docker build \
--build-arg="LEIN_VERSION=$(call __toolversion, leiningen)" \
--build-arg="NODE_VERSION=$(call __toolversion, node)" \
--build-arg="YARN_VERSION=$(call __toolversion, yarn)" \
--label="commit=$(GIT_COMMIT)" \
-t $(IMAGE_NAME) .
nvm_install.sh:
cp $(GIT_ROOT)/scripts/3rd-party/nvm/$(call __toolversion, nvm)/install.sh nvm_install.sh
push: build
docker push $(IMAGE_NAME)
get-image-tag:
@echo $(IMAGE_TAG)

View File

@ -1,12 +0,0 @@
# Descirption
This is a base Docker image used by all other images used for building the Status app.
# Packages
It includes:
* Generic utilities: `file`, `zip`, `unzip`, `curl`, `wget`, `s3cmd`
* Interpreters and compilters: `nodejs`, `java`
* Package and build mangers: `yarn`, `nvm`, `leiningen`
* User `jenkins` for use with Jenkins continuous integration system

View File

@ -1,95 +0,0 @@
ARG BASE_IMAGE_TAG
FROM statusteam/status-build-base:${BASE_IMAGE_TAG} AS qt_build
ARG QT_VERSION
ARG QT_CI_COMMIT
ARG RNATIVE_VERSION
ENV XDG_RUNTIME_DIR=/tmp/runtime-root
RUN apt-get update \
&& add-apt-repository -y ppa:git-core/ppa \
&& apt-get update \
&& apt-get -y install git libx11-xcb1 libxss1 libasound2 libfontconfig1 libdbus-1-3 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# This variable defines which parts of QT will be extracted from the .run file.
# You can list available packages in a Qt .run file by using:
# extract-qt-installer --list-packages qt-installer.run
ENV QT_CI_PACKAGES qt.qt5.5112.gcc_64,qt.qt5.5112.qtwebengine.gcc_64
# We run this as part of a separate container to reduce number of stages.
# We also remove some of the static-linked binaries since they are so big.
# Crucial ones: qmake,rcc,moc,uic,qdbuscpp2xml,qdbusxml2cpp,lrelease,lupdate,lconvert
# NOTE: Unfortunately GitHub doesn't support cloning a specific SHA1, so we need to
# resort to git fetch (https://stackoverflow.com/questions/3489173/how-to-clone-git-repository-with-specific-revision-changeset)
ADD qt-opensource-linux-x64-${QT_VERSION}.run /tmp/
RUN mkdir -p /tmp/qtci \
&& cd /tmp/qtci \
&& git init \
&& git remote add origin https://github.com/benlau/qtci.git \
&& git fetch --depth=1 origin ${QT_CI_COMMIT} \
&& git reset --hard FETCH_HEAD \
&& /tmp/qtci/bin/extract-qt-installer --disable-progress-report \
/tmp/qt-opensource-linux-x64-${QT_VERSION}.run /opt/qt-all \
&& find /opt/qt-all/${QT_VERSION}/gcc_64/bin -type f -regextype posix-egrep -regex \
'.*\/(qdoc|qgltf|linguist|designer|assistant|qhelpconverter|qmlprofiler)$' -delete \
&& rm -fr ${XDG_RUNTIME_DIR}
FROM statusteam/status-build-base:${BASE_IMAGE_TAG}
ARG QT_VERSION
ARG CMAKE_VERSION
COPY --from=qt_build /opt/qt-all/${QT_VERSION}/gcc_64 /opt/qt
RUN ln -s /opt/qt/mkspecs /usr/local/mkspecs \
&& ln -s /opt/qt/plugins /usr/local/plugins
# We have to do this because Jenkins doesn't let us
# https://issues.jenkins-ci.org/browse/JENKINS-49076
ARG NODE_VERSION
ENV PATH=/opt/qt/bin:/home/jenkins/.nvm/versions/node/v${NODE_VERSION}/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUN apt-get update \
&& add-apt-repository -y ppa:git-core/ppa \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get -q -y --no-install-recommends install \
python python3-pip python3-setuptools python3-wheel \
apt-transport-https openjdk-8-jdk-headless \
extra-cmake-modules build-essential gcc g++ fuse \
libx11-xcb1 libxss1 libasound2 libgl-dev libsm6 libxrandr2 python-dev \
libjasper-dev libegl1-mesa libxcomposite-dev libxcursor-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man
RUN cd /tmp \
&& wget -q https://cmake.org/files/v${CMAKE_VERSION%.*}/cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz \
&& tar xf cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz --strip 1 -C /usr/local \
&& rm -fr /usr/local/doc/cmake \
&& rm cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz
ARG GOLANG_VERSION
RUN cd /tmp \
&& wget -q https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz \
&& tar -C /usr/local -xzf go${GOLANG_VERSION}.linux-amd64.tar.gz \
&& rm go${GOLANG_VERSION}.linux-amd64.tar.gz
RUN mkdir -p /tmp/react-native-desktop \
&& cd /tmp/react-native-desktop \
&& git init \
&& git remote add origin https://github.com/status-im/react-native-desktop.git \
&& git fetch --quiet --depth=1 origin ${RNATIVE_VERSION} \
&& git reset --hard FETCH_HEAD \
&& cp -r /tmp/react-native-desktop/react-native-cli /opt \
&& cd /opt/react-native-cli \
&& npm update \
&& npm install -g --prefix /usr/local \
&& cd \
&& rm -r /tmp/react-native-desktop
LABEL source="https://github.com/status-im/status-react/tree/develop/docker/linux" \
description="Image for building Linux Desktop version of Status app." \
maintainer="jakub@status.im"

View File

@ -1,39 +0,0 @@
__toolversion = $(shell $(GIT_ROOT)/scripts/toolversion $(1))
__major_version = $(shell echo $(1) | cut -d. -f1,2)
GIT_COMMIT = $(shell git rev-parse --short HEAD)
GIT_ROOT = $(shell git rev-parse --show-toplevel)
QT_VERSION = $(call __toolversion, qt)
QT_MD5SUM = $(call __toolversion, -c qt)
QT_ARCHIVE = qt-opensource-linux-x64-$(QT_VERSION).run
QT_URL = https://download.qt.io/archive/qt
# WARNING: Remember to update `ci/Jenkinsfile.*` with the same IMAGE_TAG value
BASE_IMAGE_TAG = $(shell cd $(GIT_ROOT)/docker/base && make get-image-tag)
DEPS_HASH = $(shell $(GIT_ROOT)/scripts/gen-deps-hash.sh -b $(BASE_IMAGE_TAG) -d cmake -d golang -d node -d qt -d qtci -d react_native_desktop)
IMAGE_TAG = 1.1.1-$(DEPS_HASH)
IMAGE_NAME = statusteam/status-build-linux:$(IMAGE_TAG)
build: $(QT_ARCHIVE)
@ if [ "${DEPS_HASH}" = "" ]; then \
echo "DEPS_HASH not set"; \
exit 1; \
fi
docker build \
--build-arg="BASE_IMAGE_TAG=$(BASE_IMAGE_TAG)" \
--build-arg="CMAKE_VERSION=$(call __toolversion, cmake)" \
--build-arg="GOLANG_VERSION=$(call __toolversion, golang)" \
--build-arg="NODE_VERSION=$(call __toolversion, node)" \
--build-arg="QT_VERSION=$(QT_VERSION)" \
--build-arg="QT_CI_COMMIT=$(call __toolversion, qtci)" \
--build-arg="RNATIVE_VERSION=$(call __toolversion, react_native_desktop)" \
--label="commit=$(GIT_COMMIT)" \
-t $(IMAGE_NAME) .
$(QT_ARCHIVE):
wget $(QT_URL)/$(call __major_version, $(QT_VERSION))/$(QT_VERSION)/$(QT_ARCHIVE)
echo "$(QT_MD5SUM) $(QT_ARCHIVE)" | md5sum --check
push: build
docker push $(IMAGE_NAME)

View File

@ -1,3 +0,0 @@
# Description
This dockerfile is used to generate an image based on Ubuntu that will be used by Jenkins to build the Linux version of the desktop app.

View File

@ -1,56 +0,0 @@
ARG BASE_IMAGE_TAG
FROM statusteam/status-build-base:${BASE_IMAGE_TAG}
ARG RNATIVE_VERSION
ARG CONAN_VERSION
ARG CMAKE_VERSION
ARG GOLANG_VERSION
ARG NODE_VERSION
ARG WIN_BASE_IMAGE_VERSION
ENV PATH=/home/jenkins/.nvm/versions/node/v${NODE_VERSION}/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUN add-apt-repository -y ppa:git-core/ppa \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get -q -y --no-install-recommends install \
nsis fuse python python3-pip python3-setuptools python3-wheel \
apt-transport-https openjdk-8-jdk-headless extra-cmake-modules build-essential \
libx11-xcb1 libxss1 libasound2 libgl-dev libsm6 libxrandr2 python-dev \
libjasper-dev libegl1-mesa libxcomposite-dev libxcursor-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man \
&& python3 -m pip install --upgrade pip \
&& pip3 install conan==${CONAN_VERSION}
RUN cd /tmp \
&& wget -q https://cmake.org/files/v${CMAKE_VERSION%.*}/cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz \
&& tar xf cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz --strip 1 -C /usr/local \
&& rm -fr /usr/local/doc/cmake \
&& rm cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz
RUN cd /tmp \
&& wget -q https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz \
&& tar -C /usr/local -xzf go${GOLANG_VERSION}.linux-amd64.tar.gz \
&& rm go${GOLANG_VERSION}.linux-amd64.tar.gz
RUN mkdir -p /tmp/react-native-desktop \
&& cd /tmp/react-native-desktop \
&& git --version \
&& git init \
&& git remote add origin https://github.com/status-im/react-native-desktop.git \
&& git fetch --depth=1 origin ${RNATIVE_VERSION} \
&& git reset --hard FETCH_HEAD \
&& cp -r /tmp/react-native-desktop/react-native-cli /opt \
&& cd /opt/react-native-cli \
&& npm update \
&& npm install -g --prefix /usr/local \
&& cd \
&& rm -r /tmp/react-native-desktop
ADD ./StatusIm-Windows-base-image_${WIN_BASE_IMAGE_VERSION}.zip /opt/StatusIm-Windows-base-image.zip
ENV STATUSIM_WINDOWS_BASEIMAGE_ZIP=/opt/StatusIm-Windows-base-image.zip
LABEL source="https://github.com/status-im/status-react/tree/develop/docker/windows" \
description="Image for building Windows Desktop version of Status app." \
maintainer="jakub@status.im"

View File

@ -1,39 +0,0 @@
__toolversion = $(shell $(GIT_ROOT)/scripts/toolversion $(1))
GIT_COMMIT = $(shell git rev-parse --short HEAD)
GIT_ROOT = $(shell git rev-parse --show-toplevel)
# WARNING: Remember to update `ci/Jenkinsfile.*` with the same IMAGE_TAG value
BASE_IMAGE_TAG = $(shell cd $(GIT_ROOT)/docker/base && make get-image-tag)
DEPS_HASH = $(shell $(GIT_ROOT)/scripts/gen-deps-hash.sh -b $(BASE_IMAGE_TAG) -d cmake -d conan -d golang -d node -d react_native_desktop -d windows_base_image)
IMAGE_TAG = 1.1.1-$(DEPS_HASH)
IMAGE_NAME = statusteam/status-build-windows:$(IMAGE_TAG)
WIN_BASE_IMAGE_VER = $(call __toolversion, windows_base_image)
WIN_BASE_IMAGE_DM5 = $(call __toolversion, -c windows_base_image)
WIN_BASE_IMAGE_ZIP = StatusIm-Windows-base-image_$(WIN_BASE_IMAGE_VER).zip
WIN_BASE_IMAGE_URL = https://desktop-app-files.ams3.digitaloceanspaces.com/$(WIN_BASE_IMAGE_ZIP)
build: $(WIN_BASE_IMAGE_ZIP)
@ if [ "${DEPS_HASH}" = "" ]; then \
echo "DEPS_HASH not set"; \
exit 1; \
fi
docker build \
--build-arg="BASE_IMAGE_TAG=$(BASE_IMAGE_TAG)" \
--build-arg="CONAN_VERSION=$(call __toolversion, conan)" \
--build-arg="CMAKE_VERSION=$(call __toolversion, cmake)" \
--build-arg="GOLANG_VERSION=$(call __toolversion, golang)" \
--build-arg="NODE_VERSION=$(call __toolversion, node)" \
--build-arg="RNATIVE_VERSION=$(call __toolversion, react_native_desktop)" \
--build-arg="WIN_BASE_IMAGE_VERSION=$(WIN_BASE_IMAGE_VER)" \
--label="commit=$(GIT_COMMIT)" \
-t $(IMAGE_NAME) .
$(WIN_BASE_IMAGE_ZIP):
wget -q "$(WIN_BASE_IMAGE_URL)" -O "$(WIN_BASE_IMAGE_ZIP)"
echo "$(WIN_BASE_IMAGE_DM5) $(WIN_BASE_IMAGE_ZIP)" | md5sum --check
push: build
docker push $(IMAGE_NAME)

View File

@ -1,3 +0,0 @@
# Description
This dockerfile is used to generate an image based on Ubuntu that will be used by Jenkins to build the Linux version of the desktop app.

View File

@ -1,400 +0,0 @@
#!/usr/bin/env bash
{ # this ensures the entire script is downloaded #
nvm_has() {
type "$1" > /dev/null 2>&1
}
nvm_install_dir() {
command printf %s "${NVM_DIR:-"$HOME/.nvm"}"
}
nvm_latest_version() {
echo "v0.33.11"
}
nvm_profile_is_bash_or_zsh() {
local TEST_PROFILE
TEST_PROFILE="${1-}"
case "${TEST_PROFILE-}" in
*"/.bashrc" | *"/.bash_profile" | *"/.zshrc")
return
;;
*)
return 1
;;
esac
}
#
# Outputs the location to NVM depending on:
# * The availability of $NVM_SOURCE
# * The method used ("script" or "git" in the script, defaults to "git")
# NVM_SOURCE always takes precedence unless the method is "script-nvm-exec"
#
nvm_source() {
local NVM_METHOD
NVM_METHOD="$1"
local NVM_SOURCE_URL
NVM_SOURCE_URL="$NVM_SOURCE"
if [ "_$NVM_METHOD" = "_script-nvm-exec" ]; then
NVM_SOURCE_URL="https://raw.githubusercontent.com/creationix/nvm/$(nvm_latest_version)/nvm-exec"
elif [ "_$NVM_METHOD" = "_script-nvm-bash-completion" ]; then
NVM_SOURCE_URL="https://raw.githubusercontent.com/creationix/nvm/$(nvm_latest_version)/bash_completion"
elif [ -z "$NVM_SOURCE_URL" ]; then
if [ "_$NVM_METHOD" = "_script" ]; then
NVM_SOURCE_URL="https://raw.githubusercontent.com/creationix/nvm/$(nvm_latest_version)/nvm.sh"
elif [ "_$NVM_METHOD" = "_git" ] || [ -z "$NVM_METHOD" ]; then
NVM_SOURCE_URL="https://github.com/creationix/nvm.git"
else
echo >&2 "Unexpected value \"$NVM_METHOD\" for \$NVM_METHOD"
return 1
fi
fi
echo "$NVM_SOURCE_URL"
}
#
# Node.js version to install
#
nvm_node_version() {
echo "$NODE_VERSION"
}
nvm_download() {
if nvm_has "curl"; then
curl --compressed -q "$@"
elif nvm_has "wget"; then
# Emulate curl with wget
ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \
-e 's/-L //' \
-e 's/--compressed //' \
-e 's/-I /--server-response /' \
-e 's/-s /-q /' \
-e 's/-o /-O /' \
-e 's/-C - /-c /')
# shellcheck disable=SC2086
eval wget $ARGS
fi
}
install_nvm_from_git() {
local INSTALL_DIR
INSTALL_DIR="$(nvm_install_dir)"
if [ -d "$INSTALL_DIR/.git" ]; then
echo "=> nvm is already installed in $INSTALL_DIR, trying to update using git"
command printf '\r=> '
command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" fetch origin tag "$(nvm_latest_version)" --depth=1 2> /dev/null || {
echo >&2 "Failed to update nvm, run 'git fetch' in $INSTALL_DIR yourself."
exit 1
}
else
# Cloning to $INSTALL_DIR
echo "=> Downloading nvm from git to '$INSTALL_DIR'"
command printf '\r=> '
mkdir -p "${INSTALL_DIR}"
if [ "$(ls -A "${INSTALL_DIR}")" ]; then
command git init "${INSTALL_DIR}" || {
echo >&2 'Failed to initialize nvm repo. Please report this!'
exit 2
}
command git --git-dir="${INSTALL_DIR}/.git" remote add origin "$(nvm_source)" 2> /dev/null \
|| command git --git-dir="${INSTALL_DIR}/.git" remote set-url origin "$(nvm_source)" || {
echo >&2 'Failed to add remote "origin" (or set the URL). Please report this!'
exit 2
}
command git --git-dir="${INSTALL_DIR}/.git" fetch origin tag "$(nvm_latest_version)" --depth=1 || {
echo >&2 'Failed to fetch origin with tags. Please report this!'
exit 2
}
else
command git -c advice.detachedHead=false clone "$(nvm_source)" -b "$(nvm_latest_version)" --depth=1 "${INSTALL_DIR}" || {
echo >&2 'Failed to clone nvm repo. Please report this!'
exit 2
}
fi
fi
command git -c advice.detachedHead=false --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" checkout -f --quiet "$(nvm_latest_version)"
if [ ! -z "$(command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" show-ref refs/heads/master)" ]; then
if command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch --quiet 2>/dev/null; then
command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch --quiet -D master >/dev/null 2>&1
else
echo >&2 "Your version of git is out of date. Please update it!"
command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch -D master >/dev/null 2>&1
fi
fi
echo "=> Compressing and cleaning up git repository"
if ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" reflog expire --expire=now --all; then
echo >&2 "Your version of git is out of date. Please update it!"
fi
if ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" gc --auto --aggressive --prune=now ; then
echo >&2 "Your version of git is out of date. Please update it!"
fi
return
}
#
# Automatically install Node.js
#
nvm_install_node() {
local NODE_VERSION_LOCAL
NODE_VERSION_LOCAL="$(nvm_node_version)"
if [ -z "$NODE_VERSION_LOCAL" ]; then
return 0
fi
echo "=> Installing Node.js version $NODE_VERSION_LOCAL"
nvm install "$NODE_VERSION_LOCAL"
local CURRENT_NVM_NODE
CURRENT_NVM_NODE="$(nvm_version current)"
if [ "$(nvm_version "$NODE_VERSION_LOCAL")" == "$CURRENT_NVM_NODE" ]; then
echo "=> Node.js version $NODE_VERSION_LOCAL has been successfully installed"
else
echo >&2 "Failed to install Node.js $NODE_VERSION_LOCAL"
fi
}
install_nvm_as_script() {
local INSTALL_DIR
INSTALL_DIR="$(nvm_install_dir)"
local NVM_SOURCE_LOCAL
NVM_SOURCE_LOCAL="$(nvm_source script)"
local NVM_EXEC_SOURCE
NVM_EXEC_SOURCE="$(nvm_source script-nvm-exec)"
local NVM_BASH_COMPLETION_SOURCE
NVM_BASH_COMPLETION_SOURCE="$(nvm_source script-nvm-bash-completion)"
# Downloading to $INSTALL_DIR
mkdir -p "$INSTALL_DIR"
if [ -f "$INSTALL_DIR/nvm.sh" ]; then
echo "=> nvm is already installed in $INSTALL_DIR, trying to update the script"
else
echo "=> Downloading nvm as script to '$INSTALL_DIR'"
fi
nvm_download -s "$NVM_SOURCE_LOCAL" -o "$INSTALL_DIR/nvm.sh" || {
echo >&2 "Failed to download '$NVM_SOURCE_LOCAL'"
return 1
} &
nvm_download -s "$NVM_EXEC_SOURCE" -o "$INSTALL_DIR/nvm-exec" || {
echo >&2 "Failed to download '$NVM_EXEC_SOURCE'"
return 2
} &
nvm_download -s "$NVM_BASH_COMPLETION_SOURCE" -o "$INSTALL_DIR/bash_completion" || {
echo >&2 "Failed to download '$NVM_BASH_COMPLETION_SOURCE'"
return 2
} &
for job in $(jobs -p | command sort)
do
wait "$job" || return $?
done
chmod a+x "$INSTALL_DIR/nvm-exec" || {
echo >&2 "Failed to mark '$INSTALL_DIR/nvm-exec' as executable"
return 3
}
}
nvm_try_profile() {
if [ -z "${1-}" ] || [ ! -f "${1}" ]; then
return 1
fi
echo "${1}"
}
#
# Detect profile file if not specified as environment variable
# (eg: PROFILE=~/.myprofile)
# The echo'ed path is guaranteed to be an existing file
# Otherwise, an empty string is returned
#
nvm_detect_profile() {
if [ -n "${PROFILE}" ] && [ -f "${PROFILE}" ]; then
echo "${PROFILE}"
return
fi
local DETECTED_PROFILE
DETECTED_PROFILE=''
if [ -n "${BASH_VERSION-}" ]; then
if [ -f "$HOME/.bashrc" ]; then
DETECTED_PROFILE="$HOME/.bashrc"
elif [ -f "$HOME/.bash_profile" ]; then
DETECTED_PROFILE="$HOME/.bash_profile"
fi
elif [ -n "${ZSH_VERSION-}" ]; then
DETECTED_PROFILE="$HOME/.zshrc"
fi
if [ -z "$DETECTED_PROFILE" ]; then
for EACH_PROFILE in ".profile" ".bashrc" ".bash_profile" ".zshrc"
do
if DETECTED_PROFILE="$(nvm_try_profile "${HOME}/${EACH_PROFILE}")"; then
break
fi
done
fi
if [ ! -z "$DETECTED_PROFILE" ]; then
echo "$DETECTED_PROFILE"
fi
}
#
# Check whether the user has any globally-installed npm modules in their system
# Node, and warn them if so.
#
nvm_check_global_modules() {
command -v npm >/dev/null 2>&1 || return 0
local NPM_VERSION
NPM_VERSION="$(npm --version)"
NPM_VERSION="${NPM_VERSION:--1}"
[ "${NPM_VERSION%%[!-0-9]*}" -gt 0 ] || return 0
local NPM_GLOBAL_MODULES
NPM_GLOBAL_MODULES="$(
npm list -g --depth=0 |
command sed -e '/ npm@/d' -e '/ (empty)$/d'
)"
local MODULE_COUNT
MODULE_COUNT="$(
command printf %s\\n "$NPM_GLOBAL_MODULES" |
command sed -ne '1!p' | # Remove the first line
wc -l | command tr -d ' ' # Count entries
)"
if [ "${MODULE_COUNT}" != '0' ]; then
# shellcheck disable=SC2016
echo '=> You currently have modules installed globally with `npm`. These will no'
# shellcheck disable=SC2016
echo '=> longer be linked to the active version of Node when you install a new node'
# shellcheck disable=SC2016
echo '=> with `nvm`; and they may (depending on how you construct your `$PATH`)'
# shellcheck disable=SC2016
echo '=> override the binaries of modules installed with `nvm`:'
echo
command printf %s\\n "$NPM_GLOBAL_MODULES"
echo '=> If you wish to uninstall them at a later point (or re-install them under your'
# shellcheck disable=SC2016
echo '=> `nvm` Nodes), you can remove them from the system Node as follows:'
echo
echo ' $ nvm use system'
echo ' $ npm uninstall -g a_module'
echo
fi
}
nvm_do_install() {
if [ -n "${NVM_DIR-}" ] && ! [ -d "${NVM_DIR}" ]; then
echo >&2 "You have \$NVM_DIR set to \"${NVM_DIR}\", but that directory does not exist. Check your profile files and environment."
exit 1
fi
if [ -z "${METHOD}" ]; then
# Autodetect install method
if nvm_has git; then
install_nvm_from_git
elif nvm_has nvm_download; then
install_nvm_as_script
else
echo >&2 'You need git, curl, or wget to install nvm'
exit 1
fi
elif [ "${METHOD}" = 'git' ]; then
if ! nvm_has git; then
echo >&2 "You need git to install nvm"
exit 1
fi
install_nvm_from_git
elif [ "${METHOD}" = 'script' ]; then
if ! nvm_has nvm_download; then
echo >&2 "You need curl or wget to install nvm"
exit 1
fi
install_nvm_as_script
fi
echo
local NVM_PROFILE
NVM_PROFILE="$(nvm_detect_profile)"
local PROFILE_INSTALL_DIR
PROFILE_INSTALL_DIR="$(nvm_install_dir | command sed "s:^$HOME:\$HOME:")"
SOURCE_STR="\\nexport NVM_DIR=\"${PROFILE_INSTALL_DIR}\"\\n[ -s \"\$NVM_DIR/nvm.sh\" ] && \\. \"\$NVM_DIR/nvm.sh\" # This loads nvm\\n"
# shellcheck disable=SC2016
COMPLETION_STR='[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion\n'
BASH_OR_ZSH=false
if [ -z "${NVM_PROFILE-}" ] ; then
local TRIED_PROFILE
if [ -n "${PROFILE}" ]; then
TRIED_PROFILE="${NVM_PROFILE} (as defined in \$PROFILE), "
fi
echo "=> Profile not found. Tried ${TRIED_PROFILE-}~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile."
echo "=> Create one of them and run this script again"
echo " OR"
echo "=> Append the following lines to the correct file yourself:"
command printf "${SOURCE_STR}"
echo
else
if nvm_profile_is_bash_or_zsh "${NVM_PROFILE-}"; then
BASH_OR_ZSH=true
fi
if ! command grep -qc '/nvm.sh' "$NVM_PROFILE"; then
echo "=> Appending nvm source string to $NVM_PROFILE"
command printf "${SOURCE_STR}" >> "$NVM_PROFILE"
else
echo "=> nvm source string already in ${NVM_PROFILE}"
fi
# shellcheck disable=SC2016
if ${BASH_OR_ZSH} && ! command grep -qc '$NVM_DIR/bash_completion' "$NVM_PROFILE"; then
echo "=> Appending bash_completion source string to $NVM_PROFILE"
command printf "$COMPLETION_STR" >> "$NVM_PROFILE"
else
echo "=> bash_completion source string already in ${NVM_PROFILE}"
fi
fi
if ${BASH_OR_ZSH} && [ -z "${NVM_PROFILE-}" ] ; then
echo "=> Please also append the following lines to the if you are using bash/zsh shell:"
command printf "${COMPLETION_STR}"
fi
# Source nvm
# shellcheck source=/dev/null
\. "$(nvm_install_dir)/nvm.sh"
nvm_check_global_modules
nvm_install_node
nvm_reset
echo "=> Close and reopen your terminal to start using nvm or run the following to use it now:"
command printf "${SOURCE_STR}"
if ${BASH_OR_ZSH} ; then
command printf "${COMPLETION_STR}"
fi
}
#
# Unsets the various functions defined
# during the execution of the install script
#
nvm_reset() {
unset -f nvm_has nvm_install_dir nvm_latest_version nvm_profile_is_bash_or_zsh \
nvm_source nvm_node_version nvm_download install_nvm_from_git nvm_install_node \
install_nvm_as_script nvm_try_profile nvm_detect_profile nvm_check_global_modules \
nvm_do_install nvm_reset
}
[ "_$NVM_ENV" = "_testing" ] || nvm_do_install
} # this ensures the entire script is downloaded #

View File

@ -1,47 +0,0 @@
#!/usr/bin/env bash
################################################################################
# This tool fetches versions of build tools from the .TOOLVERSIONS
# file in project root and calculates a single hash that represents
# the combined versions of all the specified tools.
################################################################################
GIT_ROOT=$(git rev-parse --show-toplevel)
toolversion="${GIT_ROOT}/scripts/toolversion"
usage () {
echo "Usage: gen-deps-hash [-b <base_hash>] -d <dep-name-1> [-d <dep-name-n>]" >&2
echo
echo "This script calculates a hash representing the required versions of the specified tools"
exit 0
}
# some options parsing
deps=()
while getopts "hb:d:" opt; do
case $opt in
b) base_hash="$OPTARG";;
d)
version=$($toolversion "$OPTARG")
if [ $? -ne 0 ]; then
echo "ERROR: $OPTARG not found in .TOOLVERSIONS"
exit 1
fi
deps+=("$OPTARG $version")
;;
h) usage;;
\?) echo "Invalid option: -$OPTARG" >&2; exit 1;;
esac
done
if [ ${#deps[@]} -eq 0 ]; then
echo "ERROR: No dependencies specified"
echo
usage
fi
IFS=$'\n' sorted_deps=($(sort <<<"${deps[*]}"))
unset IFS
hash=$(echo "${base_hash}${sorted_deps[@]}" | md5sum | cut -f1 -d" ")
echo "${hash:0:8}"