Skip to content

Commit

Permalink
refactor(docker): enhance argument parsing in docker-compose.sh
Browse files Browse the repository at this point in the history
  • Loading branch information
entelecheia committed Aug 31, 2023
1 parent e4959c5 commit 85e63bb
Show file tree
Hide file tree
Showing 7 changed files with 244 additions and 45 deletions.
2 changes: 1 addition & 1 deletion .copier-docker-config.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Changes here will be overwritten by Copier; do NOT edit manually
_commit: v0.16.1-15-g46afdb9
_commit: v0.16.1-17-gf8d5699
_src_path: .
app_clone_dirname: entelecheia/entelecheia
app_install_root: /workspace/projects
Expand Down
83 changes: 74 additions & 9 deletions .copier-template/.docker/.docker-scripts/docker-compose.sh.jinja
Original file line number Diff line number Diff line change
@@ -1,8 +1,71 @@
#!/bin/bash
# add your custom commands here that should be executed when building the docker image
COMMAND=${1:-"build"}
VARIANT=${2:-"base"}
RUN_COMMAND=${3:-"bash"}
# arguments usage
USAGE="
$0 COMMAND [OPTIONS]
Arguments:
COMMAND The operation to be performed. Must be one of: [build|config|push|login|up|down|run]
Options:
-v, --variant IMAGE_VARIANT Specify a variant for the Docker image.
-r, --run RUN_COMMAND Specify a command to run when using the 'run' command. Default: bash
-h, --help Display this help message.
Additional arguments can be provided after the Docker name, and they will be passed directly to the Docker Compose command.
Example:
$0 build -v base
"

# declare arguments
COMMAND="build"
VARIANT="base"
RUN_COMMAND="bash"
ADDITIONAL_ARGS=""

set +u
# read arguments
# first argument is the command
COMMAND="$1"
shift

# parse options
while [[ $# -gt 0 ]]; do
case "$1" in
-v | --variant)
VARIANT="$2"
shift
;;
--variant=*)
VARIANT="${1#*=}"
;;
-r | --run)
RUN_COMMAND="$2"
shift
;;
--run=*)
RUN_COMMAND="${1#*=}"
;;
-h | --help)
echo "Usage: $0 $USAGE" >&2
exit 0
;;
-h*)
echo "Usage: $0 $USAGE" >&2
exit 0
;;
*)
ADDITIONAL_ARGS="$ADDITIONAL_ARGS $1"
;;
esac
shift
done
# check if remaining arguments exist
if [[ -n "$ADDITIONAL_ARGS" ]]; then
echo "Additional arguments: $ADDITIONAL_ARGS" >&2
fi
set -u

if [ "${COMMAND}" == "build" ]; then
echo "Building docker image for variant: ${VARIANT}"
Expand All @@ -19,8 +82,8 @@ elif [ "${COMMAND}" == "run" ]; then
elif [ "${COMMAND}" == "login" ]; then
echo "Logging into docker registry for variant: ${VARIANT}"
else
echo "Invalid command: ${COMMAND}"
echo "Usage: $0 [build|config|push|login|up|down|run] [base|app]"
echo "Invalid command: $COMMAND" >&2
echo "Usage: $0 $USAGE" >&2
exit 1
fi
echo "---"
Expand Down Expand Up @@ -71,12 +134,14 @@ fi

# run docker-compose
if [ "${COMMAND}" == "push" ]; then
docker push "${CONTAINER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
CMD="docker push ${CONTAINER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
elif [ "${COMMAND}" == "login" ]; then
echo "GITHUB_CR_PAT: $GITHUB_CR_PAT"
docker login ghcr.io -u "$GITHUB_USERNAME"
CMD="docker login ghcr.io -u $GITHUB_USERNAME"
elif [ "${COMMAND}" == "run" ]; then
docker-compose --project-directory . -f ".docker/docker-compose.${VARIANT}.yaml" run "`{{ docker_service_name }}`" "${RUN_COMMAND}"
CMD="docker compose --project-directory . -f .docker/docker-compose.${VARIANT}.yaml run `{{ docker_service_name }}` ${RUN_COMMAND} ${ADDITIONAL_ARGS}"
else
docker-compose --project-directory . -f ".docker/docker-compose.${VARIANT}.yaml" "${COMMAND}"
CMD="docker-compose --project-directory . -f .docker/docker-compose.${VARIANT}.yaml ${COMMAND} ${ADDITIONAL_ARGS}"
fi
echo "Running command: ${CMD}"
eval "${CMD}"
83 changes: 74 additions & 9 deletions .docker/.docker-scripts/docker-compose.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,71 @@
#!/bin/bash
# add your custom commands here that should be executed when building the docker image
COMMAND=${1:-"build"}
VARIANT=${2:-"base"}
RUN_COMMAND=${3:-"bash"}
# arguments usage
USAGE="
$0 COMMAND [OPTIONS]
Arguments:
COMMAND The operation to be performed. Must be one of: [build|config|push|login|up|down|run]
Options:
-v, --variant IMAGE_VARIANT Specify a variant for the Docker image.
-r, --run RUN_COMMAND Specify a command to run when using the 'run' command. Default: bash
-h, --help Display this help message.
Additional arguments can be provided after the Docker name, and they will be passed directly to the Docker Compose command.
Example:
$0 build -v base
"

