Commit 58d4099c authored by Douglas Barbosa Alexandre's avatar Douglas Barbosa Alexandre

Merge branch 'stable-reviewer-roulette' into 'master'

Stable reviewer roulette

Closes #57766

See merge request gitlab-org/gitlab-ce!27117
parents 2347b04e 28531ab4
# frozen_string_literal: true # frozen_string_literal: true
require 'digest/md5'
MESSAGE = <<MARKDOWN MESSAGE = <<MARKDOWN
## Reviewer roulette ## Reviewer roulette
...@@ -29,17 +31,22 @@ Please consider creating a merge request to ...@@ -29,17 +31,22 @@ Please consider creating a merge request to
for them. for them.
MARKDOWN MARKDOWN
def spin(team, project, category) def spin(team, project, category, branch_name)
rng = Random.new(Digest::MD5.hexdigest(branch_name).to_i(16))
reviewers = team.select { |member| member.reviewer?(project, category) } reviewers = team.select { |member| member.reviewer?(project, category) }
traintainers = team.select { |member| member.traintainer?(project, category) } traintainers = team.select { |member| member.traintainer?(project, category) }
maintainers = team.select { |member| member.maintainer?(project, category) } maintainers = team.select { |member| member.maintainer?(project, category) }
# TODO: filter out people who are currently not in the office # TODO: filter out people who are currently not in the office
# https://gitlab.com/gitlab-org/gitlab-ce/issues/57652
#
# TODO: take CODEOWNERS into account? # TODO: take CODEOWNERS into account?
# https://gitlab.com/gitlab-org/gitlab-ce/issues/57653
# Make traintainers have triple the chance to be picked as a reviewer # Make traintainers have triple the chance to be picked as a reviewer
reviewer = (reviewers + traintainers + traintainers).sample reviewer = (reviewers + traintainers + traintainers).sample(random: rng)
maintainer = maintainers.sample maintainer = maintainers.sample(random: rng)
"| #{helper.label_for_category(category)} | #{reviewer&.markdown_name} | #{maintainer&.markdown_name} |" "| #{helper.label_for_category(category)} | #{reviewer&.markdown_name} | #{maintainer&.markdown_name} |"
end end
...@@ -65,6 +72,12 @@ categories = changes.keys - [:unknown] ...@@ -65,6 +72,12 @@ categories = changes.keys - [:unknown]
# CSS Clean up MRs are reviewed using a slightly different process, so we # CSS Clean up MRs are reviewed using a slightly different process, so we
# disable the review roulette for such MRs. # disable the review roulette for such MRs.
if changes.any? && !gitlab.mr_labels.include?('single codebase') && !gitlab.mr_labels.include?('CSS cleanup') if changes.any? && !gitlab.mr_labels.include?('single codebase') && !gitlab.mr_labels.include?('CSS cleanup')
# Strip leading and trailing CE/EE markers
canonical_branch_name = gitlab
.mr_json['source_branch']
.gsub(/^[ce]e-/, '')
.gsub(/-[ce]e$/, '')
team = team =
begin begin
helper.project_team helper.project_team
...@@ -79,7 +92,7 @@ if changes.any? && !gitlab.mr_labels.include?('single codebase') && !gitlab.mr_l ...@@ -79,7 +92,7 @@ if changes.any? && !gitlab.mr_labels.include?('single codebase') && !gitlab.mr_l
project = helper.project_name project = helper.project_name
unknown = changes.fetch(:unknown, []) unknown = changes.fetch(:unknown, [])
rows = categories.map { |category| spin(team, project, category) } rows = categories.map { |category| spin(team, project, category, canonical_branch_name) }
markdown(MESSAGE) markdown(MESSAGE)
markdown(CATEGORY_TABLE_HEADER + rows.join("\n")) unless rows.empty? markdown(CATEGORY_TABLE_HEADER + rows.join("\n")) unless rows.empty?
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment