From 7e1b59dcca6142e1ca263703e5da908c0829404e Mon Sep 17 00:00:00 2001 From: Mathieu Faverge <mathieu.faverge@inria.fr> Date: Tue, 22 Feb 2022 12:40:31 +0100 Subject: [PATCH] ci: Add precheck to merge_request builds --- .gitlab/check_ci.sh | 81 +++++++++++++++++++++++++++++++++++++++++++ .gitlab/common.yml | 8 +++++ tools/check_header.sh | 14 ++++++++ 3 files changed, 103 insertions(+) create mode 100755 .gitlab/check_ci.sh diff --git a/.gitlab/check_ci.sh b/.gitlab/check_ci.sh new file mode 100755 index 000000000..76e9496ea --- /dev/null +++ b/.gitlab/check_ci.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash + +success=1 + +check_rebase() +{ + hash_master=$(git show-ref -s origin/master) + hash_common=$(git merge-base origin/master ${CI_COMMIT_SHA}) + if [ "${hash_master}" = "${hash_common}" ] + then + echo "check_rebase: OK" + return 0 + else + echo "check_rebase: Rebase is required" + success=0 + return 1 + fi +} + +check_draft() +{ + if [ "${CI_PIPELINE_SOURCE}" = "merge_request_event" ] + then + draft=$( echo ${CI_MERGE_REQUEST_TITLE} | sed "s/^Draft.*$/Draft/" ) + wip=$( echo ${CI_MERGE_REQUEST_TITLE} | sed "s/^WIP.*$/WIP/" ) + + if [ "$draft" = "Draft" ] + then + echo "check_draft: Merge request is in draft mode" + success=0 + return 1 + fi + + if [ "$wip" = "WIP" ] + then + echo "check_draft: Merge request is in WIP" + success=0 + return 1 + fi + + # if [ "${CI_MERGE_REQUEST_APPROVED}" != "true" ] + # then + # echo "check_approval: Merge request not yet approved" + # success=0 + # return 1 + # fi + + echo "check_draft: Merge request is ok" + fi + + return 0 +} + +echo "----------------------------------------------------" +check_rebase + +echo "" +echo "----------------------------------------------------" +check_draft + +echo "" +echo "----------------------------------------------------" +echo " Checking file headers: " +TOOLSDIR=$(dirname $0)/../tools + +$TOOLSDIR/check_header.sh +rc=$? +if [ $rc -eq 0 ] +then + echo "Check header: SUCCESS" +else + echo "Check header: FAILED" + success=0 +fi + +if [ $success -eq 0 ] +then + exit 1 + # We could cancel the job, but then the log is not pushed in time to the web interface + #curl --request POST --header "PRIVATE-TOKEN: ${PIPELINE_TOKEN}" "https://gitlab.inria.fr/api/v4/projects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/cancel" +fi diff --git a/.gitlab/common.yml b/.gitlab/common.yml index 2c597c65f..312eea9ad 100644 --- a/.gitlab/common.yml +++ b/.gitlab/common.yml @@ -21,6 +21,14 @@ except: - schedules +preliminary_checks: + image: registry.gitlab.inria.fr/solverstack/docker/distrib + stage: .pre + script: + - .gitlab/check_ci.sh + only: + - merge_requests + .build_script_template: extends: .only-branches stage: build diff --git a/tools/check_header.sh b/tools/check_header.sh index bd0913627..48311d6ba 100755 --- a/tools/check_header.sh +++ b/tools/check_header.sh @@ -14,6 +14,7 @@ # #!/usr/bin/env sh header=1 +nberr=0 print_header() { @@ -45,6 +46,7 @@ check_header_file() then print_header $filename echo -n "@file line missing or incorrect:"; grep "@file" $filename; echo "" + nberr=$(( nberr + 1 )) fi fi } @@ -74,6 +76,7 @@ check_header_version() then print_header $filename echo -n "@version line missing or incorrect:"; grep "@version" $filename; echo ""; + nberr=$(( nberr + 1 )) fi } @@ -87,6 +90,7 @@ check_header_author() then print_header $filename echo "@author line missing"; + nberr=$(( nberr + 1 )) fi } @@ -100,6 +104,7 @@ check_header_date() then print_header $filename echo -n "@date line missing or incorrect"; grep "@date" $filename; echo ""; + nberr=$(( nberr + 1 )) fi } @@ -137,6 +142,7 @@ check_header_define() grep "#ifndef" $filename grep "#define" $filename grep "#endif" $filename + nberr=$(( nberr + 1 )) fi ;; *) @@ -197,3 +203,11 @@ do check_header $f done + +if [ $nberr -gt 0 ] +then + echo "${nberr} mistakes have been found in the header files." + exit 1 +else + exit 0 +fi -- GitLab