Merge pull request #2525 from dbalatero/experiment/dev-setup-script

Add developer setup script for smoother setup on OSX
This commit is contained in:
Andy Tudhope 2017-11-30 11:47:28 +02:00 committed by GitHub
commit c6f44cc852
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 363 additions and 0 deletions

2
.gitignore vendored
View File

@ -36,6 +36,7 @@ local.properties
#
node_modules/
npm-debug.log
.nvmrc
# BUCK
buck-out/
@ -80,6 +81,7 @@ status-dev-cli
#ios
ios/Pods
ios/StatusIm.xcworkspace
.ruby-version
#python
*.pyc

View File

@ -0,0 +1,105 @@
#!/usr/bin/env bash
function install_node() {
if nvm_installed; then
install_node_via_nvm
else
install_node_via_brew
fi
}
function install_react_native_cli() {
cd "$(repo_path)"
if npm list -g | grep -q react-native-cli; then
already_installed "react-native-cli"
else
npm 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 latest stable Node version]]"
nvm install stable
echo stable > "$nvmrc"
nvm use
else
nvm use >/dev/null
local version=$(node -v)
cecho "+ Node already installed ($version via NVM)... skipping."
fi
}
function install_node_via_brew() {
if ! program_exists "node"; then
brew install node
else
cecho "+ Node already installed ($(node -v) via Homebrew)... 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 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 install_cocoapods() {
local gem_command="sudo gem"
local destination="system Ruby"
if program_exists "rvm"; then
initialize_rvm
gem_command="gem"
destination="RVM ($(rvm current))"
fi
if ! program_exists "pod"; then
$gem_command install cocoapods
elif ! correct_pod_version_is_installed; then
local version=$(required_pod_version)
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 "$@"
echo
echo " + done"
echo
}

76
scripts/lib/setup-osx/output.sh Executable file
View File

@ -0,0 +1,76 @@
#!/usr/bin/env bash
function load_color_support() {
# Check if we're in a terminal
if test -t 1; then
local color_count=$(tput colors)
# Only load colors if our terminal supports them
if test -n "$color_count" && test $color_count -ge 8; then
_color_bold="$(tput bold)"
_color_underline="$(tput sgr 0 1)"
_color_red="$(tput setaf 1)"
_color_green="$(tput setaf 2)"
_color_yellow="$(tput setaf 3)"
_color_blue="$(tput setaf 4)"
_color_magenta="$(tput setaf 5)"
_color_cyan="$(tput setaf 6)"
_color_white="$(tput setaf 7)"
_color_reset="$(tput sgr0)"
fi
fi
}
load_color_support
function cecho() {
local colorized=$(
echo "$@" | sed -E \
-e 's/((@(red|green|yellow|blue|magenta|cyan|white|reset|b|u))+)[[]{2}(.*)[]]{2}/\1\4@reset/g' \
-e "s/@red/${_color_red}/g" \
-e "s/@green/${_color_green}/g" \
-e "s/@yellow/${_color_yellow}/g" \
-e "s/@blue/${_color_blue}/g" \
-e "s/@magenta/${_color_magenta}/g" \
-e "s/@cyan/${_color_cyan}/g" \
-e "s/@white/${_color_white}/g" \
-e "s/@reset/${_color_reset}/g" \
-e "s/@b/${_color_bold}/g" \
-e "s/@u/${_color_underline}/g"
)
echo "$colorized"
}
function setup_header() {
local header=$1
cecho "@b@green[[$header]]"
echo
}
function already_installed() {
local package=$1
cecho "+ $package already installed... skipping"
}
function setup_complete() {
cecho "@b@blue[[Setup complete!]]
===============
There are a few @b[[manual steps]] you might want to do:
1. Optionally set up Genymotion if you don't want to use Android Virtual Device:
@blue[[https://www.genymotion.com]]
2. Setup Android Development Environment + Simulator:
@blue[[https://facebook.github.io/react-native/docs/android-setup.html]]
3. Add your SSH public key to Github if it isn't already in there.
"
echo
}

View File

@ -0,0 +1,89 @@
#!/usr/bin/env bash
########
# Install checks
########
function program_exists() {
local program=$1
command -v "$program" >/dev/null 2>&1
}
########
# Homebrew
########
function install_homebrew_if_needed() {
! is_macos && return 0
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 brew_install() {
local package=$1
if ! is_macos; then
return 0
fi
if brew list "$package" > /dev/null 2>&1; then
already_installed "$package"
else
brew install $@
fi
}
function brew_cask_install() {
local package=$1
if ! is_macos; then
return 0
fi
if brew cask list | grep -q "$package"; then
already_installed "$package"
else
brew cask install $@
fi
}
function brew_tap() {
local cask=$1
if ! is_macos; then
return 0
fi
if ! brew tap | grep -q "$cask"; then
brew tap "$cask"
fi
}
###############
# RVM
###############
function load_rvm_if_available() {
[ -f ~/.rvm/scripts/rvm ] && source ~/.rvm/scripts/rvm
}
###############
# NVM
###############
function load_nvm_if_available() {
[ -f ~/.nvm/nvm.sh ] && source ~/.nvm/nvm.sh
}
function nvm_installed() {
program_exists "nvm"
}

View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
_current_dir=$(cd "${BASH_SOURCE%/*}" && pwd)
_scripts_dir=$(cd "$_current_dir/../.." && pwd)
_repo_dir=$(cd "$_scripts_dir/.." && pwd)
function scripts_path() {
echo $_scripts_dir
}
function repo_path() {
echo $_repo_dir
}
function source_lib() {
local library_path=$1
source "$_current_dir/$library_path"
}

View File

@ -0,0 +1,18 @@
#!/usr/bin/env bash
OS=$(uname -s)
function is_macos() {
[[ "$OS" =~ Darwin ]]
}
function exit_unless_mac() {
if ! is_macos; then
cecho "@red[[This install script currently supports Mac OS X only. To
manually install, please visit the wiki for more information:]]
@blue[[https://wiki.status.im/Building_Status]]"
echo
fi
}

54
scripts/setup-osx Executable file
View File

@ -0,0 +1,54 @@
#!/usr/bin/env bash
########################################################################
# This install script will setup your development dependencies on OS X.
# Windows/Linux support is welcome!
#
# Usage: scripts/setup-osx.sh
########################################################################
_current_dir=$(cd "${BASH_SOURCE%/*}" && pwd)
source "$_current_dir/lib/setup-osx/path-support.sh"
source_lib "output.sh"
source_lib "packages.sh"
source_lib "platform.sh"
source_lib "installers.sh"
exit_unless_mac
load_nvm_if_available
load_rvm_if_available
####
setup_header "Installing requirements..."
install_homebrew_if_needed
brew_tap "caskroom/cask"
brew_cask_install "caskroom/versions/java8"
brew_install leiningen
install_node
brew_install watchman
install_react_native_cli
brew_cask_install android-sdk
brew_install maven
install_cocoapods
####
echo && setup_header "Installing dependencies..."
dependency_setup lein deps
dependency_setup npm install
dependency_setup ./re-natal deps
dependency_setup ./re-natal enable-source-maps
dependency_setup \
"mvn -f modules/react-native-status/ios/RCTStatus dependency:unpack"
dependency_setup "cd ios && pod install && cd .."
setup_complete