From 30b90be8dd7d2bb5bb4fc615a8155b8730a0a91e Mon Sep 17 00:00:00 2001 From: Joachim Mercier Date: Sun, 22 Feb 2026 00:28:11 +0100 Subject: [PATCH] fix: filter docker compose hook rewrites to supported subcommands The hook was rewriting all `docker compose` commands to `rtk docker compose`, but rtk only supports ps, logs, and build. Unsupported subcommands (up, down, exec, restart...) and compose-level flags (-f, --project-name) caused hard failures. Now matches the approach used by the regular docker branch: only rewrite when the subcommand is known to be supported. Fixes #244 Co-Authored-By: Claude Opus 4.6 --- hooks/rtk-rewrite.sh | 7 ++++++- hooks/test-rtk-rewrite.sh | 28 ++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/hooks/rtk-rewrite.sh b/hooks/rtk-rewrite.sh index 59e02caa..bd7bd20c 100644 --- a/hooks/rtk-rewrite.sh +++ b/hooks/rtk-rewrite.sh @@ -129,7 +129,12 @@ elif echo "$MATCH_CMD" | grep -qE '^(npx[[:space:]]+)?prisma([[:space:]]|$)'; th # --- Containers (added: docker compose, docker run/build/exec, kubectl describe/apply) --- elif echo "$MATCH_CMD" | grep -qE '^docker[[:space:]]'; then if echo "$MATCH_CMD" | grep -qE '^docker[[:space:]]+compose([[:space:]]|$)'; then - REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^docker /rtk docker /')" + COMPOSE_SUBCMD=$(echo "$MATCH_CMD" | sed -E 's/^docker[[:space:]]+compose[[:space:]]*//') + case "$COMPOSE_SUBCMD" in + ps|ps\ *|logs|logs\ *|build|build\ *) + REWRITTEN="${ENV_PREFIX}$(echo "$CMD_BODY" | sed 's/^docker /rtk docker /')" + ;; + esac else DOCKER_SUBCMD=$(echo "$MATCH_CMD" | sed -E \ -e 's/^docker[[:space:]]+//' \ diff --git a/hooks/test-rtk-rewrite.sh b/hooks/test-rtk-rewrite.sh index 2c5535b6..57073d00 100755 --- a/hooks/test-rtk-rewrite.sh +++ b/hooks/test-rtk-rewrite.sh @@ -145,9 +145,13 @@ test_rewrite "env + npm run" \ "NODE_ENV=test npm run test:e2e" \ "NODE_ENV=test rtk npm test:e2e" -test_rewrite "env + docker compose" \ +test_rewrite "env + docker compose (unsupported subcommand, NOT rewritten)" \ "COMPOSE_PROJECT_NAME=test docker compose up -d" \ - "COMPOSE_PROJECT_NAME=test rtk docker compose up -d" + "" + +test_rewrite "env + docker compose logs (supported, rewritten)" \ + "COMPOSE_PROJECT_NAME=test docker compose logs web" \ + "COMPOSE_PROJECT_NAME=test rtk docker compose logs web" echo "" @@ -173,17 +177,29 @@ test_rewrite "npx vue-tsc --noEmit" \ "npx vue-tsc --noEmit" \ "rtk tsc --noEmit" -test_rewrite "docker compose up -d" \ +test_rewrite "docker compose up -d (NOT rewritten — unsupported by rtk)" \ "docker compose up -d" \ - "rtk docker compose up -d" + "" test_rewrite "docker compose logs postgrest" \ "docker compose logs postgrest" \ "rtk docker compose logs postgrest" -test_rewrite "docker compose down" \ +test_rewrite "docker compose ps" \ + "docker compose ps" \ + "rtk docker compose ps" + +test_rewrite "docker compose build" \ + "docker compose build" \ + "rtk docker compose build" + +test_rewrite "docker compose down (NOT rewritten — unsupported by rtk)" \ "docker compose down" \ - "rtk docker compose down" + "" + +test_rewrite "docker compose -f file.yml up (NOT rewritten — flag before subcommand)" \ + "docker compose -f docker-compose.preview.yml --project-name myapp up -d --build" \ + "" test_rewrite "docker run --rm postgres" \ "docker run --rm postgres" \