Created
September 17, 2018 15:40
-
-
Save igolden/3d36978a5159dda068499fc82072c1f3 to your computer and use it in GitHub Desktop.
docker-compose wrapper for running commands. Drop this in your bin folder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
## | |
# bin/run | |
# author: Ian Golden <ian@iangolden.com> | |
# | |
# | |
# Simple bash script to wrap the docker-compose run | |
# prefix for running commands in a dockerized rails | |
# setup. prefixes with docker-compose run bundle | |
# exec $@ | |
# | |
# @option -a <SERVICE_NAME> specify service name | |
# @option -e <RAILS_ENV> specify RAILS_ENV | |
# @option -c clean command no prefix | |
# @option -h display usage screen | |
# | |
# | |
# bin/run <commands> | |
# bin/run rake db:migrate | |
# bin/run rails c | |
# bin/run -a postgres echo "hi from postgres" | |
# bin/run -e test -a postgres echo "test + postgres" | |
# | |
# Gotcha: -e must preceed -a option | |
# Gotcha: -c must preceed -a option | |
#==================================================== | |
set -e | |
YELLOW='\033[0;33m' | |
GREEN='\033[1;32m' | |
ENDC='\033[0m' | |
SERVICE_NAME=app | |
__RAILS_ENV=development | |
function usage { | |
USAGE=$(cat <<EOF | |
bin/run | |
Wrapper command for 'docker-compose run <service>' | |
Usage: | |
======================== | |
bin/run rails c | |
bin/run rake db:migrate | |
bin/run -c -a app cat /etc/hosts | |
bin/run -e test -a rails c | |
bin/run -a postgres echo "hi from postgres" | |
EOF | |
) | |
echo "$USAGE" | |
} | |
# Runs w/ prefixes: | |
# docker-compose run app RAILS_ENV=development bundle exec <commands> | |
function run_rails { | |
# did they spec env? | |
if [ "$1" == "-e" ]; then | |
shift | |
# set env | |
__RAILS_ENV=$1 | |
shift | |
fi | |
# did specify service name? | |
if [ "$1" == "-a" ]; then | |
# check not null | |
if [ -n "$2" ]; then | |
# set service name | |
SERVICE_NAME=$2 | |
shift && shift | |
echo -e "\n\n${GREEN}Running${ENDC} ==> ${YELLOW}docker-compose run $SERVICE_NAME RAILS_ENV=${__RAILS_ENV} bundle exec $@${ENDC}\n\n" | |
docker-compose run $SERVICE_NAME $@ | |
else | |
usage | |
fi | |
elif [ "$1" == "-h" ]; then | |
usage | |
elif [ -n "$1" ]; then | |
echo -e "\n\n${GREEN}Running${ENDC} ==> ${YELLOW}docker-compose run app RAILS_ENV=${__RAILS_ENV} bundle exec $@${ENDC}\n\n" | |
docker-compose run app $@ | |
else | |
usage | |
fi | |
} | |
# Runs w/o rails command prefixes: | |
# docker-compose run app <commands> | |
function run_clean { | |
if [ "$1" == "-a" ]; then | |
# set service name | |
SERVICE_NAME=$2 | |
shift && shift | |
echo -e "\n\n${GREEN}Running${ENDC} ==> ${YELLOW}docker-compose run $SERVICE_NAME $@${ENDC}\n\n" | |
docker-compose run $SERVICE_NAME $@ | |
else | |
echo -e "You need to specify a specific service when running clean commands" | |
usage | |
fi | |
} | |
function run { | |
# if options present continue, else display usage | |
if [ $1 ]; then | |
# handle clean run | |
if [ "$1" == "-c" ]; then | |
shift | |
run_clean $@ | |
else | |
run_rails $@ | |
fi | |
else | |
# check usage | |
usage | |
fi | |
} | |
run $@ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment