From b9ecaa32349c0cd6f91aec3a294f3282279bb0af Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Mon, 30 May 2022 12:06:32 +0800 Subject: [PATCH] [Build]: Support to use the base image version when a package version not specified (#10971) Why I did it It is to fix issue: #10952 [Build]: Support to use the base image version when a package version not specified --- .../scripts/buildinfo_base.sh | 53 +++++++++++++++++++ .../scripts/pre_run_buildinfo | 1 + 2 files changed, 54 insertions(+) diff --git a/src/sonic-build-hooks/scripts/buildinfo_base.sh b/src/sonic-build-hooks/scripts/buildinfo_base.sh index e1ef80b01162..ff249dfdfb91 100755 --- a/src/sonic-build-hooks/scripts/buildinfo_base.sh +++ b/src/sonic-build-hooks/scripts/buildinfo_base.sh @@ -264,6 +264,59 @@ release_apt_installation_lock() rm -f $DPKG_INSTALLTION_LOCK_FILE } +update_preference_deb() +{ + local version_file="$VERSION_PATH/versions-deb" + if [ -f "$version_file" ]; then + rm -f $VERSION_DEB_PREFERENCE + for pacakge_version in $(cat "$version_file"); do + package=$(echo $pacakge_version | awk -F"==" '{print $1}') + version=$(echo $pacakge_version | awk -F"==" '{print $2}') + echo -e "Package: $package\nPin: version $version\nPin-Priority: 999\n\n" >> $VERSION_DEB_PREFERENCE + done + fi +} + +update_version_file() +{ + local version_name=$1 + local pre_version_file="$(ls $PRE_VERSION_PATH/${version_name}-* 2>/dev/null | head -n 1)" + local version_file="$VERSION_PATH/$1" + if [ ! -f "$pre_version_file" ]; then + return 0 + fi + local pacakge_versions="$(cat $pre_version_file)" + [ -f "$version_file" ] && pacakge_versions="$pacakge_versions $(cat $version_file)" + declare -A versions + for pacakge_version in $pacakge_versions; do + package=$(echo $pacakge_version | awk -F"==" '{print $1}') + version=$(echo $pacakge_version | awk -F"==" '{print $2}') + if [ -z "$package" ] || [ -z "$version" ]; then + continue + fi + versions[$package]=$version + done + + tmp_file=$(mktemp) + for package in "${!versions[@]}"; do + echo "$package==${versions[$package]}" >> $tmp_file + done + sort -u $tmp_file > $version_file + rm -f $tmp_file + + if [[ "${version_name}" == *-deb ]]; then + update_preference_deb + fi +} + +update_version_files() +{ + local version_names="versions-deb versions-py2 versions-py3" + for version_name in $version_names; do + update_version_file $version_name + done +} + ENABLE_VERSION_CONTROL_DEB=$(check_version_control "deb") ENABLE_VERSION_CONTROL_PY2=$(check_version_control "py2") ENABLE_VERSION_CONTROL_PY3=$(check_version_control "py3") diff --git a/src/sonic-build-hooks/scripts/pre_run_buildinfo b/src/sonic-build-hooks/scripts/pre_run_buildinfo index d9b927ab42f9..5a8f00b55ecb 100755 --- a/src/sonic-build-hooks/scripts/pre_run_buildinfo +++ b/src/sonic-build-hooks/scripts/pre_run_buildinfo @@ -11,6 +11,7 @@ mkdir -p $LOG_PATH [ -d $POST_VERSION_PATH ] && rm -rf $POST_VERSION_PATH mkdir -p $POST_VERSION_PATH collect_version_files $PRE_VERSION_PATH +update_version_files symlink_build_hooks set_reproducible_mirrors