diff --git a/.azure-pipelines/azure-pipelines-UpgrateVersion.yml b/.azure-pipelines/azure-pipelines-UpgrateVersion.yml index 9850e51b8c1f..62b188e56a27 100644 --- a/.azure-pipelines/azure-pipelines-UpgrateVersion.yml +++ b/.azure-pipelines/azure-pipelines-UpgrateVersion.yml @@ -57,6 +57,14 @@ stages: pool: vmImage: 'ubuntu-20.04' steps: + - script: | + if [ -z "$(which gh)" ]; then + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0 + sudo apt-add-repository https://cli.github.com/packages + sudo apt update + sudo apt install gh + fi + displayName: 'Install gh' - checkout: self displayName: 'Checkout code' - download: current @@ -83,6 +91,53 @@ stages: done git diff files/build/versions displayName: 'Freeze Versions' + - script: | + if [ -z "$GIT_USER" ]; then + echo "Skipped to send the pull request, GIT_USER not set." + exit 0 + fi + GIT_STATUS=$(git status --porcelain files/build/versions) + if [ -z "$GIT_STATUS" ]; then + echo "Skipped to send the pull request, no version change in files/build/versions" + exit 0 + fi + if [ ! -d "$HOME" ]; then + sudo mkdir -p $HOME + sudo chown -R $(id -un):$(id -gn) $HOME + fi + SOURCE_BRANCH=$(Build.SourceBranch) + REPO_NAME=$(Build.Repository.Name) + [ -z "$GIT_REPO" ] && GIT_REPO=${REPO_NAME#*/} + BRANCH_NAME=repd/versions/${SOURCE_BRANCH#refs/heads/} + echo '#!/bin/bash' > git_env_password.sh + echo 'echo $GIT_PASSWORD' >> git_env_password.sh + chmod a+x git_env_password.sh + export GIT_ASKPASS=./git_env_password.sh + + git config user.name $GIT_USER + git config credential.https://github.com.username $GIT_USER + git add files/build/versions + git commit -m "[ci/build]: Upgrade SONiC package versions" + git checkout -b $BRANCH_NAME + git remote add remote https://github.com/$GIT_USER/$GIT_REPO + git push remote HEAD:refs/heads/$BRANCH_NAME -f + git branch -u remote/$BRANCH_NAME + + echo $GIT_PASSWORD | gh auth login --with-token + TITLE="Upgrade SONiC Versions" + BODY="Upgrade SONiC Versions" + RET=0 + if ! gh pr create -t "$TITLE" -b "$BODY" -B $(Build.SourceBranch) -R $(Build.Repository.Name) > pr.log 2>&1; then + if ! grep -q "already exists" pr.log; then + RET=1 + fi + fi + cat pr.log + exit $RET + env: + GIT_USER: $(GIT_USER) + GIT_PASSWORD: $(GIT_PASSWORD) + displayName: 'Send Pull Request' - publish: $(System.DefaultWorkingDirectory)/files/build/versions artifact: 'sonic-buildimage.versions' displayName: 'Archive SONiC versions' diff --git a/Makefile.work b/Makefile.work index 56660f168fe6..1835c8a65651 100644 --- a/Makefile.work +++ b/Makefile.work @@ -136,7 +136,7 @@ $(shell CONFIGURED_ARCH=$(CONFIGURED_ARCH) MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QE $(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-* src/sonic-build-hooks/hooks/* | sha1sum | awk '{print substr($$1,0,11);}') +SLAVE_BASE_TAG = $(shell cat $(SLAVE_DIR)/Dockerfile $(SLAVE_DIR)/buildinfo/versions/versions-* | 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 := \ diff --git a/src/sonic-build-hooks/hooks/git b/src/sonic-build-hooks/hooks/git deleted file mode 100755 index 644a01d5fe1e..000000000000 --- a/src/sonic-build-hooks/hooks/git +++ /dev/null @@ -1,76 +0,0 @@ -#!/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 "$@"