diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index af003a1c..72c42e0b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,15 +1,31 @@ stages: + - commit_check - source_check - build variables: LINT_LOG: "eslint-report.txt" +.only_default: &only_default + only: + - branches + - tags + - merge_requests + +check_commit_log: + image: registry.gitlab.gnome.org/gnome/gjs:fedora.static-analysis + stage: commit_check + script: + - ./.gitlab-ci/check-commit-log.sh + only: + - merge_requests + eslint: image: registry.gitlab.gnome.org/gnome/gjs:fedora.static-analysis stage: source_check script: - sh lint/generate-report.sh -o $LINT_LOG || { cat $LINT_LOG; false; } + <<: *only_default artifacts: paths: - ${LINT_LOG} @@ -23,3 +39,4 @@ build-shell-extensions: script: - meson _build . - ninja -C _build test install + <<: *only_default diff --git a/.gitlab-ci/check-commit-log.sh b/.gitlab-ci/check-commit-log.sh new file mode 100755 index 00000000..cc3bcee6 --- /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