From 629a342919d89e19eac6e6b795055455dba09f84 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Fri, 8 Jun 2018 19:41:18 +0800 Subject: [PATCH] ci: remove stale submodules after checkout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When ‘fetch’ strategy is used, Gitlab removes untracked files before checking out new revision. However if the new revision doesn’t include some of the submodules which were present in the old revision, such submodule directories would not be removed by the checkout. This extra step ensures that these stale submodules are removed. --- .gitlab-ci.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8e5d08961..4c2e1cdad 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,12 +29,26 @@ variables: APPLY_BOT_FILTER_SCRIPT: "$CI_PROJECT_DIR/tools/ci/apply_bot_filter.py" CHECKOUT_REF_SCRIPT: "$CI_PROJECT_DIR/tools/ci/checkout_project_ref.py" +# When 'fetch' strategy is used, Gitlab removes untracked files before checking out +# new revision. However if the new revision doesn't include some of the submodules +# which were present in the old revision, such submodule directories would not be +# removed by the checkout. This extra step ensures that these stale submodules +# are removed. +.git_clean_stale_submodules: &git_clean_stale_submodules > + find . -name '.git' -not -path './.git' -printf '%P\n' + | sed 's|/.git||' + | xargs -I {} sh -c ' + grep -q {} .gitmodules + || (echo "Removing {}, has .git directory but not in .gitmodules file" + && rm -rf {});' + # before each job, we need to check if this job is filtered by bot stage/job filter .apply_bot_filter: &apply_bot_filter python $APPLY_BOT_FILTER_SCRIPT || exit 0 before_script: - source tools/ci/setup_python.sh + - *git_clean_stale_submodules # apply bot filter in before script - *apply_bot_filter # add gitlab ssh key @@ -56,6 +70,7 @@ before_script: .do_nothing_before: before_script: &do_nothing_before - source tools/ci/setup_python.sh + - *git_clean_stale_submodules # apply bot filter in before script - *apply_bot_filter - echo "Not setting up GitLab key, not fetching submodules" @@ -64,6 +79,7 @@ before_script: .add_gitlab_key_before: before_script: &add_gitlab_key_before - source tools/ci/setup_python.sh + - *git_clean_stale_submodules # apply bot filter in before script - *apply_bot_filter - echo "Not fetching submodules"