memgraph/init

114 lines
3.0 KiB
Plaintext
Raw Normal View History

#!/bin/bash
function print_usage_and_exit {
echo "./init [-s] [--no-clone-dependencies] [--arc-diff DIFF_ID]"
echo -e "Prepare the environment for Memgraph QA.\n"
echo "Optional arguments:"
echo -e " -s\tuse sudo apt-get for installing required packages"
echo -e " -h\tdisplay this help and exit"
echo -e " --no-clone-dependencies\tskip cloning memgraph sources"
echo -e " --arc-diff\tcheckout the DIFF_ID from Phabricator"
exit 1
}
# read arguments
arcanist_diff_id=""
clone_dependencies=true
use_sudo=false
while [[ $# -gt 0 ]]; do
case $1 in
--no-clone-dependencies)
clone_dependencies=false
shift
;;
--arc-diff)
if [[ -z $2 ]]; then
print_usage_and_exit
fi
arcanist_diff_id=$2
shift 2
;;
-s)
use_sudo=true
shift
;;
*)
# unknown option
print_usage_and_exit
;;
esac
done
# exit if any subcommand returns a non-zero status
set -e
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd ${script_dir}
required_pkgs=(git arcanist # used to clone sources
python-virtualenv python3-pip # required by 'run' script
)
# install all dependencies on debian based operating systems
for pkg in ${required_pkgs[@]}; do
if dpkg -s $pkg 2>/dev/null >/dev/null; then
echo "Found $pkg"
elif [[ $use_sudo = true ]]; then
echo "Installing $pkg"
if [[ ! `sudo apt-get -y install $pkg` ]]; then
echo "Didn't install $pkg [required]"
required_missing=true
fi
else
echo "Missing $pkg [required]"
required_missing=true
fi
done
if [[ $required_missing = true ]]; then
echo "Missing required packages. EXITING!"
echo "Please, install required packages and rerun $0 again."
exit 2
fi
# setup ve
if [ ! -d "ve3" ]; then
virtualenv -p python3 ve3
fi
source ve3/bin/activate
pip3 install --upgrade pip
pip3 install -r requirements.txt
# TODO: use pullbot and read a password from program arg or env var
# (in order to use this script inside CI infrastructure)
# clean dbms folder
dbms_folder=${script_dir}/dbms
mkdir -p ${dbms_folder}
# clone memgraph & checkout right commit
cd ${dbms_folder}
if [[ $clone_dependencies = true ]] ; then
rm -rf ${dbms_folder}/*
git clone https://phabricator.memgraph.io/diffusion/MG/memgraph.git
fi
memgraph_folder=${dbms_folder}/memgraph
cd ${memgraph_folder}
git checkout dev
# optionally apply arcanist patch
if [[ ! -z ${arcanist_diff_id} ]]; then
# nocommit is here because arc tries to commit the patch
# and it fails if user isn't set (inside CI infrastructure the user
# probably won't be defined because CI infrastructure doesn't push
# any code back to the repository)
arc patch ${arcanist_diff_id} --nocommit
fi
./init
# compile memgraph
memgraph_build_dir=${script_dir}/dbms/memgraph/build
cd ${memgraph_build_dir}
cmake ..
make -j8