From 8dc2fd894b4a4b71a51ba91cbfd2b1e1d2e1a551 Mon Sep 17 00:00:00 2001 From: casjay Date: Sat, 20 Jun 2026 07:42:42 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20dead=20accumulator,=20mult?= =?UTF-8?q?i-arg=20exec=20drop,=20and=20init=20placeholder=20=F0=9F=90=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit set -e in go-workflow made the retVal/GO_EXITCODE accumulator dead code — any failing run_step call exits the script immediately via set -e before retVal=$? is ever reached, so GO_EXITCODE only ever sums zeros. Remove the accumulator and simplify run_step; set -e already propagates failures naturally. __exec_command in the *) and exec) cases only used the first element of its arg array (local cmdExec="${arg:-}" expands to arg[0]), silently dropping every subsequent word. "docker run casjaysdev/go go test ./..." ran just "go" with no subcommand. Replace __exec_command with exec "$@" directly in both cases; exec is correct (no extra process) and preserves all args. 00-go.sh exported CONTAINER_INIT and SERVICE_USES_PID inside a subshell ( source "$init" ) — those exports never propagated back to the parent entrypoint. Move SERVICE_USES_PID="no" to go.sh (sourced by the parent shell before __start_init_scripts runs) so the framework takes the explicit "config service, no PID" path. Rewrite 00-go.sh as a documented placeholder explaining why the file must still exist (init_count == 0 triggers an infinite background keep-alive loop). - rootfs/usr/local/bin/go-workflow: remove GO_EXITCODE/retVal accumulator; simplify run_step to drop exitCode capture (always 0 with set -e) - rootfs/usr/local/bin/entrypoint.sh: *) case uses exec "$@" / exec go-workflow; exec) case uses exec "$@" with proper empty-arg error instead of broken __exec_command fallback - rootfs/usr/local/etc/docker/env/go.sh: add SERVICE_USES_PID="no" - rootfs/usr/local/etc/docker/init.d/00-go.sh: remove dead exports; add comment explaining placeholder purpose rootfs/usr/local/bin/entrypoint.sh rootfs/usr/local/bin/go-workflow rootfs/usr/local/etc/docker/env/go.sh rootfs/usr/local/etc/docker/init.d/00-go.sh --- rootfs/usr/local/bin/entrypoint.sh | 12 +++++++----- rootfs/usr/local/bin/go-workflow | 15 --------------- rootfs/usr/local/etc/docker/env/go.sh | 2 ++ rootfs/usr/local/etc/docker/init.d/00-go.sh | 13 +++++++------ 4 files changed, 16 insertions(+), 26 deletions(-) diff --git a/rootfs/usr/local/bin/entrypoint.sh b/rootfs/usr/local/bin/entrypoint.sh index 6782e85..b3fe882 100755 --- a/rootfs/usr/local/bin/entrypoint.sh +++ b/rootfs/usr/local/bin/entrypoint.sh @@ -655,8 +655,11 @@ procs) # execute commands exec) shift 1 - __exec_command "${@:-echo "No commands given"}" - exit $? + if [ $# -eq 0 ]; then + echo "Error: exec requires a command" >&2 + exit 1 + fi + exec "$@" ;; # show/start init scripts start) @@ -682,11 +685,10 @@ start) *) if [ $# -eq 0 ]; then # No args: run the default Go workflow (tidy → fmt → vet → test → build) - __exec_command go-workflow + exec go-workflow else - __exec_command "$@" + exec "$@" fi - exit $? ;; esac # - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rootfs/usr/local/bin/go-workflow b/rootfs/usr/local/bin/go-workflow index 18976fd..3250f8d 100755 --- a/rootfs/usr/local/bin/go-workflow +++ b/rootfs/usr/local/bin/go-workflow @@ -6,7 +6,6 @@ set -euo pipefail # Resolve the working directory — prefer /app if mounted, else cwd -GO_EXITCODE=0 WORK_DIR="${GOWORKDIR:-${PWD}}" cd "$WORK_DIR" @@ -25,35 +24,21 @@ echo "" run_step() { local label="$1"; shift - local exitCode=0 echo "── ${label}" "$@" - exitCode=$? echo "" - return $exitCode } # 1. Sync module graph and go.sum before anything reads them run_step "go mod tidy" go mod tidy -retVal=$? -GO_EXITCODE=$((GO_EXITCODE + retVal)) # 2. Format all Go source files in place run_step "gofmt -w ." gofmt -w . -retVal=$? -GO_EXITCODE=$((GO_EXITCODE + retVal)) # 3. Catch suspicious constructs run_step "go vet ./..." go vet ./... -retVal=$? -GO_EXITCODE=$((GO_EXITCODE + retVal)) # 4. Run tests — fail fast before wasting time on a build run_step "go test ./..." go test ./... -retVal=$? -GO_EXITCODE=$((GO_EXITCODE + retVal)) # 5. Build all main packages; output lands alongside source in each package dir run_step "go build ./..." go build ./... -retVal=$? -GO_EXITCODE=$((GO_EXITCODE + retVal)) echo "✅ Done." -exit $GO_EXITCODE diff --git a/rootfs/usr/local/etc/docker/env/go.sh b/rootfs/usr/local/etc/docker/env/go.sh index fc15bcf..20ca3d5 100644 --- a/rootfs/usr/local/etc/docker/env/go.sh +++ b/rootfs/usr/local/etc/docker/env/go.sh @@ -12,3 +12,5 @@ MONGODB_CONFIG_FILE="none" # This image has no long-running daemon; suppress the startup banner and health loop ENTRYPOINT_MESSAGE="no" HEALTH_ENABLED="no" +# Tell __start_init_scripts this is a config-only init — no daemon process or PID file expected +SERVICE_USES_PID="no" diff --git a/rootfs/usr/local/etc/docker/init.d/00-go.sh b/rootfs/usr/local/etc/docker/init.d/00-go.sh index b3c36ef..8fba17f 100755 --- a/rootfs/usr/local/etc/docker/init.d/00-go.sh +++ b/rootfs/usr/local/etc/docker/init.d/00-go.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605292219-git +##@Version : 202506192219-git # @@Author : Jason Hempstead # @@Contact : jason@casjaysdev.pro # @@License : WTFPL @@ -9,9 +9,10 @@ # @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments # @@Created : Friday, May 29, 2026 22:22 EDT # @@File : 00-go.sh -# @@Description : Go toolchain — configuration-only init (no daemon) +# @@Description : Go toolchain — placeholder init (no daemon) # - - - - - - - - - - - - - - - - - - - - - - - - - -# Tell the init framework this is a configuration service, not a daemon. -# This prevents __start_init_scripts from waiting for a PID or keep-alive loop. -export CONTAINER_INIT="yes" -export SERVICE_USES_PID="no" +# This file must exist. __start_init_scripts spawns an infinite keep-alive loop +# when init_count == 0 (no scripts in init.d/). Go is not a daemon — we just +# need one script so init_count >= 1. SERVICE_USES_PID is set in the env file +# (go.sh) which the parent shell reads; exports here are subshell-isolated and +# would not propagate back to the entrypoint anyway.