diff options
author | Michal Nowikowski <godfryd@isc.org> | 2019-06-14 06:20:58 +0200 |
---|---|---|
committer | Michal Nowikowski <godfryd@isc.org> | 2019-12-19 13:13:46 +0100 |
commit | 8bc8f7872f5177104cdb59dfa6121717bd4fa88f (patch) | |
tree | c8fa5fe35103ffd9f6eb34df3b3a2f7dfb5f72bd | |
parent | [#1060] Hooks version bumped to 12. (diff) | |
download | kea-8bc8f7872f5177104cdb59dfa6121717bd4fa88f.tar.xz kea-8bc8f7872f5177104cdb59dfa6121717bd4fa88f.zip |
[#672] added danger for checking commits compliance
-rw-r--r-- | .gitlab-ci.yml | 24 | ||||
-rw-r--r-- | Dangerfile | 42 |
2 files changed, 61 insertions, 5 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 65067ae42d..6ed27acafb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,15 +1,13 @@ - - variables: # Not normally needed, but may be if some script uses `apt-get install`. DEBIAN_FRONTEND: noninteractive -# Locale settings do not affect the build, but might affect tests. + # Locale settings do not affect the build, but might affect tests. LC_ALL: C CI_REGISTRY_IMAGE: registry.gitlab.isc.org/isc-projects/images/bind9 -# Disabled warnings: -# SC2039 - complains about local var: In POSIX sh, 'local' is undefined. + # Disabled warnings: + # SC2039 - complains about local var: In POSIX sh, 'local' is undefined. SHELLCHECK_OPTS: "--exclude=SC2039" stages: @@ -19,6 +17,7 @@ shellcheck: stage: test image: "$CI_REGISTRY_IMAGE:debian-stretch-amd64" before_script: + - sudo apt-get update - sudo apt-get -y install shellcheck script: - SCRIPTS="src/bin/keactrl/keactrl.in " @@ -27,3 +26,18 @@ shellcheck: - SCRIPTS+="tools/cql_config " - SCRIPTS+="tools/sysrepo_config " - shellcheck ${SCRIPTS} ${SHELLCHECK_OPTS} + +danger: + stage: test + image: registry.gitlab.isc.org/isc-projects/stork/ci-danger + before_script: + - export CI_MERGE_REQUEST_ID=$(git ls-remote -q origin merge-requests\*\head | grep $CI_COMMIT_SHA | sed 's/.*refs\/merge-requests\/\([0-9]*\)\/head/\1/g') + - export CI_PROJECT_PATH=$CI_PROJECT_ID #some version of gitlab has problems with searching by project path + - export DANGER_GITLAB_HOST=gitlab.isc.org + - export DANGER_GITLAB_API_BASE_URL=https://gitlab.isc.org/api/v4 + - sysctl -w net.ipv6.conf.all.disable_ipv6=1 + - sysctl -w net.ipv6.conf.default.disable_ipv6=1 + script: + - echo '149.20.48.126 gitlab.isc.org' >> /etc/hosts + - gem install danger-commit_lint + - danger --fail-on-errors=true --new-comment diff --git a/Dangerfile b/Dangerfile new file mode 100644 index 0000000000..c8d391dd30 --- /dev/null +++ b/Dangerfile @@ -0,0 +1,42 @@ +fail "Please provide a summary in the Merge Request description to help your colleagues to understand the MR purpose." if gitlab.mr_body.length < 5 + +if git.modified_files.include? "Dangerfile" + warn "This MR modifies Dangerfile! Watch for the rules!" +end + +# Checking MR size +if not gitlab.mr_body.include?("#huge-sorry") + warn("Split the MR into separate ones. It's really big.") if git.lines_of_code > 3000 + fail("Do not submit MRs over 5000 lines of code.") if git.lines_of_code > 5000 +end + +# Note when MRs don't reference a milestone, make the warning stick around on subsequent runs +has_milestone = gitlab.mr_json["milestone"] != nil +warn("This MR does not refer to an existing milestone", sticky: true) unless has_milestone + +# check commits' comments +commit_lint.check warn: :all + +# check gitlab issue in commit message +git.commits.each do |c| + m = c.message.match(/^\[\#(\d+)\]\ (.*)/) + if not m + warn "No GitLab issue in commit message: #{c}" + gl_issue_msg = nil + else + gl_issue_msg = m.captures[0] + end + + mr_branch = gitlab.branch_for_head + m = mr_branch.match(/^(\d+).*/) + if not m + warn "Branch name does not start with GitLab issue: #{mr_branch}" + gl_issue_br = nil + else + gl_issue_br = m.captures[0] + end + + if gl_issue_msg and gl_issue_br and gl_issue_msg != gl_issue_br + warn "GitLab issue ##{gl_issue_msg} in msg of commit #{c} and issue ##{gl_issue_br} from branch #{mr_branch} do not match" + end +end |