status-mobile/scripts/lib/setup/installers.sh

333 lines
7.4 KiB
Bash
Executable File

#!/usr/bin/env bash
_localPropertiesPath=./android/local.properties
function install_node() {
if nvm_installed; then
install_node_via_nvm
else
install_node_via_package_manager
fi
}
function install_and_setup_package_manager() {
if is_macos; then
install_homebrew_if_needed
brew_tap "caskroom/cask"
elif is_linux; then
# Linux
buildtools=(
autoconf
automake
build-essential
cmake
curl
g++
libssl-dev
libtool
make
python-dev
wget
unzip
)
for package in "${buildtools[@]}"; do
linux_install "$package"
done
fi
}
function needs_java8_linux() {
! program_exists "java" || !(java -version 2>&1 | grep -q "1.8.0")
}
function install_java8() {
if is_macos; then
brew_cask_install "caskroom/versions/java8"
elif is_linux; then
if needs_java8_linux; then
sudo su << EOF
add-apt-repository ppa:webupd8team/java -y
apt update
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections
apt install -y oracle-java8-installer
EOF
else
already_installed "java8"
fi
fi
}
function install_leiningen() {
if is_macos; then
brew_install leiningen
elif is_linux; then
install_leiningen_linux
fi
}
function install_leiningen_linux() {
local destination=/usr/bin/lein
if ! program_exists "lein"; then
cecho "@b@blue[[+ Installing lein...]]"
sudo su << EOF
curl --silent \
https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein \
-o $destination
chmod 755 $destination
cd $HOME && lein upgrade
EOF
else
already_installed "lein"
fi
}
function install_clojure_cli() {
if is_macos; then
brew_install clojure
elif is_linux; then
install_clojure_cli_linux
fi
}
function install_clojure_cli_linux() {
if ! program_exists "lein"; then
cecho "@b@blue[[+ Installing Clojure CLI...]]"
local current_dir=$(pwd)
sudo su << EOF
curl --silent \
https://download.clojure.org/install/linux-install-1.9.0.381.sh \
-o /tmp/clojure
chmod +x /tmp/clojure
cd /tmp
./clojure
EOF
cd "$current_dir"
else
already_installed "Clojure CLI"
fi
}
function install_watchman() {
if is_macos; then
brew_install watchman
elif is_linux; then
if ! program_exists "watchman"; then
local current_dir=$(pwd)
local clone_path="/tmp/watchman"
git clone https://github.com/facebook/watchman.git $clone_path
cd $clone_path
git checkout v4.9.0
./autogen.sh && \
./configure && \
make && \
sudo make install
cd "$current_dir"
else
already_installed "watchman"
fi
fi
}
function install_homebrew_if_needed() {
! is_macos && return 1
if test ! $(which brew); then
cecho "@b@blue[[+ Installing homebrew]]"
ruby -e "$(curl -fsSL \
https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update
else
already_installed "Homebrew"
fi
}
function install_android_sdk() {
if is_macos; then
brew_cask_install android-sdk
elif is_linux; then
install_android_sdk_linux
fi
use_android_sdk
}
function install_android_sdk_linux() {
cecho "@b@yellow[[+ Skipping Android SDK setup, not implemented on Linux]]"
return 1
}
function install_maven() {
brew_install maven
linux_install maven
}
function install_react_native_cli() {
cd "$(repo_path)"
local npm_command="npm"
if is_linux && ! nvm_installed; then
# aptitude version of node requires sudo for global install
npm_command="sudo npm"
fi
if npm list -g | grep -q react-native-cli; then
already_installed "react-native-cli"
else
$npm_command install -g react-native-cli
fi
}
function install_node_via_nvm() {
local nvmrc="$(repo_path)/.nvmrc"
cd "$(repo_path)"
if [ ! -e "$nvmrc" ]; then
cecho "@b@blue[[+ Installing Node 9 (Node 10 is not supported by Realm)]]"
nvm install 9
nvm alias status-im 9
echo status-im > "$nvmrc"
nvm use status-im
else
local version_alias=$(cat "$nvmrc")
nvm use $version_alias
local version=$(node -v)
cecho "+ Node already installed ($version_alias $version via NVM)... skipping."
fi
}
function install_node_via_package_manager() {
if ! program_exists "node"; then
if is_macos; then
brew_install node
elif is_linux; then
curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
linux_update
linux_install nodejs
fi
else
cecho \
"+ Node already installed ($(node -v) via package manager)... skipping."
fi
}
function required_pod_version() {
cat "$(repo_path)/ios/Podfile.lock" | grep "COCOAPODS: " | awk '{ print $2 }'
}
function correct_pod_version_is_installed() {
! program_exists "pod" && return 1
[[ "$(required_pod_version)" == "$(pod --version)" ]]
}
function using_rvm() {
program_exists "rvm"
}
function initialize_rvm() {
cd "$(repo_path)"
if [ ! -e "$(repo_path)/.ruby-version" ]; then
rvm use --default > /dev/null
echo "$(rvm current)" > .ruby-version
fi
rvm use . >/dev/null
}
function using_cocoapods() {
is_macos
}
function install_cocoapods() {
! using_cocoapods && return 1
local gem_command="sudo gem"
local destination="system Ruby"
local version=$(required_pod_version)
if using_rvm; then
initialize_rvm
gem_command="gem"
destination="RVM ($(rvm current))"
fi
if ! program_exists "pod"; then
$gem_command install cocoapods -v "$version"
elif ! correct_pod_version_is_installed; then
cecho "@b@blue[[+ Updating to cocoapods $version]]"
$gem_command uninstall cocoapods --ignore-dependencies --silent
$gem_command install cocoapods -v "$version"
else
cecho "+ cocoapods already installed to $destination... skipping."
fi
}
function dependency_setup() {
cecho "@b@blue[[\$ $@]]"
echo
cd "$(repo_path)"
eval "$@" || (cecho "@b@red[[Error running dependency install]]" && exit 1)
echo
echo " + done"
echo
}
function use_android_sdk() {
if [ -n "$ANDROID_SDK" ]; then
if ! grep -Fq "sdk.dir" $_localPropertiesPath; then
echo "sdk.dir=$ANDROID_SDK" | tee -a $_localPropertiesPath
fi
else
local _docUrl="https://docs.status.im/docs/build_status_linux.html"
if is_macos; then
_docUrl="https://docs.status.im/docs/build_status_osx.html"
fi
cecho "@yellow[[ANDROID_SDK environment variable not defined, please install the Android SDK.]]"
cecho "@yellow[[(see $_docUrl).]]"
echo
exit 1
fi
}
function install_android_ndk() {
if grep -Fq "ndk.dir" $_localPropertiesPath; then
dependency_setup \
"pushd android && ./gradlew react-native-android:installArchives && popd"
else
local _ndkParentDir=~/Android/Sdk
mkdir -p $_ndkParentDir
cecho "@cyan[[Downloading Android NDK.]]"
wget --output-document=android-ndk.zip https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip && \
cecho "@cyan[[Extracting Android NDK to $_ndkParentDir.]]" && \
unzip -q -o android-ndk.zip -d "$_ndkParentDir" && \
rm -f android-ndk.zip && \
_ndkTargetDir="$_ndkParentDir/$(ls $_ndkParentDir | head -n 1)" && \
echo "ndk.dir=$_ndkTargetDir" | tee -a $_localPropertiesPath && \
cecho "@blue[[Android NDK installation completed in $_ndkTargetDir.]]"
fi
}