cleanup of shell scripts

Changes:
- Add missing lazy assignment for OS_NAME, fixes double Nix shells
- Moved `scripts/add-nix-gcroots.sh` to `nix/scripts/gcroots.sh`
- Moved Nix package manager setup to `nix/scripts/setup.sh`
- Created `nix/scripts/source.sh` to reuse in all Nix scripts
- Created `STARTING_GUIDE.md` with instructions for contributors
- Created `scripts/colors.sh` for definition of shell colors
- Removed `scripts/setup` in favor of `nix/scripts/setup.sh`
- Removed all of `scripts/lib` since it was useless

Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
Jakub Sokołowski 2020-02-19 14:15:28 +01:00
parent eb1cc65a3d
commit 46bd2b2e4c
No known key found for this signature in database
GPG Key ID: 4EF064D0E6D63020
21 changed files with 214 additions and 298 deletions

View File

@ -55,7 +55,7 @@ export _NIX_ROOT = /opt/nix
endif endif
# Useful for checking if we are on NixOS # Useful for checking if we are on NixOS
OS_NAME = $(shell grep -oP '^NAME=\K\w(.*)' /etc/os-release) OS_NAME ?= $(shell source /etc/os-release && echo $${NAME})
#---------------- #----------------
# Nix targets # Nix targets
@ -91,7 +91,7 @@ endif
nix-add-gcroots: export TARGET := default nix-add-gcroots: export TARGET := default
nix-add-gcroots: ##@nix Add Nix GC roots to avoid status-react expressions being garbage collected nix-add-gcroots: ##@nix Add Nix GC roots to avoid status-react expressions being garbage collected
scripts/add-nix-gcroots.sh nix/scripts/gcroots.sh
nix-update-gradle: ##@nix Update maven nix expressions based on current gradle setup nix-update-gradle: ##@nix Update maven nix expressions based on current gradle setup
nix/mobile/android/maven-and-npm-deps/maven/generate-nix.sh nix/mobile/android/maven-and-npm-deps/maven/generate-nix.sh
@ -160,8 +160,8 @@ release: release-android release-ios ##@build build release for Android and iOS
release-android: export TARGET ?= android release-android: export TARGET ?= android
release-android: export BUILD_ENV ?= prod release-android: export BUILD_ENV ?= prod
release-android: export BUILD_TYPE ?= nightly release-android: export BUILD_TYPE ?= nightly
release-android: export BUILD_NUMBER ?= 9999 release-android: export BUILD_NUMBER ?= $(shell ./scripts/version/gen_build_no.sh | cut -c1-10)
release-android: export STORE_FILE ?= $(HOME)/.gradle/status-im.keystore release-android: export KEYSTORE_FILE ?= $(HOME)/.gradle/status-im.keystore
release-android: export ANDROID_ABI_SPLIT ?= false release-android: export ANDROID_ABI_SPLIT ?= false
release-android: export ANDROID_ABI_INCLUDE ?= armeabi-v7a;arm64-v8a;x86 release-android: export ANDROID_ABI_INCLUDE ?= armeabi-v7a;arm64-v8a;x86
release-android: ##@build build release for Android release-android: ##@build build release for Android

50
STARTING_GUIDE.md Normal file
View File

