|
- #!/bin/bash
- #
- # Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/
- #
- THISDIR=$(cd $(dirname ${0}) && pwd)
- WORKSPACE_DIR=$(cd ${THISDIR}/../.. && pwd)
- WORKSPACE_NAME=$(basename ${WORKSPACE_DIR})
-
- function die {
- echo 1>&2 "$0: ${1}"
- exit 1
- }
-
- function redis_port() {
- if [[ -z "${BUBBLE_REDIS_PORT}" ]] ; then
- # pick port based on hash of workspace name; there is a 1-in-4096 chance of collision
- # if you get a collision, just define BUBBLE_REDIS_PORT in jenkins to be < 6800 or > 10895 in the job's build config
- BUBBLE_REDIS_PORT=$(expr 6800 + $(echo $((16#$(echo -n ${WORKSPACE_NAME} | sha256sum | awk '{print $1}' | tail -c 4)))))
- fi
- echo ${BUBBLE_REDIS_PORT}
- }
-
- function start_redis() {
- port=$(redis_port)
- REDIS_DIR=/tmp/redis-${port}
- REDIS_CONF=${REDIS_DIR}/redis.conf
-
- echo "Creating redis dir: ${REDIS_DIR}"
- mkdir -p ${REDIS_DIR} || die "Error creating redis dir: ${REDIS_DIR}"
-
- echo "Writing redis config: ${REDIS_CONF}"
- cat ${THISDIR}/redis.conf.hbs | sed -e "s/{{BUBBLE_REDIS_PORT}}/${port}/g" > ${REDIS_CONF} || die "Error writing redis configuration to ${REDIS_CONF}"
-
- echo "Starting redis..."
- redis-server ${REDIS_CONF} || die "Error starting redis"
- }
-
- function stop_redis_by_dir() {
- REDIS_DIR=${1}
- PID_FILE=${REDIS_DIR}/redis.pid
- if [[ ! -f ${PID_FILE} ]] ; then
- echo "Redis pid file not found: ${PID_FILE}"
- else
- echo "Stopping redis on port ${port}"
- kill $(cat ${PID_FILE}) || die "Error killing redis using pid file: ${PID_FILE}"
- fi
-
- if [[ -d ${REDIS_DIR} ]] ; then
- echo "Removing redis dir: ${REDIS_DIR}"
- rm -rf ${REDIS_DIR} || die "Error removing redis dir: ${REDIS_DIR}"
- fi
- }
-
- function stop_redis() {
- port=$(redis_port)
- REDIS_DIR=/tmp/redis-${port}
- stop_redis_by_dir ${REDIS_DIR}
- }
-
- function redis_clean() {
- for REDIS_DIR in $(find /tmp -maxdepth 1 -type d -name "redis-*") ; do
- stop_redis_by_dir ${REDIS_DIR}
- done
- }
-
- if [[ -z ${1} ]] ; then
- die "expected one of: start stop clean port"
- fi
-
- case ${1} in
- "start")
- stop_redis
- start_redis
- echo "Redis successfully started"
- ;;
- "stop")
- stop_redis
- echo "Redis stopped and cleaned up"
- ;;
- "port")
- redis_port
- ;;
- "clean")
- redis_clean
- ;;
- *)
- die "invalid argument: ${1}"
- ;;
- esac
|