diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 07348238d..09b0052c5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,9 +1,17 @@ image: registry.gitlab.gnome.org/gnome/mutter/master:v1 stages: + - review - build - test +check-commit-log: + stage: review + script: + - ./.gitlab-ci/check-commit-log.sh + only: + - merge_requests + build-mutter: stage: build script: @@ -14,6 +22,9 @@ build-mutter: expire_in: 1 day paths: - build + only: + - merge_requests + - /^.*$/ test-mutter: stage: test @@ -28,3 +39,6 @@ test-mutter: - > dbus-run-session -- xvfb-run -s '+iglx -noreset' meson test -C build --no-rebuild -t 10 --verbose --no-stdsplit --wrap catchsegv + only: + - merge_requests + - /^.*$/ diff --git a/.gitlab-ci/check-commit-log.sh b/.gitlab-ci/check-commit-log.sh new file mode 100755 index 000000000..cc3bcee60 --- /dev/null +++ b/.gitlab-ci/check-commit-log.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +if [ -z "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then + echo Cannot review non-merge request + exit 1 +fi + +git fetch $CI_MERGE_REQUEST_PROJECT_URL.git $CI_MERGE_REQUEST_TARGET_BRANCH_NAME + +branch_point=$(git merge-base HEAD FETCH_HEAD) + +commits=$(git log --format='format:%H' $branch_point..$CI_COMMIT_SHA) + +if [ -z "$commits" ]; then + echo Commit range empty + exit 1 +fi + +function commit_message_has_url() { + commit=$1 + commit_message=$(git show -s --format='format:%b' $commit) + echo "$commit_message" | grep -qe "\($CI_MERGE_REQUEST_PROJECT_URL/\(issues\|merge_requests\)/[0-9]\+\|https://bugzilla.gnome.org/show_bug.cgi?id=[0-9]\+\)" + return $? +} + +for commit in $commits; do + if ! commit_message_has_url $commit; then + echo "Missing merge request or issue URL on commit $(echo $commit | cut -c -8)" + exit 1 + fi +done