jenkins/helper_functions
#!/usr/bin/env bash
DEFAULT_RVM_RUBY="${DEFAULT_RVM_RUBY:-2.4.4}"
RVM_HOME_DIR="${RVM_HOME_DIR:-${HOME}/.rvm/scripts/rvm}"
VAGRANT_TEST_ISSUE="${VAGRANT_TEST_ISSUE:-180}"
err() {
echo "ERR: $* exiting" >&2
reset_docker_perms || true
exit 1
}
bundle_exec() {
local run_dir="test/issues/${VAGRANT_TEST_ISSUE}"
pushd "${run_dir}" || err "The directory: '${run_dir}' does not exist" && true
bundle exec $@
popd >>/dev/null 2>&1
}
enable_rvm_ruby() {
local ruby_version="${1:-${DEFAULT_RVM_RUBY}}"
shift
local persist="${1:-persist}"
[ -f "${RVM_HOME_DIR}" ] && . "${RVM_HOME_DIR}" >> /dev/null || true
rvm use "ruby-${ruby_version}" || err "Unable to switch to ruby ${ruby_version}"
[ -z "${persist}" ] || echo "${DEFAULT_RVM_RUBY}" > .ruby-version
}
enable_rbenv_ruby() {
local ruby_version="${1:-${DEFAULT_RVM_RUBY}}"
shift
local persist="${1:-persist}"
eval "$(rbenv init -)"
rbenv_install "${DEFAULT_RVM_RUBY}"
if [ -n "${persist}" ]; then
echo "${DEFAULT_RVM_RUBY}" > .ruby-version
rbenv shell "${DEFAULT_RVM_RUBY}"
fi
rbenv versions
}
rbenv_install() {
rbenv versions | grep -q "${1}" || rbenv install "${1}"
}
vagrant_cmd() {
bundle_exec vagrant $@
}
install_gems() {
command -v bundle >>/dev/null 2>&1 || gem install bundler --no-doc
command -v rake >>/dev/null 2>&1 || gem install rake --no-doc
gem update --system --no-doc || err "Updating system gems"
rm -f Gemfile.lock
bundle install --path .bundle/gems
}
install_from_gemfile() {
[ -d ".bundle/gems" ] || install_gems
}
run_all_tests() {
set -e
vagrant_cmd status
bundle_exec rake spec
set +e
}
setup_test_env() {
set -e
whoami
env
ruby -v
gem list
install_from_gemfile
bundle show
update_docker_perms
vagrant_cmd plugin repair || true
vagrant_cmd status
vagrant_cmd up || err "Starting the virtual machine"
vagrant_cmd provision || err "Attempting to provision the virtual machine"
reset_docker_perms
set +e
}
reset_docker_perms() {
[ -L /var/run/docker.sock ] && sudo chmod 0770 "$(readlink /var/run/docker.sock)" || true
}
update_docker_perms() {
[ -L /var/run/docker.sock ] && sudo chmod 6770 "$(readlink /var/run/docker.sock)" || true
}
is_container_running() {
CONTAINER_ID=$(docker ps -a | grep ':8888' | awk '{print $1}')
[ -z "${CONTAINER_ID}" ] && return 0
echo "${CONTAINER_ID}"
return 1
}
initialize() {
reset_docker_perms
OS_TYPE="$(uname -s 2>>/dev/null)"
case "${OS_TYPE}" in
Darwin)
HOME_DIR_PREFIX="/Users"
;;
*)
HOME_DIR_PREFIX="/home"
;;
esac
[ -f ${HOME_DIR_PREFIX}/jenkins/.bash_profile ] && . ${HOME_DIR_PREFIX}/jenkins/.bash_profile || true
[ -f ${HOME_DIR_PREFIX}/jenkins/.bashrc ] && . ${HOME_DIR_PREFIX}/jenkins/.bashrc || true
command -v rvm >>/dev/null 2>&1 && enable_rvm_ruby "${DEFAULT_RVM_RUBY}" "persist" || true
command -v rbenv >>/dev/null 2>&1 && enable_rbenv_ruby "${DEFAULT_RVM_RUBY}" "persist" || true
command -v docker || err "Docker must be installed on this host."
command -v bsdtar || err "Please install bsdtar"
id
groups
CONTAINER_ID=$(is_container_running)
[ $? -ne 0 ] && docker rm -vf "${CONTAINER_ID}"
reset_docker_perms
}
initialize