diff options
author | Toon Claes <toon@gitlab.com> | 2022-03-17 18:33:35 +0300 |
---|---|---|
committer | Toon Claes <toon@gitlab.com> | 2022-03-17 18:33:35 +0300 |
commit | db8b5d43582182fd743ef2a1fdf84b07efd8f786 (patch) | |
tree | afbe4b0b9fa0dc292baf9da9706c561f4519b51d | |
parent | 442277b91f5aa2822d52b810fd462a41c6cf5a0a (diff) | |
parent | 380f1ddaa17f49968ba1553c6ff56c66fbde9716 (diff) |
Merge branch 'update-danger-config-2' into 'master'
Update Danger config to use new type & subtype labels
See merge request gitlab-org/gitaly!4387
-rw-r--r-- | .gitlab-ci.yml | 20 | ||||
-rw-r--r-- | Dangerfile | 17 | ||||
-rw-r--r-- | danger/Gemfile | 2 | ||||
-rw-r--r-- | danger/Gemfile.lock | 21 | ||||
-rw-r--r-- | danger/plugins/project_helper.rb | 22 | ||||
-rw-r--r-- | danger/rules/changelog/Dangerfile | 91 | ||||
-rw-r--r-- | danger/rules/labels/Dangerfile | 47 | ||||
-rw-r--r-- | danger/rules/merge_request/Dangerfile | 13 | ||||
-rw-r--r-- | danger/rules/milestones/Dangerfile | 8 |
9 files changed, 35 insertions, 206 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 84c9940f1..4a33e6d17 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,6 +29,9 @@ include: - template: Security/Dependency-Scanning.gitlab-ci.yml - template: Security/Coverage-Fuzzing.gitlab-ci.yml - template: Security/Secret-Detection.gitlab-ci.yml + - project: 'gitlab-org/quality/pipeline-common' + file: + - '/ci/danger-review.yml' .cache_deps: cache: &cache_deps_configuration @@ -91,25 +94,8 @@ include: danger-review: stage: build allow_failure: true - only: - - merge_requests - except: - - tags - - master variables: BUNDLE_GEMFILE: danger/Gemfile - before_script: - - bundle install - script: - - > - if [ -z "$DANGER_GITLAB_API_TOKEN" ]; then - # Force danger to skip CI source GitLab and fallback to "local only git repo". - unset GITLAB_CI - # We need access to the base SHA to help danger determine the base commit for this shallow clone. - bundle exec danger dry_run --fail-on-errors=true --verbose --base='$CI_MERGE_REQUEST_DIFF_BASE_SHA' - else - bundle exec danger --fail-on-errors=true --verbose - fi build: stage: build diff --git a/Dangerfile b/Dangerfile index b938487f2..616556b1a 100644 --- a/Dangerfile +++ b/Dangerfile @@ -2,20 +2,17 @@ require 'gitlab-dangerfiles' -Gitlab::Dangerfiles.for_project(self) do |dangerfiles| - dangerfiles.import_defaults +Gitlab::Dangerfiles.for_project(self) do |gitlab_dangerfiles| + gitlab_dangerfiles.config.files_to_category = { + %r{\Adoc/.*(\.(md|png|gif|jpg))\z} => :docs, + %r{\A(CONTRIBUTING|LICENSE|README|REVIEWING|STYLE)(\.md)?\z} => :docs, - danger.import_plugin('danger/plugins/*.rb') + %r{.*} => [nil] + }.freeze Dir.each_child('danger/rules') do |rule| danger.import_dangerfile(path: "danger/rules/#{rule}") end - anything_to_post = status_report.values.any?(&:any?) - - if helper.ci? && anything_to_post - markdown("**If needed, you can retry the [`danger-review` job](#{ENV['CI_JOB_URL']}) that generated this comment.**") - end + gitlab_dangerfiles.import_defaults end - -# vim: ft=ruby diff --git a/danger/Gemfile b/danger/Gemfile index 3a46d8197..5f3463039 100644 --- a/danger/Gemfile +++ b/danger/Gemfile @@ -1,3 +1,3 @@ source 'https://rubygems.org' -gem 'gitlab-dangerfiles', require: false +gem 'gitlab-dangerfiles', '~> 2.11.0', require: false diff --git a/danger/Gemfile.lock b/danger/Gemfile.lock index faefa107d..c4699bb11 100644 --- a/danger/Gemfile.lock +++ b/danger/Gemfile.lock @@ -11,7 +11,7 @@ GEM colored2 (3.1.2) cork (0.3.0) colored2 (~> 3.1) - danger (8.4.4) + danger (8.4.5) claide (~> 1.0) claide-plugins (>= 0.9.2) colored2 (~> 3.1) @@ -54,11 +54,11 @@ GEM faraday-retry (1.0.3) git (1.10.2) rchardet (~> 1.8) - gitlab (4.17.0) + gitlab (4.18.0) httparty (~> 0.18) - terminal-table (~> 1.5, >= 1.5.1) - gitlab-dangerfiles (2.6.1) - danger (>= 8.3.1) + terminal-table (>= 1.5.1) + gitlab-dangerfiles (2.11.0) + danger (>= 8.4.5) danger-gitlab (>= 8.0.0) httparty (0.20.0) mime-types (~> 3.0) @@ -69,7 +69,7 @@ GEM kramdown (~> 2.0) mime-types (3.4.1) mime-types-data (~> 3.2015) - mime-types-data (3.2021.1115) + mime-types-data (3.2022.0105) multi_xml (0.6.0) multipart-post (2.1.1) nap (1.1.0) @@ -85,15 +85,16 @@ GEM sawyer (0.8.2) addressable (>= 2.3.5) faraday (> 0.8, < 2.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - unicode-display_width (1.8.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + unicode-display_width (2.1.0) PLATFORMS + x86_64-darwin-21 x86_64-linux DEPENDENCIES - gitlab-dangerfiles + gitlab-dangerfiles (~> 2.11.0) BUNDLED WITH 2.2.22 diff --git a/danger/plugins/project_helper.rb b/danger/plugins/project_helper.rb deleted file mode 100644 index bb7036586..000000000 --- a/danger/plugins/project_helper.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -module Danger - # Common helper functions for danger scripts - class ProjectHelper < ::Danger::Plugin - # First-match win, so be sure to put more specific regex at the top... - CATEGORIES = { - %r{\Adoc/.*(\.(md|png|gif|jpg))\z} => :docs, - %r{\A(CONTRIBUTING|LICENSE|README|REVIEWING|STYLE)(\.md)?\z} => :docs, - - %r{.*} => [nil] - }.freeze - - def changes_by_category - helper.changes_by_category(CATEGORIES) - end - - def project_name - 'gitaly' - end - end -end diff --git a/danger/rules/changelog/Dangerfile b/danger/rules/changelog/Dangerfile deleted file mode 100644 index e1079b78a..000000000 --- a/danger/rules/changelog/Dangerfile +++ /dev/null @@ -1,91 +0,0 @@ -require 'yaml' - -def lint_commit(commit) - trailer = commit.message.match(/^(?<name>Changelog):\s*(?<category>.+)$/i) - - return :missing if trailer.nil? || trailer[:category].nil? - - name = trailer[:name] - - unless name == 'Changelog' - self.fail( - "The changelog trailer for commit #{commit.sha} must be `Changelog` (starting with a capital C), not `#{name}`" - ) - - return :invalid - end - - category = trailer[:category] - - return :valid if CATEGORIES.include?(category) - - self.fail( - "Commit #{commit.sha} uses an invalid changelog category: #{category}" - ) - - :invalid -end - -def presented_no_changelog_labels - NO_CHANGELOG_LABELS.map { |label| %(~"#{label}") }.join(', ') -end - -NO_CHANGELOG_LABELS = [ - 'documentation', - 'type::tooling', - 'tooling::pipelines', - 'tooling::workflow', - 'ci-build', - 'meta' -].freeze - -CATEGORIES = YAML - .load_file(File.expand_path('../../../.gitlab/changelog_config.yml', __dir__)) - .fetch('categories') - .keys - .freeze - -SEE_DOC = "See [the documentation](https://docs.gitlab.com/ee/development/changelog.html).".freeze - -CHANGELOG_MISSING = <<~MSG.freeze -**[CHANGELOG missing](https://docs.gitlab.com/ee/development/changelog.html).** - -To ceate a changelog, annotate one or more commits with the `Changelog` Git -trailer. If you want to annotate the latest commit, you can do so using `git -commit --amend`. If you want to annotate older or multiple commits, you need to -do so using `git rebase -i`. - -When adding the trailer, you can use the following values: - -- #{CATEGORIES.join("\n- ")} - -For example: - -``` -This is the subject of your commit. - -This would be the body of your commit containing some extra details. - -Changelog: added -``` - -If your merge request doesn't warrant a CHANGELOG entry, consider adding any of -the #{presented_no_changelog_labels} labels. - -#{SEE_DOC} -MSG - -changelog_needed = (gitlab.mr_labels & NO_CHANGELOG_LABELS).empty? - -if changelog_needed - checked = 0 - - git.commits.each do |commit| - case lint_commit(commit) - when :valid, :invalid - checked += 1 - end - end - - warn(CHANGELOG_MISSING) if checked.zero? -end diff --git a/danger/rules/labels/Dangerfile b/danger/rules/labels/Dangerfile index 6d1fa9d9b..6bebb8621 100644 --- a/danger/rules/labels/Dangerfile +++ b/danger/rules/labels/Dangerfile @@ -1,30 +1,12 @@ -def changelog_entry - @changelog_entry ||= - begin - file = git.added_files.find { |path| path =~ %r{\Achangelogs/unreleased/} } - - YAML.safe_load(File.read(file)) - rescue - # The change log danger file will handle this - {} - end -end - -required_labels = %w[devops::create] - -TYPE_TO_LABEL = { - 'added' => %w[type::feature feature::addition], - 'fixed' => ['type::bug'], - 'changed' => ['type::maintenance'], - 'deprecated' => ['type::maintenance'], - 'security' => ['security'], - 'removed' => ['type::maintenance'], - 'performance' => %w[type::maintenance performance], - 'other' => ['type::tooling'], - nil => [] -} - -INHERITABLE_LABELS = TYPE_TO_LABEL.values.flatten + %w[Deliverable] +INHERITABLE_LABELS = %w[ + type::bug + type::feature + type::maintenance + feature::addition + security + performance + Deliverable +] def inherited_labels gitlab.api @@ -35,13 +17,4 @@ def inherited_labels .select { |label| INHERITABLE_LABELS.include?(label) } end -required_labels.concat(TYPE_TO_LABEL[changelog_entry["type"]]) - -mr_labels = gitlab.mr_labels | required_labels | inherited_labels -gitlab.api.update_merge_request( - gitlab.mr_json['project_id'], - gitlab.mr_json['iid'], - labels: mr_labels.join(",") -) - -# vim: ft=ruby +helper.labels_to_add.concat(%w[devops::create] | inherited_labels) diff --git a/danger/rules/merge_request/Dangerfile b/danger/rules/merge_request/Dangerfile deleted file mode 100644 index b9c81d2af..000000000 --- a/danger/rules/merge_request/Dangerfile +++ /dev/null @@ -1,13 +0,0 @@ -unless /^([[:alnum:]][[:lower:]]+: )?[[:upper:]]/ =~ gitlab.mr_title - warn("Please capitalize the merge request title") -end - -if gitlab.mr_body.empty? - fail("Please provide a merge request description") -end - -if gitlab.mr_title.length > 72 - warn "The title of this merge requests it too long" -end - -# vim: ft=ruby diff --git a/danger/rules/milestones/Dangerfile b/danger/rules/milestones/Dangerfile index ce74bbb87..30ea440fe 100644 --- a/danger/rules/milestones/Dangerfile +++ b/danger/rules/milestones/Dangerfile @@ -1,5 +1,5 @@ unless gitlab.mr_json["milestone"] - issues = gitlab.api.merge_request_closes_issues(gitlab.mr_json['project_id'], gitlab.mr_json['iid']) + issues = gitlab.api.merge_request_closes_issues(helper.mr_target_project_id, helper.mr_iid) milestone_id = issues .map { |i| i.milestone } @@ -11,13 +11,11 @@ unless gitlab.mr_json["milestone"] if milestone_id gitlab.api.update_merge_request( - gitlab.mr_json['project_id'], - gitlab.mr_json['iid'], + helper.mr_target_project_id, + helper.mr_iid, milestone_id: milestone_id ) else warn "No milestone was set, nor could it be detected from the issues this merge request closes." end end - -# vim: ft=ruby |