diff --git a/.TOOLVERSIONS b/.TOOLVERSIONS index 21aab4e022..57a8c926db 100644 --- a/.TOOLVERSIONS +++ b/.TOOLVERSIONS @@ -1,12 +1,12 @@ -ANDROID_BUILD_TOOLS_VERSION=28.0.1 -ANDROID_NDK_VERSION=r10e -ANDROID_PLATFORM_VERSION=android-27 -clojure_cli=1.9.0.381 -conan=1.9.0 -leiningen=2.8.1 -maven=3.5.2 -node=10.12.0 -nvm=0.33.11 -react_native_cli=2.0.1 -watchman=4.9.0 -yarn=1.13.0 \ No newline at end of file +ANDROID_BUILD_TOOLS_VERSION;28.0.1; +ANDROID_NDK_VERSION;r10e; +ANDROID_PLATFORM_VERSION;android-27; +clojure_cli;1.9.0.381; +conan;1.9.0; +leiningen;2.8.1; +maven;3.5.2; +node;10.12.0; +nvm;0.33.11; +react_native_cli;2.0.1; +watchman;4.9.0; +yarn;1.13.0; diff --git a/Makefile b/Makefile index c5bfef0952..ed08d7f407 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ help: ##@other Show this help @perl -e '$(HELP_FUN)' $(MAKEFILE_LIST) DO_SPACE_URL = https://status-go.ams3.digitaloceanspaces.com -GITHUB_URL = https://github.com/status-im/status-go/releases/download +GITHUB_URL = https://github.com/status-im/status-go/releases RCTSTATUS_DIR = modules/react-native-status/ios/RCTStatus ANDROID_LIBS_DIR = android/app/libs STATUS_GO_VER = $(shell cat STATUS_GO_VERSION) @@ -35,7 +35,7 @@ HELP_FUN = \ print "\n"; \ } -__read__toolversion__ = $(shell grep $(1) ./.TOOLVERSIONS | cut -d'=' -f2-) +__toolversion = $(shell $(GIT_ROOT)/scripts/toolversion $(1)) # Main targets @@ -57,10 +57,15 @@ $(STATUS_GO_IOS_ARCH): if [ $$? -ne 0 ]; then \ echo "Failed to download from DigitalOcean Bucket, checking GitHub..."; \ curl --fail --silent --location \ - "$(GITHUB_URL)/$(STATUS_GO_VER)/status-go-ios.zip" \ + "$(GITHUB_URL)/download/$(STATUS_GO_VER)/status-go-ios.zip" \ --output "$(STATUS_GO_IOS_ARCH)"; \ if [ $$? -ne 0 ]; then \ echo "Failed to download from GitHub!"; \ + echo "Please check the contents of your STATUS_GO_VERSION are correct."; \ + echo "Verify the version has been uploaded:"; \ + echo " * $(DO_SPACE_URL)/index.html"; \ + echo " * $(GITHUB_URL)"; \ + exit 1; \ fi \ fi diff --git a/ci/common.groovy b/ci/common.groovy index 9a180d3dc8..a0cea62652 100644 --- a/ci/common.groovy +++ b/ci/common.groovy @@ -7,7 +7,7 @@ def version() { def getToolVersion(name) { def version = sh( returnStdout: true, - script: "grep ${name} ${env.WORKSPACE}/.TOOLVERSIONS | cut -d'=' -f2-" + script: "${env.WORKSPACE}/scripts/toolversion ${name}" ).trim() return version } diff --git a/docker/linux/Makefile b/docker/linux/Makefile index 5afa320b43..55212eefe4 100644 --- a/docker/linux/Makefile +++ b/docker/linux/Makefile @@ -1,3 +1,5 @@ +__toolversion = $(shell $(GIT_ROOT)/scripts/toolversion $(1)) + GIT_COMMIT = $(shell git rev-parse --short HEAD) # WARNING: Change version in Dockerfile too @@ -8,7 +10,6 @@ QT_MD5SUM = 974fda61267cfb6e45984ee5f0a285f8 QT_URL = https://download.qt.io/archive/qt QT_CI_COMMIT_SHA = 55ffd9f225708b3aa1443851cfa8dead2c1f9959 REACT_NATIVE_DESKTOP_COMMIT_SHA = 2a76c435a27f0bf6c089f74222212b3a58e10385 -__read__toolversion__ = $(shell grep $(1) ../../../.TOOLVERSIONS | cut -d'=' -f2-) # WARNING: Remember to change the tag when updating the image IMAGE_TAG = 1.1.1 @@ -22,10 +23,10 @@ build: $(QT_ARCHIVE) --build-arg="QT_VERSION=$(QT_VERSION)" \ --build-arg="QT_CI_COMMIT_SHA=$(QT_CI_COMMIT_SHA)" \ --build-arg="REACT_NATIVE_DESKTOP_COMMIT_SHA=$(REACT_NATIVE_DESKTOP_COMMIT_SHA)" \ - --build-arg="LEIN_VERSION=$(call __read__toolversion__,lein)" \ - --build-arg="NODE_VERSION=$(call __read__toolversion__,node)" \ - --build-arg="NVM_VERSION=$(call __read__toolversion__,nvm)" \ - --build-arg="YARN_VERSION=$(call __read__toolversion__,yarn)" \ + --build-arg="LEIN_VERSION=$(call __toolversion,lein)" \ + --build-arg="NODE_VERSION=$(call __toolversion,node)" \ + --build-arg="NVM_VERSION=$(call __toolversion,nvm)" \ + --build-arg="YARN_VERSION=$(call __toolversion,yarn)" \ --label="commit=$(GIT_COMMIT)" \ -t $(IMAGE_NAME) .; \ rm -rf ./scripts diff --git a/docker/windows/Makefile b/docker/windows/Makefile index 9bba31285a..593ee52a62 100644 --- a/docker/windows/Makefile +++ b/docker/windows/Makefile @@ -1,3 +1,5 @@ +__toolversion = $(shell $(GIT_ROOT)/scripts/toolversion $(1)) + GIT_COMMIT = $(shell git rev-parse --short HEAD) # WARNING: Remember to change the tag when updating the image @@ -5,7 +7,6 @@ IMAGE_TAG = 1.1.1 IMAGE_NAME = statusteam/windows-desktop-ubuntu:$(IMAGE_TAG) REACT_NATIVE_DESKTOP_COMMIT_SHA = 2a76c435a27f0bf6c089f74222212b3a58e10385 -__read__toolversion__ = $(shell grep $(1) ../../../.TOOLVERSIONS | cut -d'=' -f2-) build: rm -rf ./scripts && \ @@ -13,10 +14,10 @@ build: cp -R ../../scripts/3rd-party/ ./scripts/ && \ docker build \ --build-arg="REACT_NATIVE_DESKTOP_COMMIT_SHA=$(REACT_NATIVE_DESKTOP_COMMIT_SHA)" \ - --build-arg="CONAN_VERSION=$(call __read__toolversion__,conan)" \ - --build-arg="LEIN_VERSION=$(call __read__toolversion__,lein)" \ - --build-arg="NODE_VERSION=$(call __read__toolversion__,node)" \ - --build-arg="NVM_VERSION=$(call __read__toolversion__,nvm)" \ + --build-arg="CONAN_VERSION=$(call __toolversion,conan)" \ + --build-arg="LEIN_VERSION=$(call __toolversion,lein)" \ + --build-arg="NODE_VERSION=$(call __toolversion,node)" \ + --build-arg="NVM_VERSION=$(call __toolversion,nvm)" \ --label="commit=$(GIT_COMMIT)" \ -t $(IMAGE_NAME) .; \ rm -rf ./scripts diff --git a/scripts/build-desktop.sh b/scripts/build-desktop.sh index 5f7c660cb7..78c771acb9 100755 --- a/scripts/build-desktop.sh +++ b/scripts/build-desktop.sh @@ -126,7 +126,7 @@ function init() { fi echo "${RED}Conan package manager not found. Installing...${NC}" - pip3 install conan==$(get_tool_version conan) + pip3 install conan==$(toolversion conan) fi conan remote add --insert 0 -f status-im https://conan.status.im diff --git a/scripts/lib/setup/installers.sh b/scripts/lib/setup/installers.sh index 63db8dca64..fb864c0fdd 100755 --- a/scripts/lib/setup/installers.sh +++ b/scripts/lib/setup/installers.sh @@ -84,7 +84,7 @@ EOF function install_leiningen() { if is_macos; then - brew_install leiningen $(get_tool_version leiningen) f7e10afc6d04a13d28e825db71326d16c12e9724 + brew_install leiningen $(toolversion leiningen) f7e10afc6d04a13d28e825db71326d16c12e9724 elif is_linux; then install_leiningen_linux fi @@ -92,7 +92,7 @@ function install_leiningen() { function install_leiningen_linux() { local destination=/usr/bin/lein - local required_version=$(get_tool_version leiningen) + local required_version=$(toolversion leiningen) if ! program_version_exists "lein" "$required_version"; then cecho "@b@blue[[+ Installing lein...]]" @@ -112,7 +112,7 @@ EOF function install_clojure_cli() { if is_macos; then - local required_version=$(get_tool_version clojure_cli) + local required_version=$(toolversion clojure_cli) brew_install clojure $required_version 90ea0cb4b194282b5906108dcec522c5a1ed7ce0 elif is_linux; then install_clojure_cli_linux @@ -120,7 +120,7 @@ function install_clojure_cli() { } function install_clojure_cli_linux() { - local required_version=$(get_tool_version clojure_cli) + local required_version=$(toolversion clojure_cli) if ! program_exists "clojure" || ! echo "$(clj -r <<< '(System/exit 0)')" | grep -q -o ${required_version%.*}; then cecho "@b@blue[[+ Installing Clojure CLI...]]" @@ -142,7 +142,7 @@ EOF } function install_watchman() { - local required_version=$(get_tool_version watchman) + local required_version=$(toolversion watchman) if is_macos; then brew_install watchman $required_version 1a41406af8db6bbc0c94811cf60043a7436be3c4 elif is_linux; then @@ -197,7 +197,7 @@ function install_android_sdk_linux() { } function install_maven() { - local required_version=$(get_tool_version maven) + local required_version=$(toolversion maven) brew_install maven $required_version 4c23c22dc71eadaeb7b25d6e6c10fd53bfc26976 linux_install maven } @@ -206,7 +206,7 @@ function install_react_native_cli() { cd "$(repo_path)" local npm_command='npm' - local required_version=$(get_tool_version react_native_cli) + local required_version=$(toolversion react_native_cli) if is_linux && ! nvm_installed; then # aptitude version of node requires sudo for global install @@ -221,7 +221,7 @@ function install_react_native_cli() { } function install_yarn() { - local required_version=$(get_tool_version yarn) + local required_version=$(toolversion yarn) if ! program_exists "yarn"; then npm install -g yarn@$required_version # Install the required yarn version else @@ -238,7 +238,7 @@ function install_yarn() { } function install_nvm() { - local required_version=$(get_tool_version nvm) + local required_version=$(toolversion nvm) if ! program_version_exists 'nvm' "$required_version"; then cecho "@b@blue[[+ Installing nvm $required_version]]" @@ -255,7 +255,7 @@ function install_nvm() { function install_node_via_nvm() { local nvmrc="$(repo_path)/.nvmrc" - local required_version=$(get_tool_version node) + local required_version=$(toolversion node) cd "$(repo_path)" @@ -281,7 +281,7 @@ function install_node_via_nvm() { } function install_node_via_package_manager() { - local required_version=$(get_tool_version node) + local required_version=$(toolversion node) if ! program_version_exists "node" "v$required_version"; then if is_macos; then brew_install node "$required_version" b801cc6b71e7c09448b4f823e493710665de68eb @@ -370,8 +370,8 @@ function use_android_sdk() { echo "sdk.dir=$ANDROID_SDK_ROOT" | tee -a $_localPropertiesPath fi - local ANDROID_BUILD_TOOLS_VERSION=$(get_tool_version ANDROID_BUILD_TOOLS_VERSION) - local ANDROID_PLATFORM_VERSION=$(get_tool_version ANDROID_PLATFORM_VERSION) + local ANDROID_BUILD_TOOLS_VERSION=$(toolversion ANDROID_BUILD_TOOLS_VERSION) + local ANDROID_PLATFORM_VERSION=$(toolversion ANDROID_PLATFORM_VERSION) touch ~/.android/repositories.cfg echo y | sdkmanager "platform-tools" "build-tools;$ANDROID_BUILD_TOOLS_VERSION" "platforms;$ANDROID_PLATFORM_VERSION" else @@ -398,7 +398,7 @@ function install_android_ndk() { PLATFORM="darwin" fi - local ANDROID_NDK_VERSION=$(get_tool_version ANDROID_NDK_VERSION) + local ANDROID_NDK_VERSION=$(toolversion ANDROID_NDK_VERSION) downloadUrl . android-ndk.zip https://dl.google.com/android/repository/android-ndk-$ANDROID_NDK_VERSION-$PLATFORM-x86_64.zip && \ cecho "@cyan[[Extracting Android NDK to $_ndkParentDir.]]" && \ unzip -q -o ./android-ndk.zip -d "$_ndkParentDir" && \ diff --git a/scripts/lib/setup/packages.sh b/scripts/lib/setup/packages.sh index 3253269171..a43f11f1f7 100755 --- a/scripts/lib/setup/packages.sh +++ b/scripts/lib/setup/packages.sh @@ -24,18 +24,10 @@ function program_version_exists() { $(exit 1) } -function get_tool_version() { - local toolName=$1 - local version=`grep "^$toolName" ./.TOOLVERSIONS | cut -d'=' -f2-` - if [ -z "$version" ]; then - exit 1 - fi - - echo $version +function toolversion() { + ./toolversion "${1}" } - - ######## # Homebrew ######## diff --git a/scripts/run-environment-check.sh b/scripts/run-environment-check.sh index 0234d76094..d991df5d15 100755 --- a/scripts/run-environment-check.sh +++ b/scripts/run-environment-check.sh @@ -11,8 +11,8 @@ source "$_current_dir/lib/setup/path-support.sh" source_lib "packages.sh" -EXPECTED_NODE_VERSION="v$(get_tool_version node)" # note the 'v' in front, that is how node does versioning -EXPECTED_YARN_VERSION="$(get_tool_version yarn)" # note the lack of 'v' in front. inconsistent. :( +EXPECTED_NODE_VERSION="v$(toolversion node)" # note the 'v' in front, that is how node does versioning +EXPECTED_YARN_VERSION="$(toolversion yarn)" # note the lack of 'v' in front. inconsistent. :( #if no arguments passed, inform user about possible ones diff --git a/scripts/toolversion b/scripts/toolversion new file mode 100755 index 0000000000..1f462a636a --- /dev/null +++ b/scripts/toolversion @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +################################################################################ +# This tool fetches versions and checksums of build tools from the .TOOLVERSIONS +# file in project root. This is then used by various setup scripts, +# and most importantly by Dockerfiles. +################################################################################ + +set -e + +GIT_ROOT=$(git rev-parse --show-toplevel) +TOOL_VERSIONS_FILE="${GIT_ROOT}/.TOOLVERSIONS" + +usage () { + echo "Usage: toolversion [-c] " >&2 + echo + echo "This script extract tooling versions from ${TOOL_VERSIONS_FILE}" + exit 0 +} + +# some options parsing +while getopts ":ch" opt; do + case $opt in + c) CHECKSUM=1; shift ;; + h) usage;; + \?) echo "Invalid option: -$OPTARG" >&2; exit 1;; + esac +done + +# verify the main argument was given +if [[ -z "${1}" ]]; then usage; fi + +NAME=${1} + +getColumn () { + awk -F';' "/^${NAME};/{print \$${1}}" "${TOOL_VERSIONS_FILE}" +} + +if [[ $CHECKSUM ]]; then + getColumn 3 +else + getColumn 2 +fi