# declare arguments
COMMAND="build"
VARIANT="base"
RUN_COMMAND="bash"
ADDITIONAL_ARGS=""

set +u
# read arguments
# first argument is the command
COMMAND="$1"
shift

# parse options
while [[ $# -gt 0 ]]; do
case "$1" in
-v | --variant)
VARIANT="$2"
shift
;;
--variant=*)
VARIANT="${1#*=}"
;;
-r | --run)
RUN_COMMAND="$2"
shift
;;
--run=*)
RUN_COMMAND="${1#*=}"
;;
-h | --help)
echo "Usage: $0 $USAGE" >&2
exit 0
;;
-h*)
echo "Usage: $0 $USAGE" >&2
exit 0
;;
*)
ADDITIONAL_ARGS="$ADDITIONAL_ARGS $1"
;;
esac
shift
done
# check if remaining arguments exist
if [[ -n "$ADDITIONAL_ARGS" ]]; then
echo "Additional arguments: $ADDITIONAL_ARGS" >&2
fi
set -u

if [ "${COMMAND}" == "build" ]; then
echo "Building docker image for variant: ${VARIANT}"
Expand All @@ -19,8 +82,8 @@ elif [ "${COMMAND}" == "run" ]; then
elif [ "${COMMAND}" == "login" ]; then
echo "Logging into docker registry for variant: ${VARIANT}"
else
echo "Invalid command: ${COMMAND}"
echo "Usage: $0 [build|config|push|login|up|down|run] [base|app]"
echo "Invalid command: $COMMAND" >&2
echo "Usage: $0 $USAGE" >&2
exit 1
fi
echo "---"
Expand Down Expand Up @@ -71,12 +134,14 @@ fi

# run docker-compose
if [ "${COMMAND}" == "push" ]; then
docker push "${CONTAINER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
CMD="docker push ${CONTAINER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
elif [ "${COMMAND}" == "login" ]; then
echo "GITHUB_CR_PAT: $GITHUB_CR_PAT"
docker login ghcr.io -u "$GITHUB_USERNAME"
CMD="docker login ghcr.io -u $GITHUB_USERNAME"
elif [ "${COMMAND}" == "run" ]; then
docker-compose --project-directory . -f ".docker/docker-compose.${VARIANT}.yaml" run "workspace" "${RUN_COMMAND}"
CMD="docker compose --project-directory . -f .docker/docker-compose.${VARIANT}.yaml run workspace ${RUN_COMMAND} ${ADDITIONAL_ARGS}"
else
docker-compose --project-directory . -f ".docker/docker-compose.${VARIANT}.yaml" "${COMMAND}"
CMD="docker-compose --project-directory . -f .docker/docker-compose.${VARIANT}.yaml ${COMMAND} ${ADDITIONAL_ARGS}"
fi
echo "Running command: ${CMD}"
eval "${CMD}"
21 changes: 12 additions & 9 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -102,28 +102,31 @@ docker-login: ## login to docker
@bash .docker/.docker-scripts/docker-compose.sh login

docker-build-base: ## build the docker base image
@bash .docker/.docker-scripts/docker-compose.sh build base
@bash .docker/.docker-scripts/docker-compose.sh build --variant base

docker-build-app: ## build the docker app image
@bash .docker/.docker-scripts/docker-compose.sh build app
@bash .docker/.docker-scripts/docker-compose.sh build --variant app

docker-config-base: ## show the docker base config
@bash .docker/.docker-scripts/docker-compose.sh config base
@bash .docker/.docker-scripts/docker-compose.sh config --variant base

docker-config-app: ## show the docker app config
@bash .docker/.docker-scripts/docker-compose.sh config app
@bash .docker/.docker-scripts/docker-compose.sh config --variant app

docker-push-base: ## push the docker base image
@bash .docker/.docker-scripts/docker-compose.sh push base
@bash .docker/.docker-scripts/docker-compose.sh push --variant base

