helmfile/test/integration/test-cases/issue-2280.sh

81 lines
2.8 KiB
Bash

#!/usr/bin/env bash
# Test for issue #2280: --color flag conflict with Helm 4
# In Helm 4, the --color flag is parsed by Helm before reaching the helm-diff plugin
# The fix removes --color/--no-color flags and uses HELM_DIFF_COLOR env var instead
# Only run this test on Helm 4
if [ "${HELMFILE_HELM4}" != "1" ]; then
info "Skipping issue-2280 test (Helm 4 only)"
return 0
fi
issue_2280_input_dir="${cases_dir}/issue-2280/input"
issue_2280_tmp_dir=$(mktemp -d)
cd "${issue_2280_input_dir}"
test_start "issue-2280: --color flag with Helm 4"
# Test 1: Install the chart first
info "Installing chart for issue #2280 test"
${helmfile} -f helmfile.yaml apply --suppress-diff > "${issue_2280_tmp_dir}/install.txt" 2>&1
code=$?
if [ $code -ne 0 ]; then
cat "${issue_2280_tmp_dir}/install.txt"
rm -rf "${issue_2280_tmp_dir}"
fail "Failed to install chart"
fi
info "Chart installed successfully"
# Test 2: Run diff with --color and --context flags
# This is the exact scenario from issue #2280
# Before the fix, --color flag would be parsed by Helm 4 before reaching helm-diff plugin,
# consuming --context as its value, resulting in error: invalid color mode "--context"
# After the fix, --color is removed and HELM_DIFF_COLOR env var is set instead
info "Running diff with --color and --context flags"
${helmfile} -f helmfile.yaml diff --color --context 3 > "${issue_2280_tmp_dir}/diff-color.txt" 2>&1
code=$?
# Check for the error from issue #2280
if grep -q "invalid color mode" "${issue_2280_tmp_dir}/diff-color.txt"; then
cat "${issue_2280_tmp_dir}/diff-color.txt"
rm -rf "${issue_2280_tmp_dir}"
fail "Issue #2280 regression: --color flag consumed --context argument"
fi
# diff command should succeed (exit code 0 or 2 with --detailed-exitcode)
if [ $code -ne 0 ]; then
# Check if it's a diff-related error (not the color mode error)
if ! grep -q "Comparing release" "${issue_2280_tmp_dir}/diff-color.txt"; then
cat "${issue_2280_tmp_dir}/diff-color.txt"
rm -rf "${issue_2280_tmp_dir}"
fail "Diff command failed unexpectedly"
fi
fi
info "SUCCESS: --color flag did not interfere with --context flag"
# Test 3: Also test with --no-color
info "Running diff with --no-color and --context flags"
${helmfile} -f helmfile.yaml diff --no-color --context 3 > "${issue_2280_tmp_dir}/diff-no-color.txt" 2>&1
code=$?
if grep -q "invalid color mode" "${issue_2280_tmp_dir}/diff-no-color.txt"; then
cat "${issue_2280_tmp_dir}/diff-no-color.txt"
rm -rf "${issue_2280_tmp_dir}"
fail "Issue #2280 regression: --no-color flag consumed --context argument"
fi
info "SUCCESS: --no-color flag did not interfere with --context flag"
# Cleanup
${helm} uninstall test-release-2280 --namespace default 2>/dev/null || true
rm -rf "${issue_2280_tmp_dir}"
test_pass "issue-2280: --color flag with Helm 4"