diff --git a/lib/functions/artifacts/artifact-armbian-bsp-cli.sh b/lib/functions/artifacts/artifact-armbian-bsp-cli.sh index 7ca60a33a4..213cdf1c56 100644 --- a/lib/functions/artifacts/artifact-armbian-bsp-cli.sh +++ b/lib/functions/artifacts/artifact-armbian-bsp-cli.sh @@ -52,10 +52,9 @@ function artifact_armbian-bsp-cli_prepare_version() { "${KERNEL_IMAGE_TYPE}" # /etc/armbian-release "${VENDOR}" # /etc/armbian-release ) - declare hash_vars="undetermined" - hash_vars="$(echo "${vars_to_hash[@]}" | sha256sum | cut -d' ' -f1)" - vars_config_hash="${hash_vars}" - declare var_config_hash_short="${vars_config_hash:0:${short_hash_size}}" + declare hash_variables="undetermined" # will be set by calculate_hash_for_variables(), which normalizes the input + calculate_hash_for_variables "${vars_to_hash[@]}" + declare var_config_hash_short="${hash_variables:0:${short_hash_size}}" declare -a dirs_to_hash=( "${SRC}/packages/bsp/common" # common stuff diff --git a/lib/functions/artifacts/artifact-armbian-desktop.sh b/lib/functions/artifacts/artifact-armbian-desktop.sh index 0ec902124c..5d241e867c 100644 --- a/lib/functions/artifacts/artifact-armbian-desktop.sh +++ b/lib/functions/artifacts/artifact-armbian-desktop.sh @@ -10,6 +10,11 @@ function artifact_armbian-desktop_config_dump() { artifact_input_variables[RELEASE]="${RELEASE}" artifact_input_variables[DESKTOP_ENVIRONMENT]="${DESKTOP_ENVIRONMENT}" + + # Include a hash of the results of aggregation. + declare aggregation_hash="undetermined" + aggregation_hash="$(echo "${AGGREGATED_DESKTOP_POSTINST} ${AGGREGATED_DESKTOP_CREATE_DESKTOP_PACKAGE} ${AGGREGATED_PACKAGES_DESKTOP_COMMA}" | sha256sum | cut -d' ' -f1)" + artifact_input_variables[DESKTOP_AGGREGATION_RESULTS]="${aggregation_hash}" } function artifact_armbian-desktop_prepare_version() { @@ -32,10 +37,9 @@ function artifact_armbian-desktop_prepare_version() { "${AGGREGATED_DESKTOP_CREATE_DESKTOP_PACKAGE}" "${AGGREGATED_PACKAGES_DESKTOP_COMMA}" ) - declare hash_vars="undetermined" - hash_vars="$(echo "${vars_to_hash[@]}" | sha256sum | cut -d' ' -f1)" - vars_config_hash="${hash_vars}" - declare var_config_hash_short="${vars_config_hash:0:${short_hash_size}}" + declare hash_variables="undetermined" # will be set by calculate_hash_for_variables()... + do_normalize_src_path="no" calculate_hash_for_variables "${vars_to_hash[@]}" # ... where do_normalize_src_path="yes" is the default + declare var_config_hash_short="${hash_variables:0:${short_hash_size}}" # get the hashes of the lib/ bash sources involved... declare hash_files="undetermined" diff --git a/lib/functions/artifacts/artifact-kernel.sh b/lib/functions/artifacts/artifact-kernel.sh index 92a5d91545..aa12141aa7 100644 --- a/lib/functions/artifacts/artifact-kernel.sh +++ b/lib/functions/artifacts/artifact-kernel.sh @@ -138,10 +138,9 @@ function artifact_kernel_prepare_version() { "${NAME_KERNEL}" "${SRC_LOADADDR}" ) - declare hash_vars="undetermined" - hash_vars="$(echo "${vars_to_hash[@]}" | sha256sum | cut -d' ' -f1)" - vars_config_hash="${hash_vars}" - declare var_config_hash_short="${vars_config_hash:0:${short_hash_size}}" + declare hash_variables="undetermined" # will be set by calculate_hash_for_variables(), which normalizes the input + calculate_hash_for_variables "${vars_to_hash[@]}" + declare var_config_hash_short="${hash_variables:0:${short_hash_size}}" # Hash the extension hooks declare -a extension_hooks_to_hash=("pre_package_kernel_image") diff --git a/lib/functions/artifacts/artifact-uboot.sh b/lib/functions/artifacts/artifact-uboot.sh index 61f2263251..c1568358fe 100644 --- a/lib/functions/artifacts/artifact-uboot.sh +++ b/lib/functions/artifacts/artifact-uboot.sh @@ -80,12 +80,13 @@ function artifact_uboot_prepare_version() { # Hash variables that affect the build and package of u-boot declare -a vars_to_hash=( - "${BOOTDELAY}" "${UBOOT_DEBUGGING}" "${UBOOT_TARGET_MAP}" + "${BOOTDELAY}" "${UBOOT_DEBUGGING}" "${UBOOT_TARGET_MAP}" # general for all families + "${BOOT_SCENARIO}" "${BOOT_SUPPORT_SPI}" "${BOOT_SOC}" # rockchip stuff, sorry. + "${ATF_COMPILE}" "${ATFBRANCH}" "${ATFPATCHDIR}" # arm-trusted-firmware stuff ) - declare hash_vars="undetermined" - hash_vars="$(echo "${vars_to_hash[@]}" | sha256sum | cut -d' ' -f1)" - declare vars_config_hash="${hash_vars}" - declare var_config_hash_short="${vars_config_hash:0:${short_hash_size}}" + declare hash_variables="undetermined" # will be set by calculate_hash_for_variables(), which normalizes the input + calculate_hash_for_variables "${vars_to_hash[@]}" + declare var_config_hash_short="${hash_variables:0:${short_hash_size}}" # get the hashes of the lib/ bash sources involved... declare hash_files="undetermined" diff --git a/lib/functions/general/hash-files.sh b/lib/functions/general/hash-files.sh index 1e4f283940..02bd3cbb6d 100644 --- a/lib/functions/general/hash-files.sh +++ b/lib/functions/general/hash-files.sh @@ -99,3 +99,22 @@ function calculate_hash_for_function_bodies() { fi return 0 } + +# helper, for calculating hash of variables. +# such variables might contain paths, so we need to relativize them to SRC. +# outer scope: declare hash_variables="undetermined" +function calculate_hash_for_variables() { + hash_variables="undetermined" # outer scope + declare -a values_to_hash=("$@") + + declare all_values="${values_to_hash[*]}" # expand... + if [[ "${do_normalize_src_path:-"yes"}" == "yes" ]]; then + all_values="${all_values//${SRC}/}" # remove all occurences of ${SRC} from all_values + fi + + hash_variables="$(echo "${all_values}" | sha256sum | cut -d' ' -f1)" # outer scope + display_alert "calculate_hash_for_variables normalized" "${all_values}" "debug" + display_alert "calculate_hash_for_variables hashed" "${hash_variables}" "debug" + + return 0 +}