flatcar-scripts/pkg_auto/generate_config.sh
Krzesimir Nowak 0d06b737ac pkg-auto: Disable shellcheck reference warnings
Two warnings, SC2034 and SC2178, pop up very often with the references
- shellcheck handles them poorly and produces a ton of bogus warnings
about them. Silence the warnings and drop most of the "shellcheck
disable" clauses.
2025-04-29 09:43:21 +02:00

127 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
##
## Generate a config.
##
## Parameters:
## -a: aux directory
## -d: debug package - list many times
## -h: this help
## -i: override SDK image, it should be a valid docker image with an
## optional tag
## -n: new base
## -o: old base
## -r: reports directory
## -s: scripts directory
## -x: cleanup opts
##
## Positional:
## 1: path for config file
##
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/impl/util.sh"
source "${PKG_AUTO_IMPL_DIR}/cleanups.sh"
gc_aux_directory=''
gc_new_base=''
gc_old_base=''
gc_reports_directory=''
gc_scripts_directory=''
gc_cleanup_opts=''
gc_image_override=''
gc_debug_packages=()
declare -A opt_map
opt_map=(
['-a']=gc_aux_directory
['-i']=gc_image_override
['-n']=gc_new_base
['-o']=gc_old_base
['-r']=gc_reports_directory
['-s']=gc_scripts_directory
['-x']=gc_cleanup_opts
)
declare -a gc_arches
get_valid_arches gc_arches
while [[ ${#} -gt 0 ]]; do
case ${1} in
-d)
if [[ -z ${2:-} ]]; then
fail 'missing value for -d'
fi
gc_debug_packages+=( "${2}" )
shift 2
;;
-h)
print_help
exit 0
;;
--)
shift
break
;;
-*)
var_name=${opt_map["${1}"]:-}
if [[ -z ${var_name} ]]; then
fail "unknown flag '${1}'"
fi
if [[ -z ${2:-} ]]; then
fail 'missing value for -w'
fi
declare -n ref="${var_name}"
ref=${2}
unset -n ref
unset var_name
shift 2
;;
*)
break
;;
esac
done
join_by gc_debug_packages_csv ',' "${gc_debug_packages[@]}"
declare -a pairs
pairs=(
'scripts' gc_scripts_directory
'aux' gc_aux_directory
'reports' gc_reports_directory
'old-base' gc_old_base
'new-base' gc_new_base
'cleanups' gc_cleanup_opts
'sdk-image-override' gc_image_override
'debug-packages' gc_debug_packages_csv
)
if [[ ${#} -ne 1 ]]; then
fail 'expected one positional parameters: a path for the config'
fi
config=${1}; shift
{
opt_idx=0
name_idx=1
while [[ ${name_idx} -lt "${#pairs[@]}" ]]; do
opt=${pairs["${opt_idx}"]}
name=${pairs["${name_idx}"]}
opt_idx=$((opt_idx + 2))
name_idx=$((name_idx + 2))
declare -n ref="${name}"
if [[ -n ${ref:-} ]]; then
printf '%s: %s\n' "${opt}" "${ref}"
fi
unset -n ref
done
unset opt_idx name_idx
} >"${config}"
info 'Done, but note that the config is not guaranteed to be valid!'