@ -0,0 +1,50 @@
# Description
This document provides information on how to start developing Status App.
# Getting Started
To start developing start a shell for platform you are interested in.
```
make shell TARGET=android
```
This step will take a while the first time as it will download all dependencies.
To build the app, your can simply run on of the following:
```
make release-android
make release-ios
```
For more `make` targets run `make help`.
# Manual Steps
There are a few manual steps you might want to do in order to start contributing.
## Genymotion Virtualization
Optionally set up Genymotion if you don't want to use Android Virtual Device:
https://www.genymotion.com
## Android Development Environment
You can also setup Android Development Environment + Simulator:
https://facebook.github.io/react-native/docs/getting-started.html
## Configure GitHub Account
The optimal way of pushing to GitHubis using SSH instead of user/pass auth.
It's recommented that you [add your public SSH key to your GitHub account](https://help.github.com/en/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account).
## Configure GPG Keys for signing commits
In order to increase security we require all commits in `status-react` repo to be signed with a GPG key.
Steps:
1. [Generate a new GPG key](https://help.github.com/en/github/authenticating-to-github/generating-a-new-gpg-key)
2. [Setup Git to use your GPG key](https://help.github.com/en/github/authenticating-to-github/telling-git-about-your-signing-key)
3. [Setup Git to sign commits](https://help.github.com/en/github/authenticating-to-github/signing-commits)
4. [Setup GitHub to validate commits](https://help.github.com/en/github/authenticating-to-github/adding-a-new-gpg-key-to-your-github-account)

View File

@ -106,3 +106,11 @@ If copying from Nix Cache times out you can adjust the timeout by changing [`nix
```conf ```conf
stalled-download-timeout = 9001 stalled-download-timeout = 9001
``` ```
### `extra-sandbox-paths` Is a Restricted Setting
When building Android on NixOS you might encounter the following error:
```
ignoring the user-specified setting 'extra-sandbox-paths', because it is a restricted setting and you are not a trusted user
```
You can mitigate this by setting the [`nix.trustedUsers`](https://nixos.org/nixos/options.html#nix.trustedusers) property.

View File

@ -4,6 +4,8 @@ set -e
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel) GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
resultPath="${GIT_ROOT}/result/" resultPath="${GIT_ROOT}/result/"
source "${GIT_ROOT}/scripts/colors.sh"
source "${GIT_ROOT}/nix/scripts/source.sh"
# cleanup for artifacts created during builds # cleanup for artifacts created during builds
function cleanup() { function cleanup() {
@ -11,12 +13,12 @@ function cleanup() {
trap - EXIT ERR INT QUIT trap - EXIT ERR INT QUIT
# do the actual cleanup, ignore failure # do the actual cleanup, ignore failure
if ${GIT_ROOT}/nix/scripts/clean.sh "${nixResultPath}"; then if ${GIT_ROOT}/nix/scripts/clean.sh "${nixResultPath}"; then
echo "Successful cleanup!" echo -e "${GRN}Successful cleanup!${RST}"
elif [[ -n "${JENKINS_URL}" ]]; then elif [[ -n "${JENKINS_URL}" ]]; then
# in CI removing some paths can fail due to parallel builds # in CI removing some paths can fail due to parallel builds
echo "Ignoring cleanup failure in CI." echo -e "${YLW}Ignoring cleanup failure in CI.${RST}"
else else
echo "Failed cleanup!" echo -e "${RED}Failed cleanup!${RST}"
exit 1 exit 1
fi fi
} }
@ -32,14 +34,11 @@ function extractResults() {
ls -l "${resultPath}" ls -l "${resultPath}"
} }
# Load Nix profile
. ~/.nix-profile/etc/profile.d/nix.sh
targetAttr="${1}" targetAttr="${1}"
shift shift
if [[ -z "${targetAttr}" ]]; then if [[ -z "${targetAttr}" ]]; then
echo "First argument is mandatory and has to specify the Nix attribute!" echo -e "${RED}First argument is mandatory and has to specify the Nix attribute!${RST}"
exit 1 exit 1
fi fi
@ -68,4 +67,4 @@ nixResultPath=$(nix-build ${nixOpts[@]})
echo "Extracting result: ${nixResultPath}" echo "Extracting result: ${nixResultPath}"
extractResults "${nixResultPath}" extractResults "${nixResultPath}"
echo "SUCCESS" echo -e "${GRN}SUCCESS${RST}"

View File

@ -2,6 +2,9 @@
set -e set -e
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
source "${GIT_ROOT}/nix/scripts/source.sh"
function log() { echo "$@" 1>&2; } function log() { echo "$@" 1>&2; }
# helpers for getting related paths in Nix store # helpers for getting related paths in Nix store
@ -93,4 +96,4 @@ fi
toDelete=$(printf '%s\n' "${toDelete[@]}" | sort | uniq) toDelete=$(printf '%s\n' "${toDelete[@]}" | sort | uniq)
log "Deleting..." log "Deleting..."
nix-store --ignore-liveness --delete ${toDelete[@]} nix-store --delete ${toDelete[@]}

View File

@ -1,12 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
if [[ -z "${IN_NIX_SHELL}" ]]; then
echo "Remember to call 'make shell'!"
exit 1
fi
set -Eeu set -Eeu
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
source "${GIT_ROOT}/nix/scripts/source.sh"
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel) GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
rm -rf .nix-gcroots rm -rf .nix-gcroots

47
nix/scripts/setup.sh Executable file
View File

@ -0,0 +1,47 @@
#!/usr/bin/env bash
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
source "${GIT_ROOT}/scripts/colors.sh"
NIX_VERSION="2.3.2"
NIX_INSTALL_URL="https://nixos.org/releases/nix/nix-${NIX_VERSION}/install"
function install_nix() {
# Don't break people's profiles
export NIX_INSTALLER_NO_MODIFY_PROFILE=1
# Fix for installing on MacOS Catalina
export NIX_IGNORE_SYMLINK_STORE=1
bash <(curl "${NIX_INSTALL_URL}") --no-daemon
if [ $? -eq 0 ]; then
echo -e "${GRN}The Nix package manager was successfully installed.${RST}"
else
echo -e "${RED}Failed to install Nix package manager!${RST}" > /dev/stderr
echo "Please see: https://nixos.org/nix/manual/#chap-installation" > /dev/stderr
exit 1
fi
}
if [[ ! -x "$(command -v git)" ]]; then
echo -e "${RED}The 'curl' utility is required for Nix installation.${RST}" > /dev/stderr
exit 1
fi
if [[ "$(uname -v)" == *NixOS* ]]; then
echo -e "${GRN}Already running NixOS.${RST}"
exit
fi
if [[ -x "$(command -v nix)" ]]; then
echo -e "${GRN}Nix package manager already installed.${RST}"
exit
fi
if [[ "${IN_NIX_SHELL}" == 'pure' ]]; then
echo -e "${GRN}Already in a pure Nix shell.${RST}"
exit
fi
# If none of the checks before succeeded we need to install Nix
echo -e "${GRN}Setting up Nix package manager...${RST}"
install_nix
echo -e "${YLW}See STARTING_GUIDE.md if you're new here.${RST}"

View File

@ -11,29 +11,13 @@
# Take note that this makes Nix tools like `nix-build` unavailable in the shell. # Take note that this makes Nix tools like `nix-build` unavailable in the shell.
# - _NIX_KEEP: This variable allows specifying which env vars to keep for Nix pure shell. # - _NIX_KEEP: This variable allows specifying which env vars to keep for Nix pure shell.
GREEN='\033[0;32m' GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
YELLOW='\033[1;33m' source "${GIT_ROOT}/scripts/colors.sh"
NC='\033[0m' source "${GIT_ROOT}/nix/scripts/source.sh"
export TERM=xterm # fix for colors export TERM=xterm # fix for colors
shift # we remove the first -c from arguments shift # we remove the first -c from arguments
if ! command -v "nix" >/dev/null 2>&1; then
if [ -f ~/.nix-profile/etc/profile.d/nix.sh ]; then
. ~/.nix-profile/etc/profile.d/nix.sh
elif [ "$IN_NIX_SHELL" != 'pure' ]; then
echo -e "${GREEN}Setting up environment...${NC}" > /dev/stderr
./scripts/setup
. ~/.nix-profile/etc/profile.d/nix.sh
fi
fi
if !command -v "nix" >/dev/null 2>&1; then
echo "Nix not available, sourcing profile failed!" > /dev/stderr
exit 1
fi
shellArgs=( shellArgs=(
"--show-trace" "--show-trace"
) )
@ -41,7 +25,7 @@ shellArgs=(
if [[ -n "${TARGET}" ]]; then if [[ -n "${TARGET}" ]]; then
shellArgs+=("--argstr target ${TARGET}") shellArgs+=("--argstr target ${TARGET}")
else else
echo -e "${YELLOW}Env is missing TARGET, assuming default target.${NC} See nix/README.md for more details." 1>&2 echo -e "${YLW}Env is missing TARGET, assuming default target.${RST} See nix/README.md for more details." 1>&2
fi fi
if [[ "$TARGET" =~ (linux|windows|darwin|macos) ]]; then if [[ "$TARGET" =~ (linux|windows|darwin|macos) ]]; then
@ -74,7 +58,7 @@ fi
# ENTER_NIX_SHELL is the fake command used when `make shell` is run. # ENTER_NIX_SHELL is the fake command used when `make shell` is run.
# It is just a special string, not a variable, and a marker to not use `--run`. # It is just a special string, not a variable, and a marker to not use `--run`.
if [[ $@ == "ENTER_NIX_SHELL" ]]; then if [[ $@ == "ENTER_NIX_SHELL" ]]; then
echo -e "${GREEN}Configuring ${_NIX_ATTR:-default} Nix shell for target '${TARGET:-default}'...${NC}" 1>&2 echo -e "${GRN}Configuring ${_NIX_ATTR:-default} Nix shell for target '${TARGET:-default}'...${RST}" 1>&2
exec nix-shell ${shellArgs[@]} ${entryPoint} exec nix-shell ${shellArgs[@]} ${entryPoint}
else else
# Not all builds are ready to be run in a pure environment # Not all builds are ready to be run in a pure environment
@ -87,6 +71,6 @@ else
if [[ -n "${_NIX_KEEP}" ]]; then if [[ -n "${_NIX_KEEP}" ]]; then
shellArgs+=("--keep ${_NIX_KEEP//;/ --keep }") shellArgs+=("--keep ${_NIX_KEEP//;/ --keep }")
fi fi
echo -e "${GREEN}Configuring ${pureDesc}${_NIX_ATTR:-default} Nix shell for target '${TARGET}'...${NC}" 1>&2 echo -e "${GRN}Configuring ${pureDesc}${_NIX_ATTR:-default} Nix shell for target '${TARGET}'...${RST}" 1>&2
exec nix-shell ${shellArgs[@]} --run "$@" ${entryPoint} exec nix-shell ${shellArgs[@]} --run "$@" ${entryPoint}
fi fi

26
nix/scripts/source.sh Executable file
View File

@ -0,0 +1,26 @@
#!/usr/bin/env bash
# This script makes sure we have Nix tools available
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
function source_nix() {
# Just stop if Nix is already available
if [[ -x $(command -v nix) ]]; then
return
elif [[ -f "${HOME}/.nix-profile/etc/profile.d/nix.sh" ]]; then
# Load Nix profile if it exists
source "${HOME}/.nix-profile/etc/profile.d/nix.sh"
else
# Setup Nix if not available
${GIT_ROOT}/nix/scripts/setup.sh
fi
# Verify Nix is available
if [[ ! -x $(command -v nix) ]]; then
echo "Nix not available, sourcing profile failed!" > /dev/stderr
exit 1
fi
}
source_nix

View File

@ -67,7 +67,7 @@ function init() {
fi fi
fi fi
if is_linux; then if [[ "$OS" =~ Linux ]]; then
rm -rf ./desktop/toolchain/ rm -rf ./desktop/toolchain/
# TODO: Use Conan for Linux and MacOS builds too # TODO: Use Conan for Linux and MacOS builds too
if is_windows_target; then if is_windows_target; then
@ -267,7 +267,7 @@ function bundleLinux() {
echo "" echo ""
} }
if is_macos; then if [[ "$OS" =~ Darwin ]]; then
function copyDylibNixDependenciesToPackage() { function copyDylibNixDependenciesToPackage() {
local dylib="$1" local dylib="$1"
local contentsDir="$2" local contentsDir="$2"
@ -441,9 +441,9 @@ function bundleMacOS() {
} }
function bundle() { function bundle() {
if is_macos; then if [[ "$OS" =~ Darwin ]]; then
bundleMacOS bundleMacOS
elif is_linux; then elif [[ "$OS" =~ Linux ]]; then
if is_windows_target; then if is_windows_target; then
bundleWindows bundleWindows
else else

7
scripts/colors.sh Normal file
View File

@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Colors
YLW='\033[1;33m'
RED='\033[0;31m'
GRN='\033[0;32m'
RST='\033[0m'

View File

@ -1,8 +0,0 @@
#!/usr/bin/env bash
filename=$1
#fileid="1yPTGcPe5DZd3ubzAgUBp3aAQRAOK9eKQ"
fileid=$2
rm -rf ./cookie
curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/null
curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${fileid}" -o ${filename}

View File

@ -2,22 +2,45 @@
set -euf pipefail set -euf pipefail
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
source "${GIT_ROOT}/scripts/colors.sh"
function property() {
grep "${2}" "${1}" | cut -d'=' -f2
}
function property_gradle() {
property ${GIT_ROOT}/android/gradle.properties ${1}
}
TARGET=${1:-debug} TARGET=${1:-debug}
CURRENT_DIR="$( cd "$( dirname "$0" )" && pwd )" CURRENT_DIR=$(cd "$(dirname "$0")" && pwd)
. "$CURRENT_DIR/lib/setup/path-support.sh" KEYSTORE_FILE=$(property_gradle 'STATUS_RELEASE_STORE_FILE')
source_lib "properties.sh" KEYSTORE_FILE=${KEYSTORE_FILE/#\~/$HOME}
STORE_FILE=$(property_gradle 'STATUS_RELEASE_STORE_FILE')
STORE_FILE="${STORE_FILE/#\~/$HOME}"
STATUS_RELEASE_STORE_PASSWORD=$(property_gradle 'STATUS_RELEASE_STORE_PASSWORD') STATUS_RELEASE_STORE_PASSWORD=$(property_gradle 'STATUS_RELEASE_STORE_PASSWORD')
STATUS_RELEASE_KEY_ALIAS=$(property_gradle 'STATUS_RELEASE_KEY_ALIAS') STATUS_RELEASE_KEY_ALIAS=$(property_gradle 'STATUS_RELEASE_KEY_ALIAS')
STATUS_RELEASE_KEY_PASSWORD=$(property_gradle 'STATUS_RELEASE_KEY_PASSWORD') STATUS_RELEASE_KEY_PASSWORD=$(property_gradle 'STATUS_RELEASE_KEY_PASSWORD')
[[ -e "$STORE_FILE" ]] && exit 0 if [[ -e "${KEYSTORE_FILE}" ]]; then
echo -e "${YLW}Keystore file already exists:${RST} ${KEYSTORE_FILE}" > /dev/stderr
exit 0
fi
echo "Generating keystore $STORE_FILE" KEYSTORE_DIR=$(dirname "${KEYSTORE_FILE}")
keydirname="$( dirname "$STORE_FILE" )" [[ -d $KEYSTORE_DIR ]] || mkdir -p $KEYSTORE_DIR
[ -d $keydirname ] || mkdir -p $keydirname
keytool -genkey -v -keystore ${STORE_FILE} -keyalg RSA -keysize 2048 -validity 10000 -alias ${STATUS_RELEASE_KEY_ALIAS} \ echo "Generating keystore ${KEYSTORE_FILE}" > /dev/stderr
-storepass ${STATUS_RELEASE_STORE_PASSWORD} -keypass ${STATUS_RELEASE_KEY_PASSWORD} -dname "CN=, OU=, O=, L=, S=, C="
keytool -genkey -v \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-dname "CN=, OU=, O=, L=, S=, C="
-keystore "${KEYSTORE_FILE}" \
-alias "${STATUS_RELEASE_KEY_ALIAS}" \
-storepass "${STATUS_RELEASE_STORE_PASSWORD}" \
-keypass "${STATUS_RELEASE_KEY_PASSWORD}" \
> /dev/stderr
echo "${KEYSTORE_FILE}"

View File

@ -3,21 +3,20 @@
# If this is not run on some machines react-native builds fail. # If this is not run on some machines react-native builds fail.
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel) GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
source "$GIT_ROOT/scripts/lib/setup/path-support.sh" source "${GIT_ROOT}/scripts/colors.sh"
source_lib "output.sh" if [[ "$(uname -s)" != Linux ]]; then
source_lib "platform.sh"
if ! is_linux; then
echo "inotify fix not applicable on non-linux OS" echo "inotify fix not applicable on non-linux OS"
return exit
fi fi
watches=$(cat /proc/sys/fs/inotify/max_user_watches) watches=$(cat /proc/sys/fs/inotify/max_user_watches)
required_watches=524288 required_watches=524288
if [ $watches -lt $required_watches ]; then if [ $watches -lt $required_watches ]; then
cecho "@b@cyan[[fs.inotify.max_user_watches limit is too low ($watches), increasing it]]" echo -e "${YLW}fs.inotify.max_user_watches limit is too low ($watches). Increasing it.${RST}"
echo fs.inotify.max_user_watches=$required_watches | sudo tee -a /etc/sysctl.conf echo "fs.inotify.max_user_watches = $required_watches" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p sudo sysctl -p
else
echo -e "${GRN}fs.inotify.max_user_watches limit is high enough.${RST}"
fi fi

View File

@ -1,78 +0,0 @@
#!/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/getting-started.html]]
3. Add your SSH public key to Github if it isn't already in there.
To build the app, please run one of the @b[[make release-*]] commands.
"
echo
}

View File

@ -1,27 +0,0 @@
#!/usr/bin/env bash
########
# Install checks
########
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
function program_exists() {
local program=$1
command -v "$program" >/dev/null 2>&1
}
function program_version_exists() {
local program=$1
if ! program_exists "$program"; then
$(exit 1)
return
fi
local required_version=$2
if echo "$($program --version)" | grep -q -wo "$required_version\|$required_version[^\.]"; then
$(exit 0)
return
fi
$(exit 1)
}

View File

@ -1,19 +0,0 @@
#!/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

@ -1,33 +0,0 @@
#!/usr/bin/env bash
OS=$(uname -s)
function is_macos() {
[[ "$OS" =~ Darwin ]]
}
function is_linux() {
[[ "$OS" =~ Linux ]]
}
function is_nixos() {
is_linux && [[ "$(uname -v)" == *NixOS* ]]
}
function exit_unless_os_supported() {
if [ "$IN_NIX_SHELL" == 'pure' ]; then
cecho "@red[[This install script is not supported in a pure Nix shell]]"
echo
exit 1
fi
if ! is_macos && ! is_linux; then
cecho "@red[[This install script currently supports Mac OS X and Linux \
via apt. To manually install, please visit the docs for more information:]]
@blue[[https://status.im/build_status]]"
echo
exit 1
fi
}

View File

@ -1,9 +0,0 @@
#!/usr/bin/env bash
function property() {
grep "${2}" ${1}|cut -d'=' -f2
}
function property_gradle() {
property $(repo_path)/android/gradle.properties ${1}
}

View File

@ -1,10 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel) GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
_current_dir=$(cd "${BASH_SOURCE%/*}" && pwd)
source "$_current_dir/lib/setup/path-support.sh"
source_lib "platform.sh"
config='' config=''
config+="status-im.build-type=\"${BUILD_TYPE}\";" config+="status-im.build-type=\"${BUILD_TYPE}\";"
@ -15,23 +11,24 @@ if [ -n "${NIMBUS_SRC_OVERRIDE}" ]; then
config+="status-im.nimbus.src-override=\"${NIMBUS_SRC_OVERRIDE}\";" config+="status-im.nimbus.src-override=\"${NIMBUS_SRC_OVERRIDE}\";"
fi fi
config+="status-im.status-react.build-number=\"${BUILD_NUMBER}\";" config+="status-im.status-react.build-number=\"${BUILD_NUMBER}\";"
config+="status-im.status-react.keystore-file=\"${STORE_FILE}\";" config+="status-im.status-react.keystore-file=\"${KEYSTORE_FILE}\";"
nixOpts=( nixOpts=(
"--arg config {${config}}" "--arg config {${config}}"
"--arg env {BUILD_ENV=\"${BUILD_ENV}\";ANDROID_ABI_SPLIT=\"${ANDROID_ABI_SPLIT}\";ANDROID_ABI_INCLUDE=\"${ANDROID_ABI_INCLUDE}\";}" "--arg env {BUILD_ENV=\"${BUILD_ENV}\";ANDROID_ABI_SPLIT=\"${ANDROID_ABI_SPLIT}\";ANDROID_ABI_INCLUDE=\"${ANDROID_ABI_INCLUDE}\";}"
) )
if is_macos; then if [[ "$OS" =~ Darwin ]]; then
# Start a watchman instance if not started already and store its socket path. # Start a watchman instance if not started already and store its socket path.
# In order to get access to the right versions of watchman and jq, we start an ad-hoc nix-shell that imports the packages from nix/nixpkgs-bootstrap. # In order to get access to the right versions of watchman and jq,
# we start an ad-hoc nix-shell that imports the packages from nix/nixpkgs-bootstrap.
WATCHMAN_SOCKFILE=$(watchman get-sockname --no-pretty | jq -r .sockname) WATCHMAN_SOCKFILE=$(watchman get-sockname --no-pretty | jq -r .sockname)
nixOpts+=( nixOpts+=(
"--argstr watchmanSockPath ${WATCHMAN_SOCKFILE}" "--argstr watchmanSockPath ${WATCHMAN_SOCKFILE}"
"--option extra-sandbox-paths ${STORE_FILE};${WATCHMAN_SOCKFILE}" "--option extra-sandbox-paths ${KEYSTORE_FILE};${WATCHMAN_SOCKFILE}"
) )
else else
nixOpts+=( nixOpts+=(
"--option extra-sandbox-paths ${STORE_FILE}" "--option extra-sandbox-paths ${KEYSTORE_FILE}"
) )
fi fi

View File

@ -1,51 +0,0 @@
#!/usr/bin/env bash
########################################################################
# This install script will setup your development dependencies on OS X
# or Ubuntu. Ubuntu 18.04 is the only tested version.
# It is not required or supported in NixOS.
#
# Usage: scripts/setup
########################################################################
GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel)
source "$GIT_ROOT/scripts/lib/setup/path-support.sh"
source_lib "output.sh"
source_lib "packages.sh"
source_lib "platform.sh"
exit_unless_os_supported
####
setup_header "Checking prerequisites..."
_need_curl=0
! is_nixos && ! program_exists nix && _need_curl=1
if [ $_need_curl -eq 1 ] && ! program_exists "curl"; then
cecho "@b@yellow[[Please install curl before running setup.]]"
exit 1
fi
# bump max watches limit to avoid issues with RN builds
$GIT_ROOT/scripts/inotify_fix.sh
####
setup_header "Installing requirements..."
if [ "$IN_NIX_SHELL" != 'pure' ] && ! is_nixos && ! program_exists nix; then
required_version="2.3.2"
NIX_INSTALLER_NO_MODIFY_PROFILE=1 NIX_IGNORE_SYMLINK_STORE=1 bash <(curl https://nixos.org/releases/nix/nix-${required_version}/install) --no-daemon
if [ $? -eq 0 ]; then
echo -e "${YELLOW}**********************************************************************************************************"
echo "The Nix package manager was successfully installed."
echo -e "**********************************************************************************************************${NC}"
else
echo "Please see https://nixos.org/nix/manual/#chap-installation"
exit
fi
fi
####
setup_complete