diff options
author | Florian Müllner <fmuellner@gnome.org> | 2020-12-13 03:57:00 +0100 |
---|---|---|
committer | Florian Müllner <fmuellner@gnome.org> | 2021-01-11 14:02:58 +0100 |
commit | bd15cfc94bef40ef345cee5a5b52fc9a7ccc5c87 (patch) | |
tree | 7a42bc23a7455f566eacdebb40e69a5255ecd88f | |
parent | 6c19d49a6860d0c7271e78ff01c8dddbc742b065 (diff) | |
download | mutter-bd15cfc94bef40ef345cee5a5b52fc9a7ccc5c87.tar.gz |
ci: Replace custom commit-log script with ci-fairy
ci-fairy now supports checking commit messages for required/disallowed
patterns. Use that to replace our custom commit-log script.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1649>
-rw-r--r-- | .gitlab-ci.yml | 11 | ||||
-rwxr-xr-x | .gitlab-ci/check-commit-log.sh | 121 | ||||
-rw-r--r-- | .gitlab-ci/commit-rules.yml | 19 |
3 files changed, 27 insertions, 124 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e35362717..224d407cb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,6 @@ include: - - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/8445ff7af2a68795afb98f486251f2ef8f90621c/templates/fedora.yml' - - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/8445ff7af2a68795afb98f486251f2ef8f90621c/templates/ci-fairy.yml" + - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/18194044f0f984c8815bc9a1a146582f6bf15d41/templates/fedora.yml' + - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml" stages: - review @@ -85,7 +85,12 @@ check-commit-log: variables: GIT_DEPTH: "100" script: - - ./.gitlab-ci/check-commit-log.sh + - if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ; + then + ci-fairy check-commits --junit-xml=commit-message-junit-report.xml ; + else + echo "Not a merge request" ; + fi artifacts: expire_in: 1 week paths: diff --git a/.gitlab-ci/check-commit-log.sh b/.gitlab-ci/check-commit-log.sh deleted file mode 100755 index d8b65c195..000000000 --- a/.gitlab-ci/check-commit-log.sh +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env bash - -if [ -z "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then - echo This is not a merge request, skipping - exit 0 -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_mr_url() { - commit=$1 - commit_message=$(git show -s --format='format:%b' $commit) - echo "$commit_message" | grep -qe "^$CI_MERGE_REQUEST_PROJECT_URL\/\(-\/\)\?merge_requests\/$CI_MERGE_REQUEST_IID$" - return $? -} - -JUNIT_REPORT_TESTS_FILE=$(mktemp) - -function append_failed_test_case() { - test_name="$1" - commit="$2" - test_message="$3" - commit_short=${commit:0:8} - - echo "<testcase name=\"$test_name: $commit_short\"><failure message=\"$commit_short: $test_message\"/></testcase>" >> $JUNIT_REPORT_TESTS_FILE - echo >&2 "Commit check failed: $commit_short: $test_message" -} - -function append_passed_test_case() { - test_name="$1" - commit="$2" - commit_short=${commit:0:8} - - echo "<testcase name=\"$test_name: $commit_short\"></testcase>" >> $JUNIT_REPORT_TESTS_FILE -} - -function generate_junit_report() { - junit_report_file="$1" - num_tests=$(cat "$JUNIT_REPORT_TESTS_FILE" | wc -l) - num_failures=$(grep '<failure' "$JUNIT_REPORT_TESTS_FILE" | wc -l ) - - echo Generating JUnit report \"$(pwd)/$junit_report_file\" with $num_tests tests and $num_failures failures. - - cat > $junit_report_file << __EOF__ -<?xml version="1.0" encoding="utf-8"?> -<testsuites tests="$num_tests" errors="0" failures="$num_failures"> -<testsuite name="commit-review" tests="$num_tests" errors="0" failures="$num_failures" skipped="0"> -$(< $JUNIT_REPORT_TESTS_FILE) -</testsuite> -</testsuites> -__EOF__ -} - -function check_commit_message_subject() { - commit=$1 - commit_message_subject=$(git show -s --format='format:%s' $commit) - - if echo "$commit_message_subject" | grep -qe "\(^meta-\|^Meta\)"; then - append_failed_test_case meta-prefix $commit \ - "Commit message subject should not be prefixed with 'meta-' or 'Meta'" - else - append_passed_test_case meta-prefix $commit - fi - - if echo "$commit_message_subject" | grep -qe "\(^clutter-\|^Clutter\)"; then - append_failed_test_case clutter-prefix $commit \ - "Commit message subject should not be prefixed with 'clutter-' or 'Clutter', use 'clutter/' instead" - else - append_passed_test_case clutter-prefix $commit - fi - - if echo "$commit_message_subject" | grep -qe "\(^cogl-\|^Cogl\)"; then - append_failed_test_case cogl-prefix $commit \ - "Commit message subject should not be prefixed with 'cogl-' or 'Cogl', use 'cogl/' instead" - else - append_passed_test_case cogl-prefix $commit - fi - - if echo "$commit_message_subject" | sed -e 's/^[^:]\+: //' | grep -qe '^[[:lower:]]'; then - append_failed_test_case capitalization $commit \ - "Commit message subject should be properly Capitalized. E.g. 'window: Marginalize extradicity'" - else - append_passed_test_case capitalization $commit - fi - - if echo "$commit_message_subject" | grep -qe "\.[ch]:"; then - append_failed_test_case not-file-suffix $commit \ - "Commit message subject prefix should not include .c, .h, etc." - else - append_passed_test_case not-file-suffix $commit - fi - - return 0 -} - -RET=0 -for commit in $commits; do - - if commit_message_has_mr_url $commit; then - append_failed_test_case superfluous_url $commit \ - "Commit message must not contain a link to its own merge request" - else - append_passed_test_case superfluous_url $commit - fi - - check_commit_message_subject $commit -done - -generate_junit_report commit-message-junit-report.xml - -! grep -q '<failure' commit-message-junit-report.xml -exit $? diff --git a/.gitlab-ci/commit-rules.yml b/.gitlab-ci/commit-rules.yml new file mode 100644 index 000000000..1ae43374c --- /dev/null +++ b/.gitlab-ci/commit-rules.yml @@ -0,0 +1,19 @@ +patterns: + deny: + - regex: '^$CI_MERGE_REQUEST_PROJECT_URL/(-/)?merge_requests/$CI_MERGE_REQUEST_IID$' + message: Commit message must not contain a link to its own merge request + - regex: '^(meta-|Meta)' + message: Commit message subject should not be prefixed with 'meta-' or 'Meta' + where: subject + - regex: '^(clutter-|Clutter)' + message: Commit message subject should not be prefixed with 'clutter-' or 'Clutter', use 'clutter/' instead + where: subject + - regex: '^(cogl-|Cogl)' + message: Commit message subject should not be prefixed with 'cogl-' or 'Cogl', use 'cogl/' instead + where: subject + - regex: '^[^:]+: [a-z]' + message: "Commit message subject should be properly Capitalized. E.g. 'window: Marginalize extradicity'" + where: subject + - regex: '^\S*\.[ch]:' + message: Commit message subject prefix should not include .c, .h, etc. + where: subject |