diff --git a/dangerfile.py b/dangerfile.py index cb04aeb384..fff5b2ac65 100644 --- a/dangerfile.py +++ b/dangerfile.py @@ -51,7 +51,9 @@ modified_files = danger.git.modified_files affected_files = ( danger.git.modified_files + danger.git.created_files + danger.git.deleted_files ) +mr_title = danger.gitlab.mr.title mr_labels = danger.gitlab.mr.labels +source_branch = danger.gitlab.mr.source_branch target_branch = danger.gitlab.mr.target_branch is_backport = "Backport" in mr_labels or "Backport::Partial" in mr_labels is_full_backport = is_backport and "Backport::Partial" not in mr_labels @@ -63,6 +65,36 @@ gl = gitlab.Gitlab( proj = gl.projects.get(os.environ["CI_PROJECT_ID"]) mr = proj.mergerequests.get(os.environ["CI_MERGE_REQUEST_IID"]) +############################################################################### +# MERGE REQUEST INFORMATION +############################################################################### +# +# - WARN if the merge request's title looks like an auto-generated one. + +if mr_title.replace("Draft: ", "").startswith('Resolve "'): + warn( + f"This merge request's title (`{mr_title}`) looks like an " + "auto-generated one. Please change it so that it accurately " + "describes the changes contained in this merge request." + ) + +############################################################################### +# BRANCH NAME +############################################################################### +# +# - FAIL if the source branch of the merge request includes an old-style +# "-v9_x" or "-v9.x" suffix. + +branch_name_regex = r"^(?P.*?)(?P-v9[_.](?P[0-9]+))$" +match = re.match(branch_name_regex, source_branch) +if match: + fail( + f"Source branch name `{source_branch}` includes an old-style version " + f"suffix (`{match.group('suffix')}`). Using such suffixes is now " + "deprecated. Please resubmit the merge request with the branch name " + f"set to `{match.group('base')}-bind-9.{match.group('version')}`." + ) + ############################################################################### # COMMIT MESSAGES ############################################################################### @@ -167,6 +199,9 @@ if not danger.gitlab.mr.milestone: # # FAIL if any of the following is true for the merge request: # +# * The MR has any "Affects v9.x" label(s) set. These should only be used for +# issues. +# # * The MR is marked as Backport and the number of version labels set is # different than 1. (For backports, the version label is used for indicating # its target branch. This is a rather ugly attempt to address a UI @@ -189,6 +224,11 @@ BACKPORT_OF_RE = re.compile( VERSION_LABEL_RE = re.compile(r"v9.([0-9]+)(-S)?") version_labels = [l for l in mr_labels if l.startswith("v9.")] affects_labels = [l for l in mr_labels if l.startswith("Affects v9.")] +if affects_labels: + fail( + "This MR is marked with at least one *Affects v9.x* label. " + "Please remove them as they should only be used for issues." + ) if is_backport: if len(version_labels) != 1: fail( @@ -199,7 +239,7 @@ if is_backport: minor_ver, edition = VERSION_LABEL_RE.search(version_labels[0]).groups() edition = "" if edition is None else edition title_re = f"^\\[9.{minor_ver}{edition}\\]" - match = re.search(title_re, danger.gitlab.mr.title) + match = re.search(title_re, mr_title) if match is None: fail( "Backport MRs must have their target version in the title. " @@ -248,11 +288,6 @@ else: "a single version label (*v9.x*) indicating the target branch. " "If not, set version labels for all targeted backport branches." ) - if not affects_labels: - warn( - "Set `Affects v9.` label(s) for all versions that are affected by " - "the issue which this MR addresses." - ) ############################################################################### # OTHER LABELS