CI: Fix the getting sources

Fix the getting sources for a case if the required commit is missed
    in the remote submodule repository.

    Also add more diagnostic.
pull/783/head
Anton Maklakov 2017-07-03 16:28:58 +08:00
rodzic 6d03d42d2f
commit f194a6bdba
2 zmienionych plików z 46 dodań i 8 usunięć

Wyświetl plik

@ -10,32 +10,54 @@
# This is a "best of both worlds" for GIT_STRATEGY: fetch & GIT_STRATEGY: clone # This is a "best of both worlds" for GIT_STRATEGY: fetch & GIT_STRATEGY: clone
# #
# -----------------------------------------------------------------------------
# Common bash
if [[ ! -z ${DEBUG} ]]; then
set -x # Activate the expand mode if DEBUG is anything but empty.
fi
set -o errexit # Exit if command failed.
set -o pipefail # Exit if pipe failed.
set -o nounset # Exit if variable not set.
die() { die() {
echo "${1:-"Unknown Error"}" 1>&2 echo "${1:-"Unknown Error"}" 1>&2
exit 1 exit ${2:-1}
} }
# -----------------------------------------------------------------------------
[ -z ${CI_PROJECT_DIR} ] && die "This internal script should only be run by a Gitlab CI runner." [ -z ${CI_PROJECT_DIR} ] && die "This internal script should only be run by a Gitlab CI runner."
[ -z ${GITLAB_SSH_SERVER} ] && die "GITLAB_SSH_SERVER should be defined to run mirror-submodule-update.sh"
[ -z ${CI_REPOSITORY_URL} ] && die "CI_REPOSITORY_URL should be defined to run mirror-submodule-update.sh"
[ -z ${CI_COMMIT_SHA} ] && die "CI_COMMIT_SHA should be defined to run mirror-submodule-update.sh"
[[ ( -z ${IS_PRIVATE} ) && ( -z ${IS_PUBLIC} ) ]] && die "IS_PRIVATE or IS_PUBLIC should be defined in the CI environment." [[ ( -z ${IS_PRIVATE} ) && ( -z ${IS_PUBLIC} ) ]] && die "IS_PRIVATE or IS_PUBLIC should be defined in the CI environment."
ERR_CANNOT_UPDATE=13
SCRIPT_DIR=$(dirname -- "${0}") SCRIPT_DIR=$(dirname -- "${0}")
update_submodules() { update_submodules() {
if [ "${IS_PRIVATE}" ]; then if [ "${IS_PRIVATE}" ]; then
${SCRIPT_DIR}/mirror-submodule-update.sh ${SCRIPT_DIR}/mirror-submodule-update.sh || return $?
else else
git submodule foreach "git submodule deinit --force ."
git submodule deinit --force .
git submodule update --init --recursive git submodule update --init --recursive
fi fi
} }
DELETED_FILES=$(mktemp --tmpdir -d tmp_XXXX)
del_files() { del_files() {
DELETED_FILES=$(mktemp --tmpdir -d tmp_XXXX)
# if non-empty # if non-empty
[ "$(ls -A .)" ] && ( shopt -s dotglob; mv * "${DELETED_FILES}/" ) [ "$(ls -A .)" ] && ( shopt -s dotglob; mv * "${DELETED_FILES}/" )
trap 'del_files_rollback' ERR
} }
del_files_confirm() { del_files_confirm() {
rm -rf "${DELETED_FILES}" [ -d "${DELETED_FILES}" ] && rm -rf "${DELETED_FILES}"
trap ERR
}
del_files_rollback() {
[ "$(ls -A .)" ] && [ "$(ls -A ${DELETED_FILES}/)" ] && ( shopt -s dotglob; rm -rf * )
[ "$(ls -A ${DELETED_FILES}/)" ] && ( shopt -s dotglob; mv "${DELETED_FILES}/"* . )
[ -d "${DELETED_FILES}" ] && rmdir "${DELETED_FILES}"
trap ERR
} }
RETRIES=10 RETRIES=10
@ -47,6 +69,9 @@ for try in `seq $RETRIES`; do
update_submodules && update_submodules &&
echo "Fetch strategy submodules succeeded" && echo "Fetch strategy submodules succeeded" &&
exit 0 exit 0
git submodule foreach "git reset --hard HEAD && git submodule deinit --force ."
git submodule deinit --force .
done done
# Then we use the clean way. # Then we use the clean way.
@ -60,8 +85,19 @@ for try in `seq $RETRIES`; do
echo "Clone strategy succeeded" && echo "Clone strategy succeeded" &&
del_files_confirm && del_files_confirm &&
exit 0 exit 0
ERR_RES=$?
del_files_rollback
echo "Clean clone failed..." echo "Clean clone failed..."
if [ $ERR_RES -eq $ERR_CANNOT_UPDATE ]; then
echo "###"
echo "### If you have updated one of the submodules,"
echo "### you have to synchronize the local mirrors manually"
echo "###"
echo "### https://gitlab.espressif.cn:6688/idf/esp-idf/wikis/ci-use-guide#submodule-mirroring-for-private-branches"
echo "###"
die "Failed to clone repo & submodules together" $ERR_RES
fi
done done
die "Failed to clone repo & submodules together" die "Failed to clone repo & submodules together"

Wyświetl plik

@ -26,6 +26,8 @@ die() {
[ -z ${GITLAB_SSH_SERVER:-} ] && die "Have to set up GITLAB_SSH_SERVER environment variable" [ -z ${GITLAB_SSH_SERVER:-} ] && die "Have to set up GITLAB_SSH_SERVER environment variable"
ERR_CANNOT_UPDATE=13
REPO_DIR=${1:-"${PWD}"} REPO_DIR=${1:-"${PWD}"}
REPO_DIR=$(readlink -f -- "${REPO_DIR}") REPO_DIR=$(readlink -f -- "${REPO_DIR}")
@ -70,7 +72,7 @@ done
# 3 # 3
# Getting submodules of the current repository from the local mirrors # Getting submodules of the current repository from the local mirrors
git submodule update git submodule update || exit $ERR_CANNOT_UPDATE
# 4 # 4
# Replacing URLs for each sub-submodule. # Replacing URLs for each sub-submodule.