From 6c1d3eafd464adf6d7ec5d22964b3bbb35108357 Mon Sep 17 00:00:00 2001 From: Fredrik Reveny Date: Fri, 7 Nov 2025 11:41:59 +0100 Subject: [PATCH 1/3] Ignore container config when already inside container --- shell-bun.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/shell-bun.sh b/shell-bun.sh index 7c025e4..355a118 100755 --- a/shell-bun.sh +++ b/shell-bun.sh @@ -328,7 +328,12 @@ parse_config() { if [[ $CLI_CONTAINER_OVERRIDE -eq 1 ]]; then CONTAINER_COMMAND="$CLI_CONTAINER_COMMAND" else - CONTAINER_COMMAND="$CONFIG_CONTAINER_COMMAND" + if [[ -f /run/.containerenv && -n "$CONFIG_CONTAINER_COMMAND" ]]; then + print_color "$YELLOW" "Detected /run/.containerenv - ignoring configured container command: $CONFIG_CONTAINER_COMMAND" + CONTAINER_COMMAND="" + else + CONTAINER_COMMAND="$CONFIG_CONTAINER_COMMAND" + fi fi if [[ ${#APPS[@]} -eq 0 ]]; then From d9ca61683580f8b1415fdc664785a1a84c713ef7 Mon Sep 17 00:00:00 2001 From: Fredrik Reveny Date: Fri, 7 Nov 2025 11:46:17 +0100 Subject: [PATCH 2/3] Add tests for container env detection and override --- tests/test_container_override_flag.bats | 72 +++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/tests/test_container_override_flag.bats b/tests/test_container_override_flag.bats index 7c52a76..b0d3362 100644 --- a/tests/test_container_override_flag.bats +++ b/tests/test_container_override_flag.bats @@ -4,6 +4,31 @@ setup() { export TEST_DIR="$BATS_TEST_DIRNAME" export SCRIPT_DIR="$(cd "$TEST_DIR/.." && pwd)" export TEST_CONFIG="$TEST_DIR/fixtures/container_override.cfg" + export CONTAINER_ENV_PATH="/run/.containerenv" + export CONTAINER_ENV_BACKUP="${CONTAINER_ENV_PATH}.bats-backup" + export CONTAINER_ENV_CREATED_BY_TEST=0 +} + +create_container_env_marker() { + if [ -e "$CONTAINER_ENV_PATH" ] && [ ! -e "$CONTAINER_ENV_BACKUP" ]; then + mv "$CONTAINER_ENV_PATH" "$CONTAINER_ENV_BACKUP" + fi + : > "$CONTAINER_ENV_PATH" + export CONTAINER_ENV_CREATED_BY_TEST=1 +} + +restore_container_env_marker() { + if [ "${CONTAINER_ENV_CREATED_BY_TEST:-0}" -eq 1 ]; then + if [ -e "$CONTAINER_ENV_BACKUP" ]; then + rm -f "$CONTAINER_ENV_PATH" + mv "$CONTAINER_ENV_BACKUP" "$CONTAINER_ENV_PATH" + else + rm -f "$CONTAINER_ENV_PATH" + fi + export CONTAINER_ENV_CREATED_BY_TEST=0 + elif [ -e "$CONTAINER_ENV_BACKUP" ]; then + mv "$CONTAINER_ENV_BACKUP" "$CONTAINER_ENV_PATH" + fi } @test "--container overrides container command from config" { @@ -42,8 +67,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 /run/.containerenv - 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 /run/.containerenv - ignoring configured container command"* ]] +} + teardown() { if [ -f "$TEST_CONFIG" ]; then rm "$TEST_CONFIG" fi + restore_container_env_marker } From 7d495a22a0e109305b28630d2d69a5ab73abb436 Mon Sep 17 00:00:00 2001 From: Fredrik Reveny Date: Fri, 7 Nov 2025 11:51:06 +0100 Subject: [PATCH 3/3] Make container marker path configurable for tests --- shell-bun.sh | 5 +++-- tests/test_container_override_flag.bats | 25 +++++-------------------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/shell-bun.sh b/shell-bun.sh index 355a118..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,8 +329,8 @@ parse_config() { if [[ $CLI_CONTAINER_OVERRIDE -eq 1 ]]; then CONTAINER_COMMAND="$CLI_CONTAINER_COMMAND" else - if [[ -f /run/.containerenv && -n "$CONFIG_CONTAINER_COMMAND" ]]; then - print_color "$YELLOW" "Detected /run/.containerenv - ignoring configured 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" diff --git a/tests/test_container_override_flag.bats b/tests/test_container_override_flag.bats index b0d3362..dee2328 100644 --- a/tests/test_container_override_flag.bats +++ b/tests/test_container_override_flag.bats @@ -4,31 +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 CONTAINER_ENV_PATH="/run/.containerenv" - export CONTAINER_ENV_BACKUP="${CONTAINER_ENV_PATH}.bats-backup" - export CONTAINER_ENV_CREATED_BY_TEST=0 + export SHELL_BUN_CONTAINER_MARKER_FILE="$BATS_TEST_TMPDIR/containerenv" + export CONTAINER_ENV_PATH="$SHELL_BUN_CONTAINER_MARKER_FILE" } create_container_env_marker() { - if [ -e "$CONTAINER_ENV_PATH" ] && [ ! -e "$CONTAINER_ENV_BACKUP" ]; then - mv "$CONTAINER_ENV_PATH" "$CONTAINER_ENV_BACKUP" - fi : > "$CONTAINER_ENV_PATH" - export CONTAINER_ENV_CREATED_BY_TEST=1 } restore_container_env_marker() { - if [ "${CONTAINER_ENV_CREATED_BY_TEST:-0}" -eq 1 ]; then - if [ -e "$CONTAINER_ENV_BACKUP" ]; then - rm -f "$CONTAINER_ENV_PATH" - mv "$CONTAINER_ENV_BACKUP" "$CONTAINER_ENV_PATH" - else - rm -f "$CONTAINER_ENV_PATH" - fi - export CONTAINER_ENV_CREATED_BY_TEST=0 - elif [ -e "$CONTAINER_ENV_BACKUP" ]; then - mv "$CONTAINER_ENV_BACKUP" "$CONTAINER_ENV_PATH" - fi + rm -f "$CONTAINER_ENV_PATH" } @test "--container overrides container command from config" { @@ -86,7 +71,7 @@ CONFIG restore_container_env_marker [ "$status" -eq 0 ] - [[ "$output" == *"Detected /run/.containerenv - ignoring configured container command"* ]] + [[ "$output" == *"Detected $CONTAINER_ENV_PATH - ignoring configured container command"* ]] [[ "$output" == *"container source: none"* ]] } @@ -110,7 +95,7 @@ CONFIG [ "$status" -eq 0 ] [[ "$output" == *"container source: cli"* ]] - [[ "$output" != *"Detected /run/.containerenv - ignoring configured container command"* ]] + [[ "$output" != *"Detected $CONTAINER_ENV_PATH - ignoring configured container command"* ]] } teardown() {