From b358a25dad5e24f2080fa94941b62bed33c90f49 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 01:48:58 +0100 Subject: [PATCH 01/22] Update context arg parsing --- dockerc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/dockerc b/dockerc index 4a66bcf..a52781f 100755 --- a/dockerc +++ b/dockerc @@ -63,19 +63,26 @@ if [ "$DOCKERC_PRINT_VERSION" = 'true' ] || [ "$DOCKERC_UPDATE" = 'true' ] then - # Skip parsing positional arguments + # Stop parsing positional arguments DOCKERC_PARSE_ARGUMENTS='false' fi +# Parse context optional positional argument if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ]; then - # Parse positional arguments - # Parse context optional argument if [ "$#" -gt 0 ]; then DOCKERC_CONTEXT="$1" shift fi + if [ "$DOCKERC_CONTEXT" = '@' ]; then + # Print context help + DOCKERC_PRINT_HELP='true' + DOCKERC_PRINT_HELP_CONTEXT='true' + # Stop parsing positional arguments + DOCKERC_PARSE_ARGUMENTS='false' + fi + fi UPDATE='false' From 2c68be697b6ad6480cecc1d8da7c4af056f13a2e Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 01:49:41 +0100 Subject: [PATCH 02/22] Update command preset arg parsing --- dockerc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/dockerc b/dockerc index a52781f..30b0722 100755 --- a/dockerc +++ b/dockerc @@ -85,6 +85,24 @@ if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ]; then fi +# Parse command preset optional positional argument +if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ]; then + + if [ "$#" -gt 0 ]; then + DOCKERC_COMMAND_PRESET="$1" + shift + fi + + if [ "$DOCKERC_COMMAND_PRESET" = '@' ]; then + # Print context help + DOCKERC_PRINT_HELP='true' + DOCKERC_PRINT_HELP_COMMAND='true' + # Stop parsing positional arguments + DOCKERC_PARSE_ARGUMENTS='false' + fi + +fi + UPDATE='false' if [ -n "$DOCKERC_UPDATE" ]; then # Use from argument or environment variable From 426d5f38deb0f28284821af646e44ec0c54698f8 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 01:50:17 +0100 Subject: [PATCH 03/22] Parse command args parsing --- dockerc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/dockerc b/dockerc index 30b0722..54210ec 100755 --- a/dockerc +++ b/dockerc @@ -103,6 +103,29 @@ if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ]; then fi +# Parse command args optional positional arguments +if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ] && [ "$#" -gt 0 ]; then + + DOCKERC_COMMAND_ARGS='' + for ARG in "$@"; do + + if [ -z "$ARG" ]; then + # Skip empty arguments + continue + fi + + if [ "$(echo "$ARG" | grep "[ '\"\$\`;*&#<>|]")" ]; then + # Escape argument with spaces or special shell characters + # Replace single quotes with escaped single quotes + ARG="'$(echo "$ARG" | sed "s/'/'\"'\"'/g")'" + fi + + DOCKERC_COMMAND_ARGS="$DOCKERC_COMMAND_ARGS $ARG" + + done + +fi + UPDATE='false' if [ -n "$DOCKERC_UPDATE" ]; then # Use from argument or environment variable From ba0daba9d81169acf3e6e0315fa8a4c68998c7ca Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 01:58:01 +0100 Subject: [PATCH 04/22] Update args options comments --- dockerc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/dockerc b/dockerc index 54210ec..3e1af40 100755 --- a/dockerc +++ b/dockerc @@ -18,16 +18,19 @@ while [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ] && [ "$#" -gt 0 ]; do case "$1" in '--help' | '-h' ) + # Print general help DOCKERC_PRINT_HELP='true' shift ;; '--version' | '-v' ) + # Print version DOCKERC_PRINT_VERSION='true' shift ;; '--update' ) + # Update DockerC DOCKERC_UPDATE='true' shift ;; @@ -156,6 +159,18 @@ if [ -n "$DOCKERC_CONTEXT" ]; then CONTEXT="$DOCKERC_CONTEXT" fi +COMMAND_PRESET='' +if [ -n "$DOCKERC_COMMAND_PRESET" ]; then + # Use from argument or environment variable + COMMAND_PRESET="$DOCKERC_COMMAND_PRESET" +fi + +COMMAND_ARGS='' +if [ -n "$DOCKERC_COMMAND_ARGS" ]; then + # Use from argument or environment variable + COMMAND_ARGS="$DOCKERC_COMMAND_ARGS" +fi + print_context_help() { echo ' context syntax: [first] | [first]-[second] | "-" | "--"' echo ' first First part of the context' From 09f1c699ba84646097e6e3e3a54fd63fc4bc2213 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 02:23:10 +0100 Subject: [PATCH 05/22] Update general help message --- dockerc | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/dockerc b/dockerc index 3e1af40..46feb28 100755 --- a/dockerc +++ b/dockerc @@ -35,7 +35,7 @@ while [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ] && [ "$#" -gt 0 ]; do shift ;; - '-f' ) + '--force' | '-f' ) # Force, for example ignores abstract contexts DOCKERC_FORCE='true' shift @@ -181,16 +181,29 @@ print_context_help() { if [ "$DOCKERC_PRINT_HELP" = 'true' ]; then # Print help & exit - echo "Usage: $0 [options] [context] [...args]" - echo ' args: Arguments passed to docker compose' - print_context_help - echo ' options:' - echo ' -h, --help Print this help and exit' - echo ' -v, --version Print version and exit' - echo ' --update Update DockerC and exit' - echo ' -f Force, for example ignores abstract contexts' - echo ' -n Dry run, print docker compose command without running it' - echo ' -q Quiet, do not print docker compose command' + echo 'Usage:' + echo " $0 [options] [ [@command_preset] [...args] ]" + echo " $0 [options] <@compose_preset> [...args]" + echo '' + echo 'Options:' + echo ' -h, --help Print this help message' + echo ' -v, --version Print version' + echo ' --update Update DockerC' + echo ' -f, --force Force, for example ignores abstract contexts' + echo ' -n, --dry-run Dry run, print docker compose command without running it' + echo ' -q, --quiet Quiet, do not print docker compose command' + echo '' + echo 'Arguments:' + echo ' options DockerC options' + echo ' context Docker compose files context' + echo ' @command_preset DockerC command preset (shortcut for a command)' + echo ' @compose_preset DockerC compose preset (shortcut for a command)' + echo ' args Arguments appended to the docker compose command' + echo '' + echo 'Help commands:' + echo " $0 ? See context argument help" + echo " $0 - @ See @command_preset argument help" + echo " $0 @ See @compose_preset argument help" exit ${ERROR_CODE:-0} fi From 5454f01752d87b1f7859edd3b1466cfcaf965cd3 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 02:29:25 +0100 Subject: [PATCH 06/22] Update check to print help in args parsing --- dockerc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dockerc b/dockerc index 46feb28..f2bd83b 100755 --- a/dockerc +++ b/dockerc @@ -78,14 +78,20 @@ if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ]; then shift fi - if [ "$DOCKERC_CONTEXT" = '@' ]; then + if [ "$DOCKERC_CONTEXT" = '?' ]; then # Print context help - DOCKERC_PRINT_HELP='true' DOCKERC_PRINT_HELP_CONTEXT='true' # Stop parsing positional arguments DOCKERC_PARSE_ARGUMENTS='false' fi + if [ "$DOCKERC_CONTEXT" = '@' ]; then + # Print context help + DOCKERC_PRINT_HELP_COMPOSE_PRESET='true' + # Stop parsing positional arguments + DOCKERC_PARSE_ARGUMENTS='false' + fi + fi # Parse command preset optional positional argument @@ -98,8 +104,7 @@ if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ]; then if [ "$DOCKERC_COMMAND_PRESET" = '@' ]; then # Print context help - DOCKERC_PRINT_HELP='true' - DOCKERC_PRINT_HELP_COMMAND='true' + DOCKERC_PRINT_HELP_COMMAND_PRESET='true' # Stop parsing positional arguments DOCKERC_PARSE_ARGUMENTS='false' fi From fce97e2b07cdf0a57cbd1134c6c7473e2da5d700 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 02:53:11 +0100 Subject: [PATCH 07/22] Refactor args parsing --- dockerc | 178 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 95 insertions(+), 83 deletions(-) diff --git a/dockerc b/dockerc index f2bd83b..24f112e 100755 --- a/dockerc +++ b/dockerc @@ -10,110 +10,119 @@ VERSION='1.10.0' ERROR_CODE='' -DOCKERC_PARSE_ARGUMENTS='true' -# Parse options arguments -while [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ] && [ "$#" -gt 0 ]; do - - case "$1" in - - '--help' | '-h' ) - # Print general help - DOCKERC_PRINT_HELP='true' - shift - ;; - - '--version' | '-v' ) - # Print version - DOCKERC_PRINT_VERSION='true' - shift - ;; - - '--update' ) - # Update DockerC - DOCKERC_UPDATE='true' - shift - ;; - - '--force' | '-f' ) - # Force, for example ignores abstract contexts - DOCKERC_FORCE='true' - shift - ;; - - '--dry-run' | '-n' ) - # Dry run, print docker compose command without running it - DOCKERC_DRY_RUN='true' - shift - ;; - - '--quiet' | '-q' ) - # Quiet, do not print docker compose command - DOCKERC_QUIET='true' - shift - ;; - - * ) - break - ;; - - esac +# Parse arguments +# Dummy while loop to allow breaking +while true; do + + # Parse options arguments + while [ "$#" -gt 0 ]; do + + case "$1" in + + '--help' | '-h' ) + # Print general help + DOCKERC_PRINT_HELP='true' + shift + ;; + + '--version' | '-v' ) + # Print version + DOCKERC_PRINT_VERSION='true' + shift + ;; + + '--update' ) + # Update DockerC + DOCKERC_UPDATE='true' + shift + ;; + + '--force' | '-f' ) + # Force, for example ignores abstract contexts + DOCKERC_FORCE='true' + shift + ;; + + '--dry-run' | '-n' ) + # Dry run, print docker compose command without running it + DOCKERC_DRY_RUN='true' + shift + ;; + + '--quiet' | '-q' ) + # Quiet, do not print docker compose command + DOCKERC_QUIET='true' + shift + ;; + + * ) + break + ;; -done + esac -if - [ "$DOCKERC_PRINT_HELP" = 'true' ] || - [ "$DOCKERC_PRINT_VERSION" = 'true' ] || - [ "$DOCKERC_UPDATE" = 'true' ] -then - # Stop parsing positional arguments - DOCKERC_PARSE_ARGUMENTS='false' -fi + done -# Parse context optional positional argument -if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ]; then + if + [ "$DOCKERC_PRINT_HELP" = 'true' ] || + [ "$DOCKERC_PRINT_VERSION" = 'true' ] || + [ "$DOCKERC_UPDATE" = 'true' ] + then + # Stop parsing arguments + break + fi - if [ "$#" -gt 0 ]; then - DOCKERC_CONTEXT="$1" - shift + # Check for optional positional arguments + if [ "$#" -le 0 ]; then + # No more arguments + break fi - if [ "$DOCKERC_CONTEXT" = '?' ]; then + # Parse context optional positional argument + + if [ "$1" = '?' ]; then # Print context help DOCKERC_PRINT_HELP_CONTEXT='true' - # Stop parsing positional arguments - DOCKERC_PARSE_ARGUMENTS='false' + # Stop parsing arguments + break fi - if [ "$DOCKERC_CONTEXT" = '@' ]; then - # Print context help + if [ "$1" = '@' ]; then + # Print compose preset help DOCKERC_PRINT_HELP_COMPOSE_PRESET='true' - # Stop parsing positional arguments - DOCKERC_PARSE_ARGUMENTS='false' + # Stop parsing arguments + break fi -fi - -# Parse command preset optional positional argument -if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ]; then + DOCKERC_CONTEXT="$1" + shift - if [ "$#" -gt 0 ]; then - DOCKERC_COMMAND_PRESET="$1" - shift + # Check for optional positional arguments + if [ "$#" -le 0 ]; then + # No more arguments + break fi - if [ "$DOCKERC_COMMAND_PRESET" = '@' ]; then - # Print context help + # Parse command preset optional positional argument + + if [ "$1" = '@' ]; then + # Print command preset help DOCKERC_PRINT_HELP_COMMAND_PRESET='true' - # Stop parsing positional arguments - DOCKERC_PARSE_ARGUMENTS='false' + # Stop parsing arguments + break fi -fi + DOCKERC_COMMAND_PRESET="$1" + shift -# Parse command args optional positional arguments -if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ] && [ "$#" -gt 0 ]; then + # Check for optional positional arguments + if [ "$#" -le 0 ]; then + # No more arguments + break + fi + # Parse command args optional positional arguments DOCKERC_COMMAND_ARGS='' for ARG in "$@"; do @@ -132,7 +141,10 @@ if [ "$DOCKERC_PARSE_ARGUMENTS" = 'true' ] && [ "$#" -gt 0 ]; then done -fi + # Stop parsing arguments + break + +done UPDATE='false' if [ -n "$DOCKERC_UPDATE" ]; then From abf133913fe02d6ac8f8bf3e74a6500e95eeb082 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 02:53:27 +0100 Subject: [PATCH 08/22] Refactor help text print --- dockerc | 56 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/dockerc b/dockerc index 24f112e..a1a6f10 100755 --- a/dockerc +++ b/dockerc @@ -146,6 +146,34 @@ while true; do done +if [ "$DOCKERC_PRINT_HELP" = 'true' ]; then + # Print help & exit + echo 'Usage:' + echo " $0 [options] [ [@command_preset] [...args] ]" + echo " $0 [options] <@compose_preset> [...args]" + echo '' + echo 'Options:' + echo ' -h, --help Print this help message' + echo ' -v, --version Print version' + echo ' --update Update DockerC' + echo ' -f, --force Force, for example ignores abstract contexts' + echo ' -n, --dry-run Dry run, print docker compose command without running it' + echo ' -q, --quiet Quiet, do not print docker compose command' + echo '' + echo 'Arguments:' + echo ' options DockerC options' + echo ' context Docker compose files context' + echo ' @command_preset DockerC command preset (shortcut for a command)' + echo ' @compose_preset DockerC compose preset (shortcut for a command)' + echo ' args Arguments appended to the docker compose command' + echo '' + echo 'Help commands:' + echo " $0 ? See context argument help" + echo " $0 - @ See @command_preset argument help" + echo " $0 @ See @compose_preset argument help" + exit ${ERROR_CODE:-0} +fi + UPDATE='false' if [ -n "$DOCKERC_UPDATE" ]; then # Use from argument or environment variable @@ -196,34 +224,6 @@ print_context_help() { echo ' "--" Use docker compose without file arguments' } -if [ "$DOCKERC_PRINT_HELP" = 'true' ]; then - # Print help & exit - echo 'Usage:' - echo " $0 [options] [ [@command_preset] [...args] ]" - echo " $0 [options] <@compose_preset> [...args]" - echo '' - echo 'Options:' - echo ' -h, --help Print this help message' - echo ' -v, --version Print version' - echo ' --update Update DockerC' - echo ' -f, --force Force, for example ignores abstract contexts' - echo ' -n, --dry-run Dry run, print docker compose command without running it' - echo ' -q, --quiet Quiet, do not print docker compose command' - echo '' - echo 'Arguments:' - echo ' options DockerC options' - echo ' context Docker compose files context' - echo ' @command_preset DockerC command preset (shortcut for a command)' - echo ' @compose_preset DockerC compose preset (shortcut for a command)' - echo ' args Arguments appended to the docker compose command' - echo '' - echo 'Help commands:' - echo " $0 ? See context argument help" - echo " $0 - @ See @command_preset argument help" - echo " $0 @ See @compose_preset argument help" - exit ${ERROR_CODE:-0} -fi - get_latest_version() { # Syntax: '"tag_name": "v1.0.0",' LATEST_VERSION_JSON=$( From 7d6b57d23f3b01f60b18546a55fcc8720e9cf29b Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:16:27 +0100 Subject: [PATCH 09/22] Add context help message --- dockerc | 51 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/dockerc b/dockerc index a1a6f10..cea0101 100755 --- a/dockerc +++ b/dockerc @@ -174,6 +174,49 @@ if [ "$DOCKERC_PRINT_HELP" = 'true' ]; then exit ${ERROR_CODE:-0} fi +print_context_help() { + echo ' context syntax: [first] | [first]-[second] | "-" | "--"' + echo ' first First part of the context' + echo ' second Second part of the context' + echo ' "-" Use default docker compose files ("override" if it exists)' + echo ' "--" Use docker compose without file arguments' +} + +if [ "$DOCKERC_PRINT_HELP_CONTEXT" = 'true' ]; then + # Print context help & exit + echo 'DockerC context argument values:' + echo '' + echo ' (empty), -' + echo ' Look for default docker compose files' + echo ' Usage:' + echo " $0 [options]" + echo " $0 [options] - [@command_preset] [...args]" + echo ' Used default docker compose files are:' + echo ' - docker-compose.yml' + echo ' - docker-compose.override.yml (if it exists)' + echo '' + echo ' --' + echo ' Run docker compose without file arguments' + echo ' Usage:' + echo " $0 [options] -- [@command_preset] [...args]" + echo '' + echo ' level1[.level2[...]]]' + echo ' Look for docker compose files matching context levels' + echo ' Usage:' + echo " $0 [options] level1[.level2[...] [@command_preset] [...args]" + echo ' Example:' + echo " '$0 prod.boosted' will look for:" + echo ' - docker-compose.yml' + echo ' - docker-compose.prod.yml' + echo ' - docker-compose.prod.boosted.yml' + echo '' + echo 'Use dry run option (--dry-run or -n) to see the docker compose command' + echo 'and files that will be used without running it.' + echo '' + echo "Use '$0 --help' to see the general help message." + exit ${ERROR_CODE:-0} +fi + UPDATE='false' if [ -n "$DOCKERC_UPDATE" ]; then # Use from argument or environment variable @@ -216,14 +259,6 @@ if [ -n "$DOCKERC_COMMAND_ARGS" ]; then COMMAND_ARGS="$DOCKERC_COMMAND_ARGS" fi -print_context_help() { - echo ' context syntax: [first] | [first]-[second] | "-" | "--"' - echo ' first First part of the context' - echo ' second Second part of the context' - echo ' "-" Use default docker compose files ("override" if it exists)' - echo ' "--" Use docker compose without file arguments' -} - get_latest_version() { # Syntax: '"tag_name": "v1.0.0",' LATEST_VERSION_JSON=$( From 9f9cbfc3bae820242bb4270d0abe060ae01993b3 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:20:57 +0100 Subject: [PATCH 10/22] Move compose preset help message --- dockerc | 52 +++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/dockerc b/dockerc index cea0101..a55c6c3 100755 --- a/dockerc +++ b/dockerc @@ -213,10 +213,36 @@ if [ "$DOCKERC_PRINT_HELP_CONTEXT" = 'true' ]; then echo 'Use dry run option (--dry-run or -n) to see the docker compose command' echo 'and files that will be used without running it.' echo '' - echo "Use '$0 --help' to see the general help message." + echo "Use '$0 --help' to see the general help message and options help." exit ${ERROR_CODE:-0} fi +if [ "$DOCKERC_PRINT_HELP_COMPOSE_PRESET" = 'true' ]; then + # Print compose preset help & exit + echo "Usage: $0 [options] [@compose_preset] [...args]" + echo '' + echo 'Compose presets:' + echo ' @rfc Remove unused containers' + echo ' @rfi Remove dangling images' + echo ' @rfia Remove all unused images' + echo ' @rf Remove unused containers, networks and images' + echo ' @rfa Remove all unused containers, networks and images' + echo ' @rfav Remove all unused containers, networks, images and volumes' + echo ' @sa Stop all running containers' + echo ' @rmf Remove running containers, force' + echo ' @rms Remove stopped containers' + echo ' @rmsf Remove stopped containers, force' + echo ' (aliases: @rmfs)' + echo ' @rma Remove all containers' + echo ' @rmaf Remove all containers, force' + echo ' (aliases: @rmfa)' + echo '' + echo 'Arguments will be appended to the docker command that will be run.' + echo '' + echo "Use '$0 --help' to see the general help message and options help." + exit 0 +fi + UPDATE='false' if [ -n "$DOCKERC_UPDATE" ]; then # Use from argument or environment variable @@ -422,28 +448,8 @@ if [ "$(echo "$CONTEXT" | cut -c1)" = '@' ]; then if [ "$PRINT_DOCKER_PRESETS_HELP" = 'true' ]; then # Print help and exit - echo "Usage: $0 [options] [@preset] [...args]" - echo ' args: Arguments passed to docker' - echo ' @preset:' - echo ' @rfc Remove unused containers' - echo ' @rfi Remove dangling images' - echo ' @rfia Remove all unused images' - echo ' @rf Remove unused containers, networks and images' - echo ' @rfa Remove all unused containers, networks and images' - echo ' @rfav Remove all unused containers, networks, images and volumes' - echo ' @sa Stop all running containers' - echo ' @rmf Remove running containers, force' - echo ' @rms Remove stopped containers' - echo ' @rmsf Remove stopped containers, force' - echo ' (aliases: @rmfs)' - echo ' @rma Remove all containers' - echo ' @rmaf Remove all containers, force' - echo ' (aliases: @rmfa)' - echo ' options:' - echo ' -f Force, for example ignores abstract contexts' - echo ' -n Dry run, print docker command without running it' - echo ' -q Quiet, do not print docker command' - exit 0 + echo 'DEPRECATED' + exit 1 fi if [ "$RUN_SHELL" = 'false' ]; then From d6d27fafbadd1ecd70bc5b7cd0b672a6bd92b8ca Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:25:19 +0100 Subject: [PATCH 11/22] Move command preset help message --- dockerc | 192 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 99 insertions(+), 93 deletions(-) diff --git a/dockerc b/dockerc index a55c6c3..de67865 100755 --- a/dockerc +++ b/dockerc @@ -213,13 +213,13 @@ if [ "$DOCKERC_PRINT_HELP_CONTEXT" = 'true' ]; then echo 'Use dry run option (--dry-run or -n) to see the docker compose command' echo 'and files that will be used without running it.' echo '' - echo "Use '$0 --help' to see the general help message and options help." + echo "Use '$0 --help' for more help." exit ${ERROR_CODE:-0} fi if [ "$DOCKERC_PRINT_HELP_COMPOSE_PRESET" = 'true' ]; then # Print compose preset help & exit - echo "Usage: $0 [options] [@compose_preset] [...args]" + echo "Usage: $0 [options] <@compose_preset> [...args]" echo '' echo 'Compose presets:' echo ' @rfc Remove unused containers' @@ -239,8 +239,101 @@ if [ "$DOCKERC_PRINT_HELP_COMPOSE_PRESET" = 'true' ]; then echo '' echo 'Arguments will be appended to the docker command that will be run.' echo '' - echo "Use '$0 --help' to see the general help message and options help." - exit 0 + echo "Use '$0 --help' for more help." + exit ${ERROR_CODE:-0} +fi + +if [ "$DOCKERC_PRINT_HELP_COMMAND_PRESET" = 'true' ]; then + # Print compose preset help & exit + echo "Usage: $0 [options] [@command_preset] [...args]" + echo '' + echo 'Command presets:' + echo ' @u up -d' + echo ' @ua up' + echo ' @ub up --build -d' + echo ' @uba up --build' + echo ' @ubf up --build -d --force-recreate' + echo ' @ubfa up --build --force-recreate' + echo ' @ubfp up --build -d --force-recreate --pull always' + echo ' @ubfap up --build --force-recreate --pull always' + echo ' @ubr up --build -d --remove-orphans' + echo ' @ubar up --build --remove-orphans' + echo ' @ubfr up --build -d --force-recreate --remove-orphans' + echo ' @ubfar up --build --force-recreate --remove-orphans' + echo ' @uf up -d --force-recreate' + echo ' @ufa up --force-recreate' + echo ' @ur up -d --remove-orphans' + echo ' @uar up --remove-orphans' + echo ' @ufr up -d --force-recreate --remove-orphans' + echo ' @ufar up --force-recreate --remove-orphans' + echo ' @b build' + echo ' @bp build --pull' + echo ' @bf build --pull --no-cache' + echo ' @bn build --dry-run --pull --no-cache' + echo ' @w watch' + echo ' @wq watch --quiet' + echo ' @ww watch --no-up' + echo ' @wqw watch --quiet --no-up' + echo ' @wn watch --dry-run' + echo ' @d down' + echo ' @da down --remove-orphans' + echo ' @dr down --remove-orphans --rmi local' + echo ' @dra down --remove-orphans --rmi all' + echo ' @drav down --remove-orphans --rmi all -v' + echo ' @drv down --remove-orphans -v' + echo ' @r run --rm' + echo ' @rw run -w /pwd -v $(pwd):/pwd --rm' + echo ' @rd run -d' + echo ' @rk run' + echo ' @rb run --build --rm' + echo ' @rbw run --build -w /pwd -v $(pwd):/pwd --rm' + echo ' @rbd run --build -d' + echo ' @rbk run --build' + echo ' @ri run -i --rm' + echo ' @rwi run -w /pwd -v $(pwd):/pwd -i --rm' + echo ' @rki run -i' + echo ' @rbi run --build -i --rm' + echo ' @rbwi run --build -w /pwd -v $(pwd):/pwd -i --rm' + echo ' @rbki run --build -i' + echo ' @sh run -i --rm --entrypoint /bin/sh' + echo ' @shw run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' + echo ' @$ run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' + echo ' $ run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' + echo ' @shb run --build -i --rm --entrypoint /bin/sh' + echo ' @shbw run --build -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' + echo ' @bash run -i --rm --entrypoint /bin/bash' + echo ' @bashw run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/bash' + echo ' @bashb run --build -i --rm --entrypoint /bin/bash' + echo ' @bashbw run --build -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/bash' + echo ' @l logs -n 100' + echo ' @lf logs -n 100 -f' + echo ' @lt logs -n 100 -t' + echo ' @ls logs -n 100 --no-log-prefix' + echo ' @lft logs -n 100 -f -t' + echo ' @lfs logs -n 100 -f --no-log-prefix' + echo ' @lfts logs -n 100 -f -t --no-log-prefix' + echo ' @lts logs -n 100 -t --no-log-prefix' + echo ' @ll logs' + echo ' @llf logs -f' + echo ' @llt logs -t' + echo ' @lls logs --no-log-prefix' + echo ' @llft logs -f -t' + echo ' @llfs logs -f --no-log-prefix' + echo ' @llfts logs -f -t --no-log-prefix' + echo ' @llts logs -t --no-log-prefix' + echo ' @p ps' + echo ' @pa ps -a' + echo ' @pu push' + echo ' @pl pull' + echo ' @rs rm --stop' + echo ' @rf rm -f' + echo ' @rfv rm -f -v' + echo '' + echo 'Arguments will be appended to the docker command that will be run.' + echo 'If the command preset is empty, the arguments should include the command.' + echo '' + echo "Use '$0 --help' for more help." + exit ${ERROR_CODE:-0} fi UPDATE='false' @@ -1002,95 +1095,8 @@ elif [ "$(echo "$ARGS" | cut -c1)" = '@' ]; then if [ "$PRINT_ARGS_PRESET_HELP" = 'true' ]; then # Print help and exit - echo "Usage: $0 [options] [context] [@preset] [...args]" - echo ' args: Arguments passed to docker compose' - echo ' @preset:' - echo ' @u up -d' - echo ' @ua up' - echo ' @ub up --build -d' - echo ' @uba up --build' - echo ' @ubf up --build -d --force-recreate' - echo ' @ubfa up --build --force-recreate' - echo ' @ubfp up --build -d --force-recreate --pull always' - echo ' @ubfap up --build --force-recreate --pull always' - echo ' @ubr up --build -d --remove-orphans' - echo ' @ubar up --build --remove-orphans' - echo ' @ubfr up --build -d --force-recreate --remove-orphans' - echo ' @ubfar up --build --force-recreate --remove-orphans' - echo ' @uf up -d --force-recreate' - echo ' @ufa up --force-recreate' - echo ' @ur up -d --remove-orphans' - echo ' @uar up --remove-orphans' - echo ' @ufr up -d --force-recreate --remove-orphans' - echo ' @ufar up --force-recreate --remove-orphans' - echo ' @b build' - echo ' @bp build --pull' - echo ' @bf build --pull --no-cache' - echo ' @bn build --dry-run --pull --no-cache' - echo ' @w watch' - echo ' @wq watch --quiet' - echo ' @ww watch --no-up' - echo ' @wqw watch --quiet --no-up' - echo ' @wn watch --dry-run' - echo ' @d down' - echo ' @da down --remove-orphans' - echo ' @dr down --remove-orphans --rmi local' - echo ' @dra down --remove-orphans --rmi all' - echo ' @drav down --remove-orphans --rmi all -v' - echo ' @drv down --remove-orphans -v' - echo ' @r run --rm' - echo ' @rw run -w /pwd -v $(pwd):/pwd --rm' - echo ' @rd run -d' - echo ' @rk run' - echo ' @rb run --build --rm' - echo ' @rbw run --build -w /pwd -v $(pwd):/pwd --rm' - echo ' @rbd run --build -d' - echo ' @rbk run --build' - echo ' @ri run -i --rm' - echo ' @rwi run -w /pwd -v $(pwd):/pwd -i --rm' - echo ' @rki run -i' - echo ' @rbi run --build -i --rm' - echo ' @rbwi run --build -w /pwd -v $(pwd):/pwd -i --rm' - echo ' @rbki run --build -i' - echo ' @sh run -i --rm --entrypoint /bin/sh' - echo ' @shw run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' - echo ' @$ run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' - echo ' $ run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' - echo ' @shb run --build -i --rm --entrypoint /bin/sh' - echo ' @shbw run --build -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' - echo ' @bash run -i --rm --entrypoint /bin/bash' - echo ' @bashw run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/bash' - echo ' @bashb run --build -i --rm --entrypoint /bin/bash' - echo ' @bashbw run --build -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/bash' - echo ' @l logs -n 100' - echo ' @lf logs -n 100 -f' - echo ' @lt logs -n 100 -t' - echo ' @ls logs -n 100 --no-log-prefix' - echo ' @lft logs -n 100 -f -t' - echo ' @lfs logs -n 100 -f --no-log-prefix' - echo ' @lfts logs -n 100 -f -t --no-log-prefix' - echo ' @lts logs -n 100 -t --no-log-prefix' - echo ' @ll logs' - echo ' @llf logs -f' - echo ' @llt logs -t' - echo ' @lls logs --no-log-prefix' - echo ' @llft logs -f -t' - echo ' @llfs logs -f --no-log-prefix' - echo ' @llfts logs -f -t --no-log-prefix' - echo ' @llts logs -t --no-log-prefix' - echo ' @p ps' - echo ' @pa ps -a' - echo ' @pu push' - echo ' @pl pull' - echo ' @rs rm --stop' - echo ' @rf rm -f' - echo ' @rfv rm -f -v' - print_context_help - echo ' options:' - echo ' -f Force, for example ignores abstract contexts' - echo ' -n Dry run, print docker compose command without running it' - echo ' -q Quiet, do not print docker compose command' - exit 0 + echo 'DEPRECATED' + exit 1 fi fi From 5fc168f1a3dd687de680228ce35e1350886381e6 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:26:40 +0100 Subject: [PATCH 12/22] Update command preset help message --- dockerc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dockerc b/dockerc index de67865..81b6e6e 100755 --- a/dockerc +++ b/dockerc @@ -297,8 +297,7 @@ if [ "$DOCKERC_PRINT_HELP_COMMAND_PRESET" = 'true' ]; then echo ' @rbki run --build -i' echo ' @sh run -i --rm --entrypoint /bin/sh' echo ' @shw run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' - echo ' @$ run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' - echo ' $ run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' + echo ' (aliases: $, @$)' echo ' @shb run --build -i --rm --entrypoint /bin/sh' echo ' @shbw run --build -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' echo ' @bash run -i --rm --entrypoint /bin/bash' From dbe6b490d4f8105c15c099ef46233000f861e90f Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:28:39 +0100 Subject: [PATCH 13/22] Update command preset help message --- dockerc | 169 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 90 insertions(+), 79 deletions(-) diff --git a/dockerc b/dockerc index 81b6e6e..90c21a7 100755 --- a/dockerc +++ b/dockerc @@ -248,85 +248,96 @@ if [ "$DOCKERC_PRINT_HELP_COMMAND_PRESET" = 'true' ]; then echo "Usage: $0 [options] [@command_preset] [...args]" echo '' echo 'Command presets:' - echo ' @u up -d' - echo ' @ua up' - echo ' @ub up --build -d' - echo ' @uba up --build' - echo ' @ubf up --build -d --force-recreate' - echo ' @ubfa up --build --force-recreate' - echo ' @ubfp up --build -d --force-recreate --pull always' - echo ' @ubfap up --build --force-recreate --pull always' - echo ' @ubr up --build -d --remove-orphans' - echo ' @ubar up --build --remove-orphans' - echo ' @ubfr up --build -d --force-recreate --remove-orphans' - echo ' @ubfar up --build --force-recreate --remove-orphans' - echo ' @uf up -d --force-recreate' - echo ' @ufa up --force-recreate' - echo ' @ur up -d --remove-orphans' - echo ' @uar up --remove-orphans' - echo ' @ufr up -d --force-recreate --remove-orphans' - echo ' @ufar up --force-recreate --remove-orphans' - echo ' @b build' - echo ' @bp build --pull' - echo ' @bf build --pull --no-cache' - echo ' @bn build --dry-run --pull --no-cache' - echo ' @w watch' - echo ' @wq watch --quiet' - echo ' @ww watch --no-up' - echo ' @wqw watch --quiet --no-up' - echo ' @wn watch --dry-run' - echo ' @d down' - echo ' @da down --remove-orphans' - echo ' @dr down --remove-orphans --rmi local' - echo ' @dra down --remove-orphans --rmi all' - echo ' @drav down --remove-orphans --rmi all -v' - echo ' @drv down --remove-orphans -v' - echo ' @r run --rm' - echo ' @rw run -w /pwd -v $(pwd):/pwd --rm' - echo ' @rd run -d' - echo ' @rk run' - echo ' @rb run --build --rm' - echo ' @rbw run --build -w /pwd -v $(pwd):/pwd --rm' - echo ' @rbd run --build -d' - echo ' @rbk run --build' - echo ' @ri run -i --rm' - echo ' @rwi run -w /pwd -v $(pwd):/pwd -i --rm' - echo ' @rki run -i' - echo ' @rbi run --build -i --rm' - echo ' @rbwi run --build -w /pwd -v $(pwd):/pwd -i --rm' - echo ' @rbki run --build -i' - echo ' @sh run -i --rm --entrypoint /bin/sh' - echo ' @shw run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' - echo ' (aliases: $, @$)' - echo ' @shb run --build -i --rm --entrypoint /bin/sh' - echo ' @shbw run --build -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' - echo ' @bash run -i --rm --entrypoint /bin/bash' - echo ' @bashw run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/bash' - echo ' @bashb run --build -i --rm --entrypoint /bin/bash' - echo ' @bashbw run --build -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/bash' - echo ' @l logs -n 100' - echo ' @lf logs -n 100 -f' - echo ' @lt logs -n 100 -t' - echo ' @ls logs -n 100 --no-log-prefix' - echo ' @lft logs -n 100 -f -t' - echo ' @lfs logs -n 100 -f --no-log-prefix' - echo ' @lfts logs -n 100 -f -t --no-log-prefix' - echo ' @lts logs -n 100 -t --no-log-prefix' - echo ' @ll logs' - echo ' @llf logs -f' - echo ' @llt logs -t' - echo ' @lls logs --no-log-prefix' - echo ' @llft logs -f -t' - echo ' @llfs logs -f --no-log-prefix' - echo ' @llfts logs -f -t --no-log-prefix' - echo ' @llts logs -t --no-log-prefix' - echo ' @p ps' - echo ' @pa ps -a' - echo ' @pu push' - echo ' @pl pull' - echo ' @rs rm --stop' - echo ' @rf rm -f' - echo ' @rfv rm -f -v' + echo ' up:' + echo ' @u up -d' + echo ' @ua up' + echo ' @ub up --build -d' + echo ' @uba up --build' + echo ' @ubf up --build -d --force-recreate' + echo ' @ubfa up --build --force-recreate' + echo ' @ubfp up --build -d --force-recreate --pull always' + echo ' @ubfap up --build --force-recreate --pull always' + echo ' @ubr up --build -d --remove-orphans' + echo ' @ubar up --build --remove-orphans' + echo ' @ubfr up --build -d --force-recreate --remove-orphans' + echo ' @ubfar up --build --force-recreate --remove-orphans' + echo ' @uf up -d --force-recreate' + echo ' @ufa up --force-recreate' + echo ' @ur up -d --remove-orphans' + echo ' @uar up --remove-orphans' + echo ' @ufr up -d --force-recreate --remove-orphans' + echo ' @ufar up --force-recreate --remove-orphans' + echo ' build:' + echo ' @b build' + echo ' @bp build --pull' + echo ' @bf build --pull --no-cache' + echo ' @bn build --dry-run --pull --no-cache' + echo ' watch:' + echo ' @w watch' + echo ' @wq watch --quiet' + echo ' @ww watch --no-up' + echo ' @wqw watch --quiet --no-up' + echo ' @wn watch --dry-run' + echo ' down:' + echo ' @d down' + echo ' @da down --remove-orphans' + echo ' @dr down --remove-orphans --rmi local' + echo ' @dra down --remove-orphans --rmi all' + echo ' @drav down --remove-orphans --rmi all -v' + echo ' @drv down --remove-orphans -v' + echo ' run:' + echo ' @r run --rm' + echo ' @rw run -w /pwd -v $(pwd):/pwd --rm' + echo ' @rd run -d' + echo ' @rk run' + echo ' @rb run --build --rm' + echo ' @rbw run --build -w /pwd -v $(pwd):/pwd --rm' + echo ' @rbd run --build -d' + echo ' @rbk run --build' + echo ' @ri run -i --rm' + echo ' @rwi run -w /pwd -v $(pwd):/pwd -i --rm' + echo ' @rki run -i' + echo ' @rbi run --build -i --rm' + echo ' @rbwi run --build -w /pwd -v $(pwd):/pwd -i --rm' + echo ' @rbki run --build -i' + echo ' run shells:' + echo ' @sh run -i --rm --entrypoint /bin/sh' + echo ' @shw run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' + echo ' (aliases: $, @$)' + echo ' @shb run --build -i --rm --entrypoint /bin/sh' + echo ' @shbw run --build -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/sh' + echo ' @bash run -i --rm --entrypoint /bin/bash' + echo ' @bashw run -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/bash' + echo ' @bashb run --build -i --rm --entrypoint /bin/bash' + echo ' @bashbw run --build -w /pwd -v $(pwd):/pwd -i --rm --entrypoint /bin/bash' + echo ' logs:' + echo ' @l logs -n 100' + echo ' @lf logs -n 100 -f' + echo ' @lt logs -n 100 -t' + echo ' @ls logs -n 100 --no-log-prefix' + echo ' @lft logs -n 100 -f -t' + echo ' @lfs logs -n 100 -f --no-log-prefix' + echo ' @lfts logs -n 100 -f -t --no-log-prefix' + echo ' @lts logs -n 100 -t --no-log-prefix' + echo ' @ll logs' + echo ' @llf logs -f' + echo ' @llt logs -t' + echo ' @lls logs --no-log-prefix' + echo ' @llft logs -f -t' + echo ' @llfs logs -f --no-log-prefix' + echo ' @llfts logs -f -t --no-log-prefix' + echo ' @llts logs -t --no-log-prefix' + echo ' ps:' + echo ' @p ps' + echo ' @pa ps -a' + echo ' push:' + echo ' @pu push' + echo ' pull:' + echo ' @pl pull' + echo ' rm:' + echo ' @rs rm --stop' + echo ' @rf rm -f' + echo ' @rfv rm -f -v' echo '' echo 'Arguments will be appended to the docker command that will be run.' echo 'If the command preset is empty, the arguments should include the command.' From fa30d86adad642530bebefac83779d3337ebe18e Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:31:20 +0100 Subject: [PATCH 14/22] Remove print_context_help --- dockerc | 8 -------- 1 file changed, 8 deletions(-) diff --git a/dockerc b/dockerc index 90c21a7..af58d4d 100755 --- a/dockerc +++ b/dockerc @@ -174,14 +174,6 @@ if [ "$DOCKERC_PRINT_HELP" = 'true' ]; then exit ${ERROR_CODE:-0} fi -print_context_help() { - echo ' context syntax: [first] | [first]-[second] | "-" | "--"' - echo ' first First part of the context' - echo ' second Second part of the context' - echo ' "-" Use default docker compose files ("override" if it exists)' - echo ' "--" Use docker compose without file arguments' -} - if [ "$DOCKERC_PRINT_HELP_CONTEXT" = 'true' ]; then # Print context help & exit echo 'DockerC context argument values:' From 68068d5be1b5f2f3ed61e7a7b8217d5ff6ad341c Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:32:35 +0100 Subject: [PATCH 15/22] Move variables set from args --- dockerc | 84 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/dockerc b/dockerc index af58d4d..fcdffe8 100755 --- a/dockerc +++ b/dockerc @@ -146,6 +146,48 @@ while true; do done +UPDATE='false' +if [ -n "$DOCKERC_UPDATE" ]; then + # Use from argument or environment variable + UPDATE="$DOCKERC_UPDATE" +fi + +FORCE='false' +if [ -n "$DOCKERC_FORCE" ]; then + # Use from argument or environment variable + FORCE="$DOCKERC_FORCE" +fi + +DRY_RUN='false' +if [ -n "$DOCKERC_DRY_RUN" ]; then + # Use from argument or environment variable + DRY_RUN="$DOCKERC_DRY_RUN" +fi + +QUIET='false' +if [ -n "$DOCKERC_QUIET" ]; then + # Use from argument or environment variable + QUIET="$DOCKERC_QUIET" +fi + +CONTEXT='' +if [ -n "$DOCKERC_CONTEXT" ]; then + # Use from argument or environment variable + CONTEXT="$DOCKERC_CONTEXT" +fi + +COMMAND_PRESET='' +if [ -n "$DOCKERC_COMMAND_PRESET" ]; then + # Use from argument or environment variable + COMMAND_PRESET="$DOCKERC_COMMAND_PRESET" +fi + +COMMAND_ARGS='' +if [ -n "$DOCKERC_COMMAND_ARGS" ]; then + # Use from argument or environment variable + COMMAND_ARGS="$DOCKERC_COMMAND_ARGS" +fi + if [ "$DOCKERC_PRINT_HELP" = 'true' ]; then # Print help & exit echo 'Usage:' @@ -338,48 +380,6 @@ if [ "$DOCKERC_PRINT_HELP_COMMAND_PRESET" = 'true' ]; then exit ${ERROR_CODE:-0} fi -UPDATE='false' -if [ -n "$DOCKERC_UPDATE" ]; then - # Use from argument or environment variable - UPDATE="$DOCKERC_UPDATE" -fi - -FORCE='false' -if [ -n "$DOCKERC_FORCE" ]; then - # Use from argument or environment variable - FORCE="$DOCKERC_FORCE" -fi - -DRY_RUN='false' -if [ -n "$DOCKERC_DRY_RUN" ]; then - # Use from argument or environment variable - DRY_RUN="$DOCKERC_DRY_RUN" -fi - -QUIET='false' -if [ -n "$DOCKERC_QUIET" ]; then - # Use from argument or environment variable - QUIET="$DOCKERC_QUIET" -fi - -CONTEXT='' -if [ -n "$DOCKERC_CONTEXT" ]; then - # Use from argument or environment variable - CONTEXT="$DOCKERC_CONTEXT" -fi - -COMMAND_PRESET='' -if [ -n "$DOCKERC_COMMAND_PRESET" ]; then - # Use from argument or environment variable - COMMAND_PRESET="$DOCKERC_COMMAND_PRESET" -fi - -COMMAND_ARGS='' -if [ -n "$DOCKERC_COMMAND_ARGS" ]; then - # Use from argument or environment variable - COMMAND_ARGS="$DOCKERC_COMMAND_ARGS" -fi - get_latest_version() { # Syntax: '"tag_name": "v1.0.0",' LATEST_VERSION_JSON=$( From e38cf98376a3d892e8ddb81c4a4a15123936439b Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:34:19 +0100 Subject: [PATCH 16/22] Add DOCKERC_DEBUG_ARGS --- dockerc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/dockerc b/dockerc index fcdffe8..d0d4cb4 100755 --- a/dockerc +++ b/dockerc @@ -146,6 +146,23 @@ while true; do done +if [ "$DOCKERC_DEBUG_ARGS" = 'true' ]; then + # Print parsed arguments + echo "DOCKERC_PRINT_HELP: $DOCKERC_PRINT_HELP" + echo "DOCKERC_PRINT_HELP_CONTEXT: $DOCKERC_PRINT_HELP_CONTEXT" + echo "DOCKERC_PRINT_HELP_COMPOSE_PRESET: $DOCKERC_PRINT_HELP_COMPOSE_PRESET" + echo "DOCKERC_PRINT_HELP_COMMAND_PRESET: $DOCKERC_PRINT_HELP_COMMAND_PRESET" + echo "DOCKERC_PRINT_VERSION: $DOCKERC_PRINT_VERSION" + echo "DOCKERC_UPDATE: $DOCKERC_UPDATE" + echo "DOCKERC_FORCE: $DOCKERC_FORCE" + echo "DOCKERC_DRY_RUN: $DOCKERC_DRY_RUN" + echo "DOCKERC_QUIET: $DOCKERC_QUIET" + echo "DOCKERC_CONTEXT: $DOCKERC_CONTEXT" + echo "DOCKERC_COMMAND_PRESET: $DOCKERC_COMMAND_PRESET" + echo "DOCKERC_COMMAND_ARGS: $DOCKERC_COMMAND_ARGS" + exit ${ERROR_CODE:-0} +fi + UPDATE='false' if [ -n "$DOCKERC_UPDATE" ]; then # Use from argument or environment variable From 00fbb833327e052a977cc1aff31faaf7833317b6 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:44:01 +0100 Subject: [PATCH 17/22] Add update help message --- dockerc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/dockerc b/dockerc index d0d4cb4..8c6d799 100755 --- a/dockerc +++ b/dockerc @@ -206,6 +206,21 @@ if [ -n "$DOCKERC_COMMAND_ARGS" ]; then fi if [ "$DOCKERC_PRINT_HELP" = 'true' ]; then + + if [ "$UPDATE" = 'true' ]; then + # Print update help & exit + echo "Usage: $0 --update [options] [tag]" + echo '' + echo 'Options:' + echo ' -h, --help Print this help message' + echo ' -i, --install-dir Set installation directory' + echo " (defaults to directory '$(dirname "$0")')" + echo '' + echo 'Arguments:' + echo ' tag DockerC tag/version to install (defaults to HEAD)' + exit ${ERROR_CODE:-0} + fi + # Print help & exit echo 'Usage:' echo " $0 [options] [ [@command_preset] [...args] ]" From c0520dd921dc8455abae7b0227245dd32fddc697 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:47:25 +0100 Subject: [PATCH 18/22] Parse install-dir option --- dockerc | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/dockerc b/dockerc index 8c6d799..aea1116 100755 --- a/dockerc +++ b/dockerc @@ -32,12 +32,6 @@ while true; do shift ;; - '--update' ) - # Update DockerC - DOCKERC_UPDATE='true' - shift - ;; - '--force' | '-f' ) # Force, for example ignores abstract contexts DOCKERC_FORCE='true' @@ -56,6 +50,27 @@ while true; do shift ;; + '--update' ) + # Update DockerC + DOCKERC_UPDATE='true' + shift + ;; + + '--install-dir' | '-i' ) + shift + # Check for installation directory argument + if [ -z "$1" ]; then + echo 'Error: Missing installation directory.' >&2 + DOCKERC_PRINT_HELP='true' + DOCKERC_UPDATE='true' + ERROR_CODE=1 + break + fi + # Set installation directory + DOCKERC_INSTALL_DIR="$1" + shift + ;; + * ) break ;; From e4a17ebd003fa15f4373c910025239a7be4c75c8 Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:48:09 +0100 Subject: [PATCH 19/22] Update args debug --- dockerc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dockerc b/dockerc index aea1116..7d3a989 100755 --- a/dockerc +++ b/dockerc @@ -168,10 +168,11 @@ if [ "$DOCKERC_DEBUG_ARGS" = 'true' ]; then echo "DOCKERC_PRINT_HELP_COMPOSE_PRESET: $DOCKERC_PRINT_HELP_COMPOSE_PRESET" echo "DOCKERC_PRINT_HELP_COMMAND_PRESET: $DOCKERC_PRINT_HELP_COMMAND_PRESET" echo "DOCKERC_PRINT_VERSION: $DOCKERC_PRINT_VERSION" - echo "DOCKERC_UPDATE: $DOCKERC_UPDATE" echo "DOCKERC_FORCE: $DOCKERC_FORCE" echo "DOCKERC_DRY_RUN: $DOCKERC_DRY_RUN" echo "DOCKERC_QUIET: $DOCKERC_QUIET" + echo "DOCKERC_UPDATE: $DOCKERC_UPDATE" + echo "DOCKERC_INSTALL_DIR: $DOCKERC_INSTALL_DIR" echo "DOCKERC_CONTEXT: $DOCKERC_CONTEXT" echo "DOCKERC_COMMAND_PRESET: $DOCKERC_COMMAND_PRESET" echo "DOCKERC_COMMAND_ARGS: $DOCKERC_COMMAND_ARGS" From 1c4311a749be0bc0b59c094cdc1632a5ec14789d Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:56:17 +0100 Subject: [PATCH 20/22] Add variables set from newest args --- dockerc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/dockerc b/dockerc index 7d3a989..7b59ddc 100755 --- a/dockerc +++ b/dockerc @@ -179,12 +179,6 @@ if [ "$DOCKERC_DEBUG_ARGS" = 'true' ]; then exit ${ERROR_CODE:-0} fi -UPDATE='false' -if [ -n "$DOCKERC_UPDATE" ]; then - # Use from argument or environment variable - UPDATE="$DOCKERC_UPDATE" -fi - FORCE='false' if [ -n "$DOCKERC_FORCE" ]; then # Use from argument or environment variable @@ -203,6 +197,18 @@ if [ -n "$DOCKERC_QUIET" ]; then QUIET="$DOCKERC_QUIET" fi +UPDATE='false' +if [ -n "$DOCKERC_UPDATE" ]; then + # Use from argument or environment variable + UPDATE="$DOCKERC_UPDATE" +fi + +INSTALL_DIR="$(dirname "$0")" +if [ -n "$DOCKERC_INSTALL_DIR" ]; then + # Use from argument or environment variable + INSTALL_DIR="$DOCKERC_INSTALL_DIR" +fi + CONTEXT='' if [ -n "$DOCKERC_CONTEXT" ]; then # Use from argument or environment variable From a5bdaab7b12ab22e3a7ec2904ef8b546d76c620b Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 03:56:27 +0100 Subject: [PATCH 21/22] Update dockerc update code block --- dockerc | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/dockerc b/dockerc index 7b59ddc..6c1ca2a 100755 --- a/dockerc +++ b/dockerc @@ -478,34 +478,33 @@ fi if [ "$UPDATE" = 'true' ]; then # Update DockerC & exit - INSTALL_DIR=$(dirname "$0") # Default install directory - if [ -n "$DOCKERC_INSTALL_DIR" ]; then - # Use from environment variable - INSTALL_DIR="$DOCKERC_INSTALL_DIR" - fi - if [ ! -d "$INSTALL_DIR" ]; then echo 'Error: Install directory does not exist.' >&2 exit 1 fi - if [ $# -gt 0 ]; then - if [ "$1" = 'HEAD' ] || [ "$1" = 'head' ] || [ "$1" = '.' ] || [ "$1" = '-' ]; then - REQUIRED_VERSION='HEAD' - else - REQUIRED_VERSION="$1" - fi - shift + # Read install tag from first positional argument: context + if [ -z "$CONTEXT" ]; then + INSTALL_TAG="$(get_latest_version)" + elif [ "$CONTEXT" = 'HEAD' ] || [ "$CONTEXT" = 'head' ] || [ "$CONTEXT" = '.' ] || [ "$CONTEXT" = '-' ]; then + INSTALL_TAG='HEAD' else - REQUIRED_VERSION="$(get_latest_version)" + INSTALL_TAG="$CONTEXT" + fi + + if [ "$QUIET" = 'false' ]; then + # Print install script command + if [ "$DOCKERC_FIRST_NEWLINE" != 'false' ]; then + echo '' + fi + echo "> curl -fsSL \"https://raw.githubusercontent.com/matiboux/dockerc/HEAD/install.sh\" | /bin/sh -s -- \"$INSTALL_DIR\" \"$INSTALL_TAG\"" + echo '' fi if [ "$DRY_RUN" = 'false' ]; then - echo "Updating DockerC (v$REQUIRED_VERSION)..." - exec /bin/sh -c "curl -fsSL \"https://raw.githubusercontent.com/matiboux/dockerc/HEAD/install.sh\" | /bin/sh -s -- \"$INSTALL_DIR\" \"$REQUIRED_VERSION\"" - else - echo 'Updating DockerC (dry run):' - echo "> curl -fsSL \"https://raw.githubusercontent.com/matiboux/dockerc/HEAD/install.sh\" | /bin/sh -s -- \"$INSTALL_DIR\" \"$REQUIRED_VERSION\"" + # Run install script + echo "Updating DockerC to $INSTALL_TAG..." + exec /bin/sh -c "curl -fsSL \"https://raw.githubusercontent.com/matiboux/dockerc/HEAD/install.sh\" | /bin/sh -s -- \"$INSTALL_DIR\" \"$INSTALL_TAG\"" fi exit 0 From 5f2437b1f789bb4f16cfaa93d5dcbdc8d99de50f Mon Sep 17 00:00:00 2001 From: Matiboux Date: Fri, 15 Nov 2024 10:08:12 +0100 Subject: [PATCH 22/22] Use ERROR_CODE as exit code --- dockerc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dockerc b/dockerc index 6c1ca2a..820dbf0 100755 --- a/dockerc +++ b/dockerc @@ -507,7 +507,7 @@ if [ "$UPDATE" = 'true' ]; then exec /bin/sh -c "curl -fsSL \"https://raw.githubusercontent.com/matiboux/dockerc/HEAD/install.sh\" | /bin/sh -s -- \"$INSTALL_DIR\" \"$INSTALL_TAG\"" fi - exit 0 + exit ${ERROR_CODE:-0} fi # Check for docker preset @@ -630,7 +630,7 @@ if [ "$(echo "$CONTEXT" | cut -c1)" = '@' ]; then fi - exit 0 + exit ${ERROR_CODE:-0} fi