114 lines
3.0 KiB
Plaintext
114 lines
3.0 KiB
Plaintext
|
#!/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
|