You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ko...@apache.org on 2022/07/27 00:31:03 UTC
[arrow] branch master updated: ARROW-17205: [Dev][Release] Merge script should prompt for next version when maintenance branch is created (#13708)
This is an automated email from the ASF dual-hosted git repository.
kou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new 83495257c0 ARROW-17205: [Dev][Release] Merge script should prompt for next version when maintenance branch is created (#13708)
83495257c0 is described below
commit 83495257c0881d6f08c38f077e53921ef286fe8a
Author: Raúl Cumplido <ra...@gmail.com>
AuthorDate: Wed Jul 27 02:30:55 2022 +0200
ARROW-17205: [Dev][Release] Merge script should prompt for next version when maintenance branch is created (#13708)
Currently the merge_pr script is asking to merge to 9.0.0 when the fetature freeze has been implemented. If the maintenance branch is created we should filter them from the possible versions.
Authored-by: Raúl Cumplido <ra...@gmail.com>
Signed-off-by: Sutou Kouhei <ko...@clear-code.com>
---
dev/merge_arrow_pr.py | 28 ++++++++++++++++++++++++----
dev/test_merge_arrow_pr.py | 15 ++++++++++++++-
2 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py
index 67cff18dcd..a0c1398eb5 100755
--- a/dev/merge_arrow_pr.py
+++ b/dev/merge_arrow_pr.py
@@ -147,7 +147,8 @@ class JiraIssue(object):
return tuple(int(_) for _ in numeric_version.split("."))
return sorted(versions, key=version_tuple, reverse=True)
- def get_candidate_fix_versions(self, merge_branches=('master',)):
+ def get_candidate_fix_versions(self, merge_branches=('master',),
+ maintenance_branches=()):
# Only suggest versions starting with a number, like 0.x but not JS-0.x
all_versions = self.jira_con.project_versions(self.project)
unreleased_versions = [x for x in all_versions
@@ -166,12 +167,19 @@ class JiraIssue(object):
# If there is a non-patch release, suggest that instead
mainline_versions = mainline_non_patch_versions
+ mainline_versions = self._filter_maintenance_versions(
+ mainline_versions, maintenance_branches
+ )
default_fix_versions = [
fix_version_from_branch(x, mainline_versions).name
for x in merge_branches]
return all_versions, default_fix_versions
+ def _filter_maintenance_versions(self, versions, maintenance_branches):
+ return [v for v in versions
+ if f"maint-{v.name}" not in maintenance_branches]
+
def _filter_mainline_versions(self, versions):
if self.project == 'PARQUET':
mainline_regex = re.compile(r'cpp-\d.*')
@@ -270,6 +278,10 @@ class GitHubAPI(object):
return get_json("%s/pulls/%s/commits" % (self.github_api, number),
headers=self.headers)
+ def get_branches(self):
+ return get_json("%s/branches" % (self.github_api),
+ headers=self.headers)
+
def merge_pr(self, number, commit_title, commit_message):
url = f'{self.github_api}/pulls/{number}/merge'
payload = {
@@ -350,6 +362,11 @@ class PullRequest(object):
def is_mergeable(self):
return bool(self._pr_data["mergeable"])
+ @property
+ def maintenance_branches(self):
+ return [x["name"] for x in self._github_api.get_branches()
+ if x["name"].startswith("maint-")]
+
def _get_jira(self):
if self.title.startswith("MINOR:"):
return None
@@ -468,9 +485,11 @@ def get_primary_author(cmd, distinct_authors):
return primary_author, distinct_other_authors
-def prompt_for_fix_version(cmd, jira_issue):
+def prompt_for_fix_version(cmd, jira_issue, maintenance_branches=()):
(all_versions,
- default_fix_versions) = jira_issue.get_candidate_fix_versions()
+ default_fix_versions) = jira_issue.get_candidate_fix_versions(
+ maintenance_branches=maintenance_branches
+ )
default_fix_versions = ",".join(default_fix_versions)
@@ -571,7 +590,8 @@ def cli():
"https://github.com/apache/" + PROJECT_NAME + "/pull",
pr_num))
- fix_versions_json = prompt_for_fix_version(cmd, pr.jira_issue)
+ fix_versions_json = prompt_for_fix_version(cmd, pr.jira_issue,
+ pr.maintenance_branches)
pr.jira_issue.resolve(fix_versions_json, jira_comment)
diff --git a/dev/test_merge_arrow_pr.py b/dev/test_merge_arrow_pr.py
index 1a89677ed9..2367c50b6b 100755
--- a/dev/test_merge_arrow_pr.py
+++ b/dev/test_merge_arrow_pr.py
@@ -77,7 +77,7 @@ class FakeJIRA:
'fixVersions': fixVersions
}
- def get_candidate_fix_versions(self):
+ def get_candidate_fix_versions(self, maintenance_branches):
return SOURCE_VERSIONS, ['0.11.0']
def project_versions(self, project):
@@ -109,6 +109,19 @@ def test_jira_fix_versions():
assert default_versions == ['0.9.0']
+def test_jira_fix_versions_filters_maintenance():
+ maintenance_branches = ["maint-0.9.0"]
+ jira = FakeJIRA(project_versions=SOURCE_VERSIONS,
+ transitions=TRANSITIONS)
+
+ issue = merge_arrow_pr.JiraIssue(jira, 'ARROW-1234', 'ARROW', FakeCLI())
+ all_versions, default_versions = issue.get_candidate_fix_versions(
+ maintenance_branches=maintenance_branches
+ )
+ assert all_versions == SOURCE_VERSIONS
+ assert default_versions == ['0.10.0']
+
+
def test_jira_no_suggest_patch_release():
versions_json = [
{'name': '0.9.1', 'released': False},