This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new c27bc53009 Refactoring issue generation to common methods for easier 
maintainence (#38241)
c27bc53009 is described below

commit c27bc53009602e10d7ab5530a8cbefde7f93670a
Author: Amogh Desai <[email protected]>
AuthorDate: Mon Mar 18 12:41:34 2024 +0530

    Refactoring issue generation to common methods for easier maintainence 
(#38241)
---
 .../commands/release_management_commands.py        | 224 ++++++++-------------
 1 file changed, 86 insertions(+), 138 deletions(-)

diff --git 
a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py 
b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 12dbda1196..16bdac52b5 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -2253,75 +2253,9 @@ def generate_issue_content_helm_chart(
     excluded_pr_list: str,
     limit_pr_count: int | None,
 ):
-    verbose = get_verbose()
-    is_helm_chart = True
-    from github import Github, Issue, PullRequest, UnknownObjectException
-
-    PullRequestOrIssue = Union[PullRequest.PullRequest, Issue.Issue]
-    if excluded_pr_list:
-        excluded_prs = [int(pr) for pr in excluded_pr_list.split(",")]
-    else:
-        excluded_prs = []
-    changes = get_changes(verbose, previous_release, current_release, 
is_helm_chart)
-    change_prs = [change.pr for change in changes]
-    prs = [pr for pr in change_prs if pr is not None and pr not in 
excluded_prs]
-
-    g = Github(github_token)
-    repo = g.get_repo("apache/airflow")
-    pull_requests: dict[int, PullRequestOrIssue] = {}
-    linked_issues: dict[int, list[Issue.Issue]] = defaultdict(lambda: [])
-    users: dict[int, set[str]] = defaultdict(lambda: set())
-    count_prs = limit_pr_count or len(prs)
-    with Progress(console=get_console()) as progress:
-        task = progress.add_task(f"Retrieving {count_prs} PRs ", 
total=count_prs)
-        for pr_number in prs[:count_prs]:
-            progress.console.print(
-                f"Retrieving PR#{pr_number}: 
https://github.com/apache/airflow/pull/{pr_number}";
-            )
-
-            pr: PullRequestOrIssue
-            try:
-                pr = repo.get_pull(pr_number)
-            except UnknownObjectException:
-                # Fallback to issue if PR not found
-                try:
-                    pr = repo.get_issue(pr_number)  # (same fields as PR)
-                except UnknownObjectException:
-                    get_console().print(f"[red]The PR #{pr_number} could not 
be found[/]")
-                    continue
-
-            if pr.user.login == "dependabot[bot]":
-                get_console().print(f"[yellow]Skipping PR #{pr_number} as it 
was created by dependabot[/]")
-                continue
-            # Ignore doc-only and skipped PRs
-            label_names = [label.name for label in pr.labels]
-            if "type:doc-only" in label_names or "changelog:skip" in 
label_names:
-                continue
-
-            pull_requests[pr_number] = pr
-            # GitHub does not have linked issues in PR - but we quite 
rigorously add Fixes/Closes
-            # Relate so we can find those from the body
-            if pr.body:
-                body = " ".join(pr.body.splitlines())
-                linked_issue_numbers = {
-                    int(issue_match.group(1)) for issue_match in 
ISSUE_MATCH_IN_BODY.finditer(body)
-                }
-                for linked_issue_number in linked_issue_numbers:
-                    progress.console.print(
-                        f"Retrieving Linked issue PR#{linked_issue_number}: "
-                        
f"https://github.com/apache/airflow/issue/{linked_issue_number}";
-                    )
-                    try:
-                        
linked_issues[pr_number].append(repo.get_issue(linked_issue_number))
-                    except UnknownObjectException:
-                        progress.console.print(
-                            f"Failed to retrieve linked issue 
#{linked_issue_number}: Unknown Issue"
-                        )
-            users[pr_number].add(pr.user.login)
-            for linked_issue in linked_issues[pr_number]:
-                users[pr_number].add(linked_issue.user.login)
-            progress.advance(task)
-    print_issue_content(current_release, pull_requests, linked_issues, users, 
is_helm_chart)
+    generate_issue_content(
+        github_token, previous_release, current_release, excluded_pr_list, 
limit_pr_count, is_helm_chart=True
+    )
 
 
 @release_management.command(
@@ -2365,75 +2299,9 @@ def generate_issue_content_core(
     excluded_pr_list: str,
     limit_pr_count: int | None,
 ):
-    verbose = get_verbose()
-    is_helm_chart = False
-    from github import Github, Issue, PullRequest, UnknownObjectException
-
-    PullRequestOrIssue = Union[PullRequest.PullRequest, Issue.Issue]
-    if excluded_pr_list:
-        excluded_prs = [int(pr) for pr in excluded_pr_list.split(",")]
-    else:
-        excluded_prs = []
-    changes = get_changes(verbose, previous_release, current_release, 
is_helm_chart)
-    change_prs = [change.pr for change in changes]
-    prs = [pr for pr in change_prs if pr is not None and pr not in 
excluded_prs]
-
-    g = Github(github_token)
-    repo = g.get_repo("apache/airflow")
-    pull_requests: dict[int, PullRequestOrIssue] = {}
-    linked_issues: dict[int, list[Issue.Issue]] = defaultdict(lambda: [])
-    users: dict[int, set[str]] = defaultdict(lambda: set())
-    count_prs = limit_pr_count or len(prs)
-    with Progress(console=get_console()) as progress:
-        task = progress.add_task(f"Retrieving {count_prs} PRs ", 
total=count_prs)
-        for pr_number in prs[:count_prs]:
-            progress.console.print(
-                f"Retrieving PR#{pr_number}: 
https://github.com/apache/airflow/pull/{pr_number}";
-            )
-
-            pr: PullRequestOrIssue
-            try:
-                pr = repo.get_pull(pr_number)
-            except UnknownObjectException:
-                # Fallback to issue if PR not found
-                try:
-                    pr = repo.get_issue(pr_number)  # (same fields as PR)
-                except UnknownObjectException:
-                    get_console().print(f"[red]The PR #{pr_number} could not 
be found[/]")
-                    continue
-
-            if pr.user.login == "dependabot[bot]":
-                get_console().print(f"[yellow]Skipping PR #{pr_number} as it 
was created by dependabot[/]")
-                continue
-            # Ignore doc-only and skipped PRs
-            label_names = [label.name for label in pr.labels]
-            if "type:doc-only" in label_names or "changelog:skip" in 
label_names:
-                continue
-
-            pull_requests[pr_number] = pr
-            # GitHub does not have linked issues in PR - but we quite 
rigorously add Fixes/Closes
-            # Relate so we can find those from the body
-            if pr.body:
-                body = " ".join(pr.body.splitlines())
-                linked_issue_numbers = {
-                    int(issue_match.group(1)) for issue_match in 
ISSUE_MATCH_IN_BODY.finditer(body)
-                }
-                for linked_issue_number in linked_issue_numbers:
-                    progress.console.print(
-                        f"Retrieving Linked issue PR#{linked_issue_number}: "
-                        
f"https://github.com/apache/airflow/issue/{linked_issue_number}";
-                    )
-                    try:
-                        
linked_issues[pr_number].append(repo.get_issue(linked_issue_number))
-                    except UnknownObjectException:
-                        progress.console.print(
-                            f"Failed to retrieve linked issue 
#{linked_issue_number}: Unknown Issue"
-                        )
-            users[pr_number].add(pr.user.login)
-            for linked_issue in linked_issues[pr_number]:
-                users[pr_number].add(linked_issue.user.login)
-            progress.advance(task)
-    print_issue_content(current_release, pull_requests, linked_issues, users, 
is_helm_chart)
+    generate_issue_content(
+        github_token, previous_release, current_release, excluded_pr_list, 
limit_pr_count, is_helm_chart=False
+    )
 
 
 def get_all_constraint_files(
@@ -3299,3 +3167,83 @@ def prepare_helm_chart_package(sign_email: str):
             sys.exit(result.returncode)
         else:
             get_console().print(f"[success]Chart signed - the {prov_file} file 
created.[/]")
+
+
+def generate_issue_content(
+    github_token: str,
+    previous_release: str,
+    current_release: str,
+    excluded_pr_list: str,
+    limit_pr_count: int | None,
+    is_helm_chart: bool,
+):
+    from github import Github, Issue, PullRequest, UnknownObjectException
+
+    PullRequestOrIssue = Union[PullRequest.PullRequest, Issue.Issue]
+    verbose = get_verbose()
+    changes = get_changes(verbose, previous_release, current_release, 
is_helm_chart)
+    change_prs = [change.pr for change in changes]
+    if excluded_pr_list:
+        excluded_prs = [int(pr) for pr in excluded_pr_list.split(",")]
+    else:
+        excluded_prs = []
+    prs = [pr for pr in change_prs if pr is not None and pr not in 
excluded_prs]
+
+    g = Github(github_token)
+    repo = g.get_repo("apache/airflow")
+    pull_requests: dict[int, PullRequestOrIssue] = {}
+    linked_issues: dict[int, list[Issue.Issue]] = defaultdict(lambda: [])
+    users: dict[int, set[str]] = defaultdict(lambda: set())
+    count_prs = limit_pr_count or len(prs)
+
+    with Progress(console=get_console()) as progress:
+        task = progress.add_task(f"Retrieving {count_prs} PRs ", 
total=count_prs)
+        for pr_number in prs[:count_prs]:
+            progress.console.print(
+                f"Retrieving PR#{pr_number}: 
https://github.com/apache/airflow/pull/{pr_number}";
+            )
+
+            pr: PullRequestOrIssue
+            try:
+                pr = repo.get_pull(pr_number)
+            except UnknownObjectException:
+                # Fallback to issue if PR not found
+                try:
+                    pr = repo.get_issue(pr_number)  # (same fields as PR)
+                except UnknownObjectException:
+                    get_console().print(f"[red]The PR #{pr_number} could not 
be found[/]")
+                    continue
+
+            if pr.user.login == "dependabot[bot]":
+                get_console().print(f"[yellow]Skipping PR #{pr_number} as it 
was created by dependabot[/]")
+                continue
+            # Ignore doc-only and skipped PRs
+            label_names = [label.name for label in pr.labels]
+            if "type:doc-only" in label_names or "changelog:skip" in 
label_names:
+                continue
+
+            pull_requests[pr_number] = pr
+            # GitHub does not have linked issues in PR - but we quite 
rigorously add Fixes/Closes
+            # Relate so we can find those from the body
+            if pr.body:
+                body = " ".join(pr.body.splitlines())
+                linked_issue_numbers = {
+                    int(issue_match.group(1)) for issue_match in 
ISSUE_MATCH_IN_BODY.finditer(body)
+                }
+                for linked_issue_number in linked_issue_numbers:
+                    progress.console.print(
+                        f"Retrieving Linked issue PR#{linked_issue_number}: "
+                        
f"https://github.com/apache/airflow/issue/{linked_issue_number}";
+                    )
+                    try:
+                        
linked_issues[pr_number].append(repo.get_issue(linked_issue_number))
+                    except UnknownObjectException:
+                        progress.console.print(
+                            f"Failed to retrieve linked issue 
#{linked_issue_number}: Unknown Issue"
+                        )
+            users[pr_number].add(pr.user.login)
+            for linked_issue in linked_issues[pr_number]:
+                users[pr_number].add(linked_issue.user.login)
+            progress.advance(task)
+
+    print_issue_content(current_release, pull_requests, linked_issues, users, 
is_helm_chart)

Reply via email to