Version control git (#6562)
* support reproduceable build for git clone Signed-off-by: shilongliu <shilongliu@microsoft.com> * fix * bug-fix Signed-off-by: shilongliu <shilongliu@microsoft.com> * bug-fix Signed-off-by: shilongliu <shilongliu@microsoft.com> Co-authored-by: shilongliu <shilongliu@microsoft.com>
This commit is contained in:
parent
984c1cd209
commit
e387531e1b
@ -114,7 +114,7 @@ $(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) j2 $(SLAVE_DIR)/Dockerfile.user.j2 >
|
||||
$(shell BUILD_SLAVE=y scripts/prepare_docker_buildinfo.sh $(SLAVE_BASE_IMAGE) $(SLAVE_DIR)/Dockerfile $(CONFIGURED_ARCH) "" $(BLDENV))
|
||||
|
||||
# Add the versions in the tag, if the version change, need to rebuild the slave
|
||||
SLAVE_BASE_TAG = $(shell cat $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* | sha1sum | awk '{print substr($$1,0,11);}')
|
||||
SLAVE_BASE_TAG = $(shell cat $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* src/sonic-build-hooks/hooks/* | sha1sum | awk '{print substr($$1,0,11);}')
|
||||
SLAVE_TAG = $(shell cat $(SLAVE_DIR)/Dockerfile.user $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* | sha1sum | awk '{print substr($$1,0,11);}')
|
||||
|
||||
OVERLAY_MODULE_CHECK := \
|
||||
|
76
src/sonic-build-hooks/hooks/git
Executable file
76
src/sonic-build-hooks/hooks/git
Executable file
@ -0,0 +1,76 @@
|
||||
#!/bin/bash
|
||||
|
||||
parse_config(){
|
||||
. /usr/local/share/buildinfo/scripts/buildinfo_base.sh
|
||||
REAL_COMMAND=$(get_command git)
|
||||
|
||||
version_file=$VERSION_PATH/versions-git
|
||||
new_version_file=$BUILD_VERSION_PATH/versions-git
|
||||
|
||||
MODE_CLONE=0
|
||||
# parse input parameters
|
||||
for i in "$@"
|
||||
do
|
||||
if [[ $i == "clone" ]];then
|
||||
MODE_CLONE=1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
get_clone_path(){
|
||||
# get paremater of clone path
|
||||
while (( "$#" )); do
|
||||
case $1 in
|
||||
-b|--branch|--reference|--reference-if-able|-c|--config|--origin|-u|--upload-pack|-j|--jobs|--depth|--dissociate)
|
||||
shift 2
|
||||
;;
|
||||
clone|-l|--local|--no-hardlinks|-s|--shared|--dissociate|-q|--quiet|-v|--verbose|--progress|--server-option=*|--bare|--sparse|--filter=*|--template=*|--mirror|--reference|--shallow-*|--no-tags|--recurse-submodules*|--remote-submodules|--no-remote-submodules|--separate-git-dir*)
|
||||
shift 1
|
||||
;;
|
||||
*)
|
||||
if [[ $URL == "" ]];then
|
||||
URL=$1
|
||||
else
|
||||
clone_PATH=$1
|
||||
fi
|
||||
shift 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# if not specific clone path, get default clone path
|
||||
[ -z $clone_PATH ] && clone_PATH=`echo $URL | rev | awk -F/ '{print$1}' | rev | awk -F. '{print$1}'`
|
||||
}
|
||||
|
||||
main(){
|
||||
parse_config "$@"
|
||||
|
||||
# execute git.
|
||||
$REAL_COMMAND "$@"
|
||||
result=$?
|
||||
|
||||
# if sub command is not "clone", exit
|
||||
if [[ $MODE_CLONE != 1 ]];then
|
||||
exit $result
|
||||
fi
|
||||
|
||||
get_clone_path "$@"
|
||||
pushd $clone_PATH &> /dev/null
|
||||
commit_latest=`$REAL_COMMAND log -n 1 | head -n 1| awk '{print$2}'`
|
||||
[ -f $version_file ] && commit=`grep $URL $version_file | awk -F, '{print$2}'`
|
||||
|
||||
# control version or record version file
|
||||
if [[ $ENABLE_VERSION_CONTROL_GIT == "y" ]];then
|
||||
# control version
|
||||
[ ! -z $commit ] && $REAL_COMMAND reset --hard $commit &> /dev/null
|
||||
else
|
||||
# record version file
|
||||
echo "$URL==$commit_latest" >> $new_version_file
|
||||
sort $new_version_file -o $new_version_file -u &> /dev/null
|
||||
fi
|
||||
popd &> /dev/null
|
||||
|
||||
exit $result
|
||||
}
|
||||
|
||||
main "$@"
|
Loading…
Reference in New Issue
Block a user