From 250b6ec3397e503974a9da767aff6ec0847ed78e Mon Sep 17 00:00:00 2001 From: vitali87 Date: Fri, 27 Mar 2026 10:16:37 +0100 Subject: [PATCH] feat: add dr docker entity with dry-run support before docker check --- lib/drop.sh | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ test.sh | 20 +++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/lib/drop.sh b/lib/drop.sh index 5e3e1eb..a7ab646 100644 --- a/lib/drop.sh +++ b/lib/drop.sh @@ -135,6 +135,70 @@ _u7_drop() { _u7_exec sudo deluser "$1" ;; + docker) + case "$1" in + container|image|volume) + if [[ "$_U7_DRY_RUN" != "1" ]]; then + if ! command -v docker &>/dev/null; then + echo "Error: docker is not installed or not in PATH" + return 1 + fi + fi + ;; + prune) + if [[ "$_U7_DRY_RUN" == "1" ]]; then + echo "[dry-run] docker system prune -af" + return 0 + fi + if ! command -v docker &>/dev/null; then + echo "Error: docker is not installed or not in PATH" + return 1 + fi + ;; + "") + echo "Usage: u7 dr docker [id|name]" + return 0 + ;; + *) + echo "Usage: u7 dr docker [id|name]" + return 1 + ;; + esac + case "$1" in + container) + if [[ -z "$2" ]]; then + echo "Usage: u7 dr docker container " + return 1 + fi + _u7_exec docker rm -f "$2" + ;; + image) + if [[ -z "$2" ]]; then + echo "Usage: u7 dr docker image " + return 1 + fi + _u7_exec docker rmi "$2" + ;; + volume) + if [[ -z "$2" ]]; then + echo "Usage: u7 dr docker volume " + return 1 + fi + _u7_exec docker volume rm "$2" + ;; + prune) + echo "This will remove all stopped containers, unused images, and build cache. Continue? (y/n)" + read -r confirm < /dev/tty + if [[ "${confirm,,}" == "y" ]]; then + _u7_exec docker system prune -af + else + echo "Aborted." + return 1 + fi + ;; + esac + ;; + --help|-h) cat << 'EOF' u7 dr (drop) - Delete/Kill @@ -152,6 +216,7 @@ Entities: duplicates in|from Remove duplicate lines process Kill process user Delete system user + docker [id|name] Manage Docker resources EOF ;; diff --git a/test.sh b/test.sh index 3db27d7..1c6e5d1 100755 --- a/test.sh +++ b/test.sh @@ -890,6 +890,26 @@ assert_contains "mk template rejects existing dir" "already exists" "$result" # Test: mk template rejects special characters in name result=$(u7 mk template python "my project" 2>&1) assert_contains "mk template rejects special chars" "alphanumerics" "$result" +# Test: dr docker without subcommand shows usage +result=$(u7 dr docker 2>&1) +assert_contains "dr docker shows usage" "Usage:" "$result" + +# Test: dr docker prune dry-run +result=$(u7 --dry-run dr docker prune 2>&1) +assert_contains "dr docker prune dry-run works" "[dry-run]" "$result" + +# Test: dr docker container dry-run +result=$(u7 --dry-run dr docker container test123 2>&1) +assert_contains "dr docker container dry-run works" "[dry-run]" "$result" + +# Test: dr docker image dry-run +result=$(u7 --dry-run dr docker image test123 2>&1) +assert_contains "dr docker image dry-run works" "[dry-run]" "$result" + +# Test: dr docker volume dry-run +result=$(u7 --dry-run dr docker volume test123 2>&1) +assert_contains "dr docker volume dry-run works" "[dry-run]" "$result" + # Test 92: sh system result=$(u7 sh system 2>&1) assert_contains "sh system shows hostname" "Hostname:" "$result"