From 8f4828136504d56217c95b0e6fce1a58f04a2df8 Mon Sep 17 00:00:00 2001 From: benjaminch Date: Fri, 28 Aug 2026 14:26:48 +0200 Subject: [PATCH] fix(demo): support empty engine image overrides on macOS Bash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoid expanding an empty engine_image_overrides array under set -u, which causes qovery demo up to files on macOS’s Bash 3.2 with an “unbound variable” error. Add a regression test for the nounset-safe expansion. --- cmd/demo_scripts/create_qovery_demo.sh | 4 ++-- cmd/demo_up_local_overrides_test.go | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/cmd/demo_scripts/create_qovery_demo.sh b/cmd/demo_scripts/create_qovery_demo.sh index 38b1e5fb..0d1b5f00 100755 --- a/cmd/demo_scripts/create_qovery_demo.sh +++ b/cmd/demo_scripts/create_qovery_demo.sh @@ -154,7 +154,7 @@ install_or_upgrade_helm_charts() { --set services.qovery.qovery-cluster-agent.enabled=false \ --set services.qovery.qovery-engine.enabled=false \ --set services.qovery.qovery-operator.enabled=false \ - "${engine_image_overrides[@]}" qovery "$chart_source" + "${engine_image_overrides[@]+"${engine_image_overrides[@]}"}" qovery "$chart_source" fi for i in $(seq 1 3); do @@ -162,7 +162,7 @@ install_or_upgrade_helm_charts() { helm upgrade --install --create-namespace ${HELM_DEBUG} --timeout=15m -n qovery "${helm_values_args[@]}" --wait --atomic \ --set services.ingress.envoy-gateway-crd.enabled=false \ --set services.qovery.qovery-operator.enabled=false \ - "${engine_image_overrides[@]}" qovery "$chart_source" && break + "${engine_image_overrides[@]+"${engine_image_overrides[@]}"}" qovery "$chart_source" && break set +x echo "Install failed. Retrying in 10 seconds. To let the cluster initialize" sleep 10 diff --git a/cmd/demo_up_local_overrides_test.go b/cmd/demo_up_local_overrides_test.go index 94f5e77b..58baff03 100644 --- a/cmd/demo_up_local_overrides_test.go +++ b/cmd/demo_up_local_overrides_test.go @@ -3,6 +3,7 @@ package cmd import ( "os" "path/filepath" + "strings" "testing" ) @@ -32,3 +33,11 @@ func TestDemoEngineImageOverride(t *testing.T) { t.Fatalf("expected docker.io/library/qovery-demo-engine:local, got %s:%s", repository, tag) } } + +func TestDemoScriptUsesNounsetSafeEmptyEngineImageOverrides(t *testing.T) { + const nounsetSafeOverrides = `"${engine_image_overrides[@]+"${engine_image_overrides[@]}"}"` + + if count := strings.Count(string(demoScriptsCreate), nounsetSafeOverrides); count != 2 { + t.Fatalf("expected both Helm invocations to use a Bash 3.2 nounset-safe engine image override expansion, found %d", count) + } +}