Remove build Dockerfiles and NVM script
This commit is contained in:
parent
5440378bbc
commit
4569e2283c
|
@ -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;
|
||||
|
|
2
deps.edn
2
deps.edn
|
@ -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"
|
||||
|
|
|
@ -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"
|
|
@ -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)
|
|
@ -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.
|
|
@ -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
|
|
@ -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"
|
|
@ -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)
|
|
@ -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
|
|
@ -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"
|
|
@ -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)
|
|
@ -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.
|
|
@ -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"
|
|
@ -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)
|
|
@ -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.
|
|
@ -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 #
|
|
@ -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}"
|
Loading…
Reference in New Issue