docker-push-app: ## push the docker app image
@bash .docker/.docker-scripts/docker-compose.sh push app
@bash .docker/.docker-scripts/docker-compose.sh push --variant app

docker-run-base: ## run the docker base image
@bash .docker/.docker-scripts/docker-compose.sh run base
@bash .docker/.docker-scripts/docker-compose.sh run --variant base

docker-run-app: ## run the docker app image
@bash .docker/.docker-scripts/docker-compose.sh run app
@bash .docker/.docker-scripts/docker-compose.sh run --variant app

docker-up-app: ## launch the docker app image
@bash .docker/.docker-scripts/docker-compose.sh up app
@bash .docker/.docker-scripts/docker-compose.sh up --variant app

docker-up-app-detach: ## launch the docker app image in detached mode
@bash .docker/.docker-scripts/docker-compose.sh up --variant app --detach
2 changes: 1 addition & 1 deletion tmp/.copier-docker-config.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Changes here will be overwritten by Copier; do NOT edit manually
_commit: v0.16.1-14-gdf589d5
_commit: v0.16.1-17-g8a0ef54
_src_path: .
app_clone_dirname: entelecheia/entelecheia
app_install_root: /workspace/projects
Expand Down
77 changes: 70 additions & 7 deletions tmp/.docker/.docker-scripts/docker-compose.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,71 @@
#!/bin/bash
# add your custom commands here that should be executed when building the docker image
COMMAND=${1:-"build"}
VARIANT=${2:-"base"}
RUN_COMMAND=${3:-"bash"}
# arguments usage
USAGE="
$0 COMMAND [OPTIONS]
Arguments:
COMMAND The operation to be performed. Must be one of: [build|config|push|login|up|down|run]
Options:
-v, --variant IMAGE_VARIANT Specify a variant for the Docker image.
-r, --run RUN_COMMAND Specify a command to run when using the 'run' command. Default: bash
-h, --help Display this help message.
Additional arguments can be provided after the Docker name, and they will be passed directly to the Docker Compose command.
Example:
$0 build -v base
"

# declare arguments
COMMAND="build"
VARIANT="base"
RUN_COMMAND="bash"
ADDITIONAL_ARGS=""

set +u
# read arguments
# first argument is the command
COMMAND="$1"
shift

# parse options
while [[ $# -gt 0 ]]; do
case "$1" in
-v | --variant)
VARIANT="$2"
shift
;;
--variant=*)
VARIANT="${1#*=}"
;;
-r | --run)
RUN_COMMAND="$2"
shift
;;
--run=*)
RUN_COMMAND="${1#*=}"
;;
-h | --help)
echo "Usage: $0 $USAGE" >&2
exit 0
;;
-h*)
echo "Usage: $0 $USAGE" >&2
exit 0
;;
*)
ADDITIONAL_ARGS="$ADDITIONAL_ARGS $1"
;;
esac
shift
done
# check if remaining arguments exist
if [[ -n "$ADDITIONAL_ARGS" ]]; then
echo "Additional arguments: $ADDITIONAL_ARGS" >&2
fi
set -u

if [ "${COMMAND}" == "build" ]; then
echo "Building docker image for variant: ${VARIANT}"
Expand All @@ -19,8 +82,8 @@ elif [ "${COMMAND}" == "run" ]; then
elif [ "${COMMAND}" == "login" ]; then
echo "Logging into docker registry for variant: ${VARIANT}"
else
echo "Invalid command: ${COMMAND}"
echo "Usage: $0 [build|config|push|login|up|down|run] [base|app]"
echo "Invalid command: $COMMAND" >&2
echo "Usage: $0 $USAGE" >&2
exit 1
fi
echo "---"
Expand Down Expand Up @@ -76,7 +139,7 @@ elif [ "${COMMAND}" == "login" ]; then
echo "GITHUB_CR_PAT: $GITHUB_CR_PAT"
docker login ghcr.io -u "$GITHUB_USERNAME"
elif [ "${COMMAND}" == "run" ]; then
docker-compose --project-directory . -f ".docker/docker-compose.${VARIANT}.yaml" run "workspace" "${RUN_COMMAND}"
docker-compose --project-directory . -f ".docker/docker-compose.${VARIANT}.yaml" run "workspace" "${RUN_COMMAND}" "$ADDITIONAL_ARGS"
else
docker-compose --project-directory . -f ".docker/docker-compose.${VARIANT}.yaml" "${COMMAND}"
docker-compose --project-directory . -f ".docker/docker-compose.${VARIANT}.yaml" "${COMMAND}" "$ADDITIONAL_ARGS"
fi
Loading

0 comments on commit 85e63bb

Please sign in to comment.