Files
openfoodnetwork/script/ci/includes.sh
Maikel Linke 2357f46a4e CI scripts use env vars
The CI scripts are configurable through the environment. They had
hardcoded configurations before. The Australian BuildKite setup will
need global environment variables like this:

STAGING_SSH_HOST=ofn-staging2
STAGING_CURRENT_PATH=/home/openfoodweb/apps/openfoodweb/current
STAGING_SERVICE=unicorn_openfoodweb
STAGING_DB_HOST=localhost
STAGING_DB_USER=openfoodweb
STAGING_DB=openfoodweb_production
PRODUCTION_REMOTE=production:/home/openfoodweb/apps/openfoodweb/current
2015-10-21 10:04:29 +11:00

88 lines
2.4 KiB
Bash

function load_environment {
source /var/lib/jenkins/.rvm/environments/ruby-1.9.3-p392
if [ ! -f config/application.yml ]; then
ln -s application.yml.example config/application.yml
fi
}
function require_env_vars {
for var in "$@"; do
eval value=\$$var
echo "$var=$value"
if [ -z "$value" ]; then
echo "Environment variable $var missing."
exit 1
fi
done
}
function master_merged {
if [[ `git tag -l "$BUILDKITE_BRANCH"` != '' ]]; then
echo "'$BUILDKITE_BRANCH' is a tag."
if [[ `git tag -l --contains origin/master "$BUILDKITE_BRANCH"` != '' ]]; then
echo "This tag contains the current master."
return 0
else
echo "This tag does not contain the current master."
return 1
fi
fi
if [[ `git branch -r --merged origin/$BUILDKITE_BRANCH` == *origin/master* ]]; then
echo "This branch already has the current master merged."
return 0
fi
return 1
}
function exit_unless_master_merged {
if ! master_merged; then
echo "This branch does not have the current master merged. Please merge master and push again."
exit 1
fi
}
function succeed_if_master_merged {
master_merged && exit 0
}
function set_ofn_commit {
echo "Setting commit to $1"
buildkite-agent meta-data set "openfoodnetwork:git:commit" $1
}
function get_ofn_commit {
OFN_COMMIT=`buildkite-agent meta-data get "openfoodnetwork:git:commit"`
# If we don't catch this failure case, push will execute:
# git push remote :master --force
# Which will delete the master branch on the server
if [[ `expr length "$OFN_COMMIT"` == 0 ]]; then
echo 'OFN_COMMIT_NOT_FOUND'
else
echo $OFN_COMMIT
fi
}
function checkout_ofn_commit {
OFN_COMMIT=`buildkite-agent meta-data get "openfoodnetwork:git:commit"`
echo "Checking out stored commit $OFN_COMMIT"
git checkout -qf "$OFN_COMMIT"
}
function drop_and_recreate_database {
# Adapted from: http://stackoverflow.com/questions/12924466/capistrano-with-postgresql-error-database-is-being-accessed-by-other-users
DB=$1
shift
psql postgres $@ <<EOF
REVOKE CONNECT ON DATABASE $DB FROM public;
ALTER DATABASE $DB CONNECTION LIMIT 0;
SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE procpid <> pg_backend_pid()
AND datname='$DB';
DROP DATABASE $DB;
CREATE DATABASE $DB;
EOF
}