diff --git a/shell-bun.sh b/shell-bun.sh index 7c025e4..8ff1738 100755 --- a/shell-bun.sh +++ b/shell-bun.sh @@ -171,6 +171,7 @@ declare -a EXECUTION_RESULTS=() # Track execution results for log viewing GLOBAL_LOG_DIR="" # Global log directory from config CONFIG_CONTAINER_COMMAND="" # Container command defined in config (if any) CONTAINER_COMMAND="" # Effective container command after CLI overrides +CONTAINER_ENV_FILE="${SHELL_BUN_CONTAINER_MARKER_FILE:-/run/.containerenv}" # Helper functions for safely working with SELECTED_ITEMS under set -u and # older bash versions where empty array expansions could trigger errors @@ -328,7 +329,12 @@ parse_config() { if [[ $CLI_CONTAINER_OVERRIDE -eq 1 ]]; then CONTAINER_COMMAND="$CLI_CONTAINER_COMMAND" else - CONTAINER_COMMAND="$CONFIG_CONTAINER_COMMAND" + if [[ -f "$CONTAINER_ENV_FILE" && -n "$CONFIG_CONTAINER_COMMAND" ]]; then + print_color "$YELLOW" "Detected $CONTAINER_ENV_FILE - ignoring configured container command: $CONFIG_CONTAINER_COMMAND" + CONTAINER_COMMAND="" + else + CONTAINER_COMMAND="$CONFIG_CONTAINER_COMMAND" + fi fi if [[ ${#APPS[@]} -eq 0 ]]; then diff --git a/tests/test_container_override_flag.bats b/tests/test_container_override_flag.bats index 7c52a76..dee2328 100644 --- a/tests/test_container_override_flag.bats +++ b/tests/test_container_override_flag.bats @@ -4,6 +4,16 @@ setup() { export TEST_DIR="$BATS_TEST_DIRNAME" export SCRIPT_DIR="$(cd "$TEST_DIR/.." && pwd)" export TEST_CONFIG="$TEST_DIR/fixtures/container_override.cfg" + export SHELL_BUN_CONTAINER_MARKER_FILE="$BATS_TEST_TMPDIR/containerenv" + export CONTAINER_ENV_PATH="$SHELL_BUN_CONTAINER_MARKER_FILE" +} + +create_container_env_marker() { + : > "$CONTAINER_ENV_PATH" +} + +restore_container_env_marker() { + rm -f "$CONTAINER_ENV_PATH" } @test "--container overrides container command from config" { @@ -42,8 +52,55 @@ CONFIG [[ "$output" == *"host-run"* ]] } +@test "configured container is ignored when /run/.containerenv exists" { + cat > "$TEST_CONFIG" <<'CONFIG' +# Test config to ensure the configured container command is ignored inside a container +container=env CONTAINER_SOURCE=config + +[TestApp] +build=echo "container source: ${CONTAINER_SOURCE:-none}" +CONFIG + + create_container_env_marker + + run "$SCRIPT_DIR/shell-bun.sh" --ci TestApp build "$TEST_CONFIG" + + echo "Exit code: $status" + echo "Output: $output" + + restore_container_env_marker + + [ "$status" -eq 0 ] + [[ "$output" == *"Detected $CONTAINER_ENV_PATH - ignoring configured container command"* ]] + [[ "$output" == *"container source: none"* ]] +} + +@test "--container override still applies when /run/.containerenv exists" { + cat > "$TEST_CONFIG" <<'CONFIG' +# Test config to ensure CLI override still wins inside a container +container=env CONTAINER_SOURCE=config + +[TestApp] +build=echo "container source: ${CONTAINER_SOURCE:-none}" +CONFIG + + create_container_env_marker + + run "$SCRIPT_DIR/shell-bun.sh" --container "env CONTAINER_SOURCE=cli" --ci TestApp build "$TEST_CONFIG" + + echo "Exit code: $status" + echo "Output: $output" + + restore_container_env_marker + + [ "$status" -eq 0 ] + [[ "$output" == *"container source: cli"* ]] + [[ "$output" != *"Detected $CONTAINER_ENV_PATH - ignoring configured container command"* ]] +} + teardown() { if [ -f "$TEST_CONFIG" ]; then rm "$TEST_CONFIG" fi + restore_container_env_marker }