Skip to content

Commit e87464e

Browse files
committed
refactor docker image creation to use base image
Squashed commits: - initial work - make base image use all the versions - make desktop images use the base image - update ci to use new images - use new toolversion script - update android image tag - add missing android-26 platform - fix installing packages with sdkmanager - fix installation of react-native-cli - specify prefix path for npm install -g Signed-off-by: Jakub Sokołowski <jakub@status.im>
1 parent 9daef17 commit e87464e

13 files changed

Lines changed: 190 additions & 263 deletions

File tree

.TOOLVERSIONS

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
ANDROID_BUILD_TOOLS_VERSION;28.0.1;
2-
ANDROID_NDK_VERSION;r10e;
3-
ANDROID_PLATFORM_VERSION;android-27;
1+
android-ndk;r10e;070be287539e3e7706f8dabfb6bf9879
2+
android-sdk-build-tools;28.0.1;
3+
android-sdk-platform;android-27;
4+
android-sdk;4333796;aa190cfd7299cd6a1c687355bb2764e4
45
clojure_cli;1.9.0.381;
6+
cmake;3.12.2;
57
conan;1.9.0;
68
leiningen;2.8.1;
79
maven;3.5.2;
810
node;10.12.0;
911
nvm;0.33.11;
12+
qt;5.11.2;974fda61267cfb6e45984ee5f0a285f8
13+
qtci;55ffd9f225708b3aa1443851cfa8dead2c1f9959;
1014
react_native_cli;2.0.1;
15+
react_native_desktop;v0.56.1_4;
1116
watchman;4.9.0;
1217
yarn;1.13.0;

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ index.desktop.js
6666

6767
# Docker
6868
#
69+
docker/*/scripts/
6970
docker/*/*.zip
7071
docker/*/*.run
72+
docker/*/nvm_install.sh
7173

