Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion shell-bun.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
57 changes: 57 additions & 0 deletions tests/test_container_override_flag.bats
Original file line number Diff line number Diff line change
Expand Up @@ -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" {
Expand Down Expand Up @@ -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
}