You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2022/06/03 19:25:57 UTC

[airflow] branch main updated: Better summary of status of AIP-47 (#24169)

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 bcb77c9973 Better summary of status of AIP-47 (#24169)
bcb77c9973 is described below

commit bcb77c9973258e4577dbc534aa5c92196f8b467a
Author: Jarek Potiuk <ja...@polidea.com>
AuthorDate: Fri Jun 3 21:25:51 2022 +0200

    Better summary of status of AIP-47 (#24169)
    
    Result is here: https://github.com/apache/airflow/issues/24168
---
 dev/system_tests/update_issue_status.py | 71 +++++++++++++++++++++++++++++----
 1 file changed, 64 insertions(+), 7 deletions(-)

diff --git a/dev/system_tests/update_issue_status.py b/dev/system_tests/update_issue_status.py
index d1bd9af566..0f9fe1d5db 100755
--- a/dev/system_tests/update_issue_status.py
+++ b/dev/system_tests/update_issue_status.py
@@ -17,10 +17,10 @@
 # under the License.
 import textwrap
 from pathlib import Path
-from typing import Optional, Tuple
+from typing import Dict, List, Optional, Tuple
 
 import rich_click as click
-from github import Github
+from github import Github, Issue
 from rich.console import Console
 
 console = Console(width=400, color_system="standard")
@@ -140,18 +140,26 @@ def update_issue_status(
     """Update status of the issues regarding the AIP-47 migration."""
     g = Github(github_token)
     repo = g.get_repo(repository)
-    issues = repo.get_issues(labels=labels.split(','))
+    issues = repo.get_issues(labels=labels.split(','), state='all')
     max_issues = max_issues if max_issues is not None else issues.totalCount
     total_re_added = 0
     total_completed = 0
     total_count_done = 0
     total_count_all = 0
     num_issues = 0
+    completed_open_issues: List[Issue.Issue] = []
+    completed_closed_issues: List[Issue.Issue] = []
+    not_completed_closed_issues: List[Issue.Issue] = []
+    not_completed_opened_issues: List[Issue.Issue] = []
+    per_issue_num_done: Dict[int, int] = {}
+    per_issue_num_all: Dict[int, int] = {}
     for issue in issues[start_from : start_from + max_issues]:
         console.print(f"[blue] {issue.id}: {issue.title}")
         new_body, count_re_added, count_completed, count_done, count_all = process_paths_from_body(
             issue.body, dry_run=dry_run, verbose=verbose
         )
+        if count_all == 0:
+            continue
         if count_re_added != 0 or count_completed != 0:
             if dry_run:
                 print(new_body)
@@ -168,16 +176,65 @@ def update_issue_status(
         total_completed += count_completed
         total_count_done += count_done
         total_count_all += count_all
+        per_issue_num_all[issue.id] = count_all
+        per_issue_num_done[issue.id] = count_done
+        if count_done == count_all:
+            if issue.state == "closed":
+                completed_closed_issues.append(issue)
+            else:
+                completed_open_issues.append(issue)
+        else:
+            if issue.state == "closed":
+                not_completed_closed_issues.append(issue)
+            else:
+                not_completed_opened_issues.append(issue)
         num_issues += 1
 
-    console.print()
-    console.print()
-    console.print(f"[green]Summary of ALL performed actions: for {num_issues} issues[/]")
+    console.print(f"[green]Summary of ALL actions: for {num_issues} issues[/]")
     console.print(f"   Re-added file number: {total_re_added}")
     console.print(f"   Completed file number: {total_completed}")
+    console.print()
+    console.print()
+    console.print(f"[green]Summary of ALL issues: for {num_issues} issues[/]")
     console.print(
-        f"   Done {total_count_done}/{total_count_all} = {(total_count_done * 100/ total_count_all):.2f}%"
+        f"   Completed and closed issues: {len(completed_closed_issues)}/{num_issues}: "
+        f"{len(completed_closed_issues) * 100/num_issues:.2f}%"
     )
+    console.print(
+        f"   Completed files {total_count_done}/{total_count_all} = "
+        f"{(total_count_done * 100/ total_count_all):.2f}%"
+    )
+    console.print()
+    if not_completed_closed_issues:
+        console.print("[yellow] Issues that are not completed and should be opened:[/]\n")
+        for issue in not_completed_closed_issues:
+            all = per_issue_num_all[issue.id]
+            done = per_issue_num_done[issue.id]
+            console.print(
+                fr" * \[[yellow]{issue.title}[/]]({issue.html_url}): "
+                f"{done}/{all} : {done * 100 / all:.2f}%"
+            )
+        console.print()
+    if completed_open_issues:
+        console.print("[yellow] Issues that are completed and should be closed:[/]\n")
+        for issue in completed_open_issues:
+            console.print(fr" * \[[yellow]{issue.title}[/]]({issue.html_url})")
+        console.print()
+    if not_completed_opened_issues:
+        console.print("[yellow] Issues that are not completed and are still opened:[/]\n")
+        for issue in not_completed_opened_issues:
+            all = per_issue_num_all[issue.id]
+            done = per_issue_num_done[issue.id]
+            console.print(
+                fr" * \[[yellow]{issue.title}[/]]({issue.html_url}): "
+                f"{done}/{all} : {done * 100 / all:.2f}%"
+            )
+        console.print()
+    if completed_closed_issues:
+        console.print("[green] Issues that are completed and are already closed:[/]\n")
+        for issue in completed_closed_issues:
+            console.print(fr" * \[[green]{issue.title}[/]]({issue.html_url})")
+        console.print()
     console.print()