7274
# Generated by lein voom
7375
#
@@ -153,7 +155,6 @@ Status-Windows-x86_64.exe
153155
/desktop/CMakeFiles/
154156
/desktop/reportApp/Makefile
155157
/deployment/windows/Status.rc
156-
/docker/*/scripts/
157158
*_autogen/
158159
CompleteBundleWin.cmake
159160
logger_settings.ini

ci/Jenkinsfile.android

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ pipeline {
22
agent {
33
docker {
44
label 'linux'
5-
image 'statusteam/status-build-android:1.0.1'
5+
image 'statusteam/status-build-android:1.1.0'
66
args (
77
"-v /home/jenkins/tmp:/var/tmp:rw "+
88
"-v /home/jenkins/status-im.keystore:/tmp/status-im.keystore:ro"
@@ -59,34 +59,30 @@ pipeline {
5959
cmn = load 'ci/common.groovy'
6060
print "Running ${cmn.getBuildType()} build!"
6161
cmn.abortPreviousRunningBuilds()
62-
/* Read the valid NodeJS version */
63-
env.NODE_VERSION = cmn.getToolVersion('node')
6462
/* Cleanup and Prep */
65-
nvm(env.NODE_VERSION) {
66-
mobile.prep(cmn.getBuildType())
67-
}
63+
mobile.prep(cmn.getBuildType())
6864
}
6965
}
7066
}
7167
stage('Lint') {
72-
steps { nvm(env.NODE_VERSION) {
68+
steps {
7369
script { cmn.runLint() }
74-
} }
70+
}
7571
}
7672
stage('Tests') {
77-
steps { nvm(env.NODE_VERSION) {
73+
steps {
7874
script { cmn.runTests() }
79-
} }
75+
}
8076
}
8177
stage('Build') {
82-
steps { nvm(env.NODE_VERSION) {
78+
steps {
8379
script { mobile.leinBuild('android') }
84-
} }
80+
}
8581
}
8682
stage('Bundle') {
87-
steps { nvm(env.NODE_VERSION) {
83+
steps {
8884
script { apk = mobile.android.bundle(cmn.getBuildType()) }
89-
} }
85+
}
9086
}
9187
stage('Archive') {
9288
steps {

ci/Jenkinsfile.linux

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ pipeline {
33
/* privileged mode is necessary for fuse */
44
docker {
55
label 'linux-new'
6-
image 'statusteam/linux-desktop-ubuntu:1.1.1'
6+
image 'statusteam/status-build-linux:1.1.0'
77
args (
88
"--privileged "+
99
"-v /dev/fuse:/dev/fuse "+
@@ -59,34 +59,30 @@ pipeline {
5959
cmn = load 'ci/common.groovy'
6060
print "Running ${cmn.getBuildType()} build!"
6161
cmn.abortPreviousRunningBuilds()
62-
/* Read the valid NodeJS version */
63-
env.NODE_VERSION = cmn.getToolVersion('node')
6462
/* Cleanup and Prep */
65-
nvm(env.NODE_VERSION) {
66-
desktop.prepDeps()
67-
}
63+
desktop.prepDeps()
6864
}
6965
}
7066
}
7167
stage('Lint') {
72-
steps { nvm(env.NODE_VERSION) {
68+
steps {
7369
script { cmn.runLint() }
74-
} }
70+
}
7571
}
7672
stage('Tests') {
77-
steps { nvm(env.NODE_VERSION) {
73+
steps {
7874
script { cmn.runTests() }
79-
} }
75+
}
8076
}
8177
stage('Build') {
82-
steps { nvm(env.NODE_VERSION) {
78+
steps {
8379
script { desktop.buildClojureScript() }
84-
} }
80+
}
8581
}
8682
stage('Compile') {
87-
steps { nvm(env.NODE_VERSION) {
83+
steps {
8884
script { desktop.compile() }
89-
} }
85+
}
9086
}
9187
stage('Bundle') {
9288
steps {

ci/Jenkinsfile.windows

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ pipeline {
33
/* privileged mode is necessary for fuse */
44
docker {
55
label 'linux-new'
6-
image 'statusteam/windows-desktop-ubuntu:1.1.1'
6+
image 'statusteam/status-build-windows:1.1.0'
77
args (
88
"--privileged "+
99
"-v /dev/fuse:/dev/fuse "+
@@ -62,34 +62,30 @@ pipeline {
6262
cmn = load 'ci/common.groovy'
6363
print "Running ${cmn.getBuildType()} build!"
6464
cmn.abortPreviousRunningBuilds()
65-
/* Read the valid NodeJS version */
66-
env.NODE_VERSION = cmn.getToolVersion('node')
6765
/* Cleanup and Prep */
68-
nvm(env.NODE_VERSION) {
69-
desktop.prepDeps()
70-
}
66+
desktop.prepDeps()
7167
}
7268
}
7369
}
7470
stage('Lint') {
75-
steps { nvm(env.NODE_VERSION) {
71+
steps {
7672
script { cmn.runLint() }
77-
} }
73+
}
7874
}
7975
stage('Tests') {
80-
steps { nvm(env.NODE_VERSION) {
76+
steps {
8177
script { cmn.runTests() }
82-
} }
78+
}
8379
}
8480
stage('Build') {
85-
steps { nvm(env.NODE_VERSION) {
81+
steps {
8682
script { desktop.buildClojureScript() }
87-
} }
83+
}
8884
}
8985
stage('Compile') {
90-
steps { nvm(env.NODE_VERSION) {
86+
steps {
9187
script { desktop.compile() }
92-
} }
88+
}
9389
}
9490
stage('Bundle') {
9591
steps {

docker/android/Dockerfile

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
# This image is only for extracting and cleaning up NDK and SDK
2-
FROM statusteam/status-build-base:1.0.0 AS sdk_and_ndk
2+
FROM statusteam/status-build-base:1.1.0 AS sdk_and_ndk
33

44
ARG ANDROID_NDK_VERSION
55
ARG ANDROID_SDK_VERSION
6+
ARG SDK_PLATFORM_VERSION
7+
ARG SDK_BUILD_TOOLS_VERSION
68

79
# names of packages to install with sdkmanager
8-
ENV SDK_PACKAGES emulator patcher;v4 build-tools;26.0.2 platforms;android-26 platforms;android-27 platforms;android-28 extras;android;m2repository extras;google;m2repository
10+
ENV SDK_PACKAGES emulator patcher;v4 \
11+
platforms;android-26 \
12+
platforms;${SDK_PLATFORM_VERSION} \
13+
build-tools;${SDK_BUILD_TOOLS_VERSION} \
14+
extras;android;m2repository extras;google;m2repository
915

1016
# install SDK
1117
COPY sdk-tools-linux-${ANDROID_SDK_VERSION}.zip /tmp/sdk-tools-linux.zip
@@ -32,7 +38,7 @@ RUN cd /usr/lib/android-ndk && rm -fr docs tests samples \
3238
&& find sources -mindepth 2 -maxdepth 2 | grep -v 'gnu-libstdc' | xargs rm -fr
3339

3440
################################################################################
35-
FROM statusteam/status-build-base:1.0.0
41+
FROM statusteam/status-build-base:1.1.0
3642

3743
ARG ANDROID_NDK_VERSION
3844
ARG ANDROID_SDK_VERSION

docker/android/Makefile

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
1+
__toolversion = $(shell $(GIT_ROOT)/scripts/toolversion $(1))
2+
13
GIT_COMMIT = $(shell git rev-parse --short HEAD)
24
GIT_ROOT = $(shell git rev-parse --show-toplevel)
35

4-
ANDROID_NDK_VERSION = r10e
5-
ANDROID_NDK_CHECKSUM = 070be287539e3e7706f8dabfb6bf9879
6+
ANDROID_NDK_VERSION = $(call __toolversion, android-ndk)
7+
ANDROID_NDK_CHECKSUM = $(call __toolversion, android-ndk_md5)
68
ANDROID_NDK_ARCHIVE = android-ndk-$(ANDROID_NDK_VERSION)-linux-x86_64.zip
79
ANDROID_NDK_URL = https://dl.google.com/android/repository/$(ANDROID_NDK_ARCHIVE)
810

9-
ANDROID_SDK_VERSION = 4333796
10-
ANDROID_SDK_CHECKSUM = aa190cfd7299cd6a1c687355bb2764e4
11+
ANDROID_SDK_VERSION = $(call __toolversion, android-sdk)
12+
ANDROID_SDK_CHECKSUM = $(call __toolversion, android-sdk_md5)
1113
ANDROID_SDK_URL = https://dl.google.com/android/repository/sdk-tools-linux-$(ANDROID_SDK_VERSION).zip
1214
ANDROID_SDK_ARCHIVE = sdk-tools-linux-$(ANDROID_SDK_VERSION).zip
1315

16+
SDK_PLATFORM_VERSION=$(call __toolversion, android-sdk-platform)
17+
SDK_BUILD_TOOLS_VERSION=$(call __toolversion, android-sdk-build-tools)
18+
1419
# WARNING: Remember to change the tag when updating the image
15-
IMAGE_TAG = 1.0.1
20+
IMAGE_TAG = 1.1.0
1621
IMAGE_NAME = statusteam/status-build-android:$(IMAGE_TAG)
1722

1823
build: $(ANDROID_NDK_ARCHIVE) $(ANDROID_SDK_ARCHIVE)
1924
docker build \
2025
--build-arg="ANDROID_NDK_VERSION=$(ANDROID_NDK_VERSION)" \
2126
--build-arg="ANDROID_SDK_VERSION=$(ANDROID_SDK_VERSION)" \
27+
--build-arg="SDK_PLATFORM_VERSION=$(SDK_PLATFORM_VERSION)" \
28+
--build-arg="SDK_BUILD_TOOLS_VERSION=$(SDK_BUILD_TOOLS_VERSION)" \
2229
--label="commit=$(GIT_COMMIT)" \
2330
-t $(IMAGE_NAME) .
2431

docker/base/Dockerfile

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
FROM ubuntu:16.04
22

3-
ARG NVM_VERSION
4-
ARG NVM_NODE_VERSION
3+
ARG NODE_VERSION
4+
ARG YARN_VERSION
55
ARG LEIN_VERSION
66

77
# We have to do this because Jenkins doesn't let us
88
# https://issues.jenkins-ci.org/browse/JENKINS-49076
9-
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
9+
ENV PATH=/home/jenkins/.nvm/versions/node/v${NODE_VERSION}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
1010
LANG=en_US.UTF-8 \
1111
LC_ALL=en_US.UTF-8 \
1212
LANGUAGE=en_US.UTF-8 \
1313
LEIN_HOME=/var/tmp/lein \
14-
YARN_CACHE_FOLDER=/var/tmp/yarn
14+
LEIN_URL=https://raw.githubusercontent.com/technomancy/leiningen/${LEIN_VERSION}/bin/lein \
15+
YARN_CACHE_FOLDER=/var/tmp/yarn \
16+
NVM_DIR=/home/jenkins/.nvm
1517

1618
RUN mkdir /var/tmp/npm /var/tmp/lein \
1719
&& chmod 777 /var/tmp/npm /var/tmp/lein \
@@ -20,13 +22,12 @@ RUN mkdir /var/tmp/npm /var/tmp/lein \
2022
&& echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections \
2123
&& echo debconf shared/accepted-oracle-license-v1-1 seen true | debconf-set-selections \
2224
&& curl -sL https://deb.nodesource.com/setup_10.x | bash - \
23-
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
24-
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
2525
&& apt-get update \
2626
&& DEBIAN_FRONTEND=noninteractive apt-get -q -y --no-install-recommends install \
27-
file git wget zip unzip s3cmd build-essential nodejs yarn locales \
27+
file jq git wget zip unzip s3cmd build-essential nodejs locales \
2828
ca-certificates oracle-java8-installer oracle-java8-set-default \
2929
&& locale-gen ${LANG} \
30+
&& npm install -g yarn@${YARN_VERSION} \
3031
&& apt-get clean \
3132
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man
3233

@@ -39,14 +40,17 @@ RUN addgroup --gid 1002 jenkins \
3940
&& su jenkins -c "git config --global user.name 'jenkins@status.im'"
4041

4142
# Leiningen setup
42-
RUN wget -q https://raw.githubusercontent.com/technomancy/leiningen/${LEIN_VERSION}/bin/lein -O /usr/local/bin/lein \
43+
RUN wget ${LEIN_URL} -O /usr/local/bin/lein \
4344
&& chmod 755 /usr/local/bin/lein \
4445
&& lein version
4546

4647
# Install NVM for Jenkins
47-
RUN su jenkins -c "\
48-
curl -s -o- https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/install.sh | bash && \
49-
source ~/.nvm/nvm.sh && nvm install ${NVM_NODE_VERSION} && nvm alias default ${NVM_NODE_VERSION}"
48+
ADD nvm_install.sh /tmp/nvm_install.sh
49+
RUN su -l jenkins -c \
50+
"bash /tmp/nvm_install.sh && \
51+
. ${NVM_DIR}/nvm.sh && \
52+
nvm install ${NODE_VERSION} && \
53+
nvm alias default ${NODE_VERSION}"
5054

5155
LABEL source="https://github.com/status-im/status-react/tree/develop/docker/base" \
5256
description="Base Image used for building Status app." \

docker/base/Makefile

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
1+
__toolversion = $(shell $(GIT_ROOT)/scripts/toolversion $(1))
2+
13
GIT_COMMIT = $(shell git rev-parse --short HEAD)
24
GIT_ROOT = $(shell git rev-parse --show-toplevel)
35

4-
# Software Versions, URLs, and Checksums
5-
NVM_VERSION = v0.33.11
6-
NVM_INSTALL_SCRIPT = nvm_$(NVM_VERSION)_install.sh
7-
NVM_NODE_VERSION = v10.14.0
8-
LEIN_VERSION = stable
9-
106
# WARNING: Remember to change the tag when updating the image
11-
IMAGE_TAG = 1.0.0
7+
IMAGE_TAG = 1.1.0
128
IMAGE_NAME = statusteam/status-build-base:$(IMAGE_TAG)
139

14-
build:
10+
build: nvm_install.sh
1511
docker build \
16-
--build-arg="LEIN_VERSION=$(LEIN_VERSION)" \
17-
--build-arg="NVM_VERSION=$(NVM_VERSION)" \
18-
--build-arg="NVM_NODE_VERSION=$(NVM_NODE_VERSION)" \
12+
--build-arg="LEIN_VERSION=$(call __toolversion, leiningen)" \
13+
--build-arg="NODE_VERSION=$(call __toolversion, node)" \
14+
--build-arg="YARN_VERSION=$(call __toolversion, yarn)" \
1915
--label="commit=$(GIT_COMMIT)" \
2016
-t $(IMAGE_NAME) .
2117

18+
nvm_install.sh:
19+
cp $(GIT_ROOT)/scripts/3rd-party/nvm/$(call __toolversion, nvm)/install.sh nvm_install.sh
20+
2221
push: build
2322
docker push $(IMAGE_NAME)

0 commit comments

Comments
 (0)