From 8807bf6c9b678bf404b169ce296e2ddd7b9226e8 Mon Sep 17 00:00:00 2001
From: Marcel Amirault <mamirault@gitlab.com>
Date: Tue, 1 Sep 2020 14:19:03 +0900
Subject: [PATCH] Test only changed docs in merged results pipelines

Check what type of pipeline is running. If it's a merged
results pipeline, use CI variables to determine the
merge-base. Use git diff with merge-base to see what files
changes, filtering on markdown files, then run vale and
markdownlint on only those changed files.
---
 scripts/lint-doc.sh | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/scripts/lint-doc.sh b/scripts/lint-doc.sh
index 72e6334d0fcef..e4e0e21ca15b2 100755
--- a/scripts/lint-doc.sh
+++ b/scripts/lint-doc.sh
@@ -55,7 +55,18 @@ then
   ((ERRORCODE++))
 fi
 
-MD_DOC_PATH=${MD_DOC_PATH:-doc}
+# Run Vale and Markdownlint only on changed files. Only works on merged results
+# pipelines, so first checks if a merged results CI variable is present. If not present,
+# runs test on all files.
+if [ -z "${CI_MERGE_REQUEST_TARGET_BRANCH_SHA}" ]
+then
+  MD_DOC_PATH=${MD_DOC_PATH:-doc}
+  echo "Merge request pipeline (detached) detected. Testing all files."
+else
+  MERGE_BASE=$(git merge-base ${CI_MERGE_REQUEST_TARGET_BRANCH_SHA} ${CI_MERGE_REQUEST_SOURCE_BRANCH_SHA})
+  MD_DOC_PATH=$(git diff --name-only "${MERGE_BASE}..${CI_MERGE_REQUEST_SOURCE_BRANCH_SHA}" '*.md')
+  echo -e "Merged results pipeline detected. Testing only the following files:\n${MD_DOC_PATH}"
+ fi
 
 function run_locally_or_in_docker() {
   local cmd=$1
-- 
GitLab