ultralytics-actions 0.0.24__tar.gz → 0.0.26__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. {ultralytics_actions-0.0.24/ultralytics_actions.egg-info → ultralytics_actions-0.0.26}/PKG-INFO +1 -1
  2. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/actions/__init__.py +1 -1
  3. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/actions/summarize_pr.py +57 -2
  4. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/actions/utils/github_utils.py +0 -2
  5. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26/ultralytics_actions.egg-info}/PKG-INFO +1 -1
  6. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/LICENSE +0 -0
  7. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/README.md +0 -0
  8. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/actions/first_interaction.py +0 -0
  9. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/actions/summarize_release.py +0 -0
  10. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/actions/update_markdown_code_blocks.py +0 -0
  11. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/actions/utils/__init__.py +0 -0
  12. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/actions/utils/common_utils.py +0 -0
  13. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/actions/utils/openai_utils.py +0 -0
  14. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/pyproject.toml +0 -0
  15. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/setup.cfg +0 -0
  16. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/ultralytics_actions.egg-info/SOURCES.txt +0 -0
  17. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/ultralytics_actions.egg-info/dependency_links.txt +0 -0
  18. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/ultralytics_actions.egg-info/entry_points.txt +0 -0
  19. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/ultralytics_actions.egg-info/requires.txt +0 -0
  20. {ultralytics_actions-0.0.24 → ultralytics_actions-0.0.26}/ultralytics_actions.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics-actions
3
- Version: 0.0.24
3
+ Version: 0.0.26
4
4
  Summary: Ultralytics Actions for GitHub automation and PR management.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -22,4 +22,4 @@
22
22
  # ├── test_summarize_pr.py
23
23
  # └── ...
24
24
 
25
- __version__ = "0.0.24"
25
+ __version__ = "0.0.26"
@@ -13,7 +13,7 @@ from .utils import (
13
13
  get_pr_diff,
14
14
  )
15
15
 
16
- # Action settings
16
+ # Constants
17
17
  SUMMARY_START = (
18
18
  "## 🛠️ PR Summary\n\n<sub>Made with ❤️ by [Ultralytics Actions](https://github.com/ultralytics/actions)<sub>\n\n"
19
19
  )
@@ -71,12 +71,60 @@ def update_pr_description(repo_name, pr_number, new_summary, max_retries=2):
71
71
  return update_response.status_code
72
72
 
73
73
 
74
+ def label_fixed_issues(pr_number):
75
+ """Labels issues that are closed by this PR when it's merged."""
76
+ # GraphQL query to get closing issues
77
+ query = """
78
+ query($owner: String!, $repo: String!, $pr_number: Int!) {
79
+ repository(owner: $owner, name: $repo) {
80
+ pullRequest(number: $pr_number) {
81
+ closingIssuesReferences(first: 50) {
82
+ nodes {
83
+ number
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ """
90
+
91
+ owner, repo = GITHUB_REPOSITORY.split("/")
92
+ variables = {"owner": owner, "repo": repo, "pr_number": pr_number}
93
+ graphql_url = "https://api.github.com/graphql"
94
+ response = requests.post(graphql_url, json={"query": query, "variables": variables}, headers=GITHUB_HEADERS)
95
+ if response.status_code != 200:
96
+ print(f"Failed to fetch linked issues. Status code: {response.status_code}")
97
+ return
98
+
99
+ try:
100
+ issues = response.json()["data"]["repository"]["pullRequest"]["closingIssuesReferences"]["nodes"]
101
+ for issue in issues:
102
+ issue_number = issue["number"]
103
+ label_url = f"{GITHUB_API_URL}/repos/{GITHUB_REPOSITORY}/issues/{issue_number}/labels"
104
+ label_response = requests.post(label_url, json={"labels": ["fixed"]}, headers=GITHUB_HEADERS)
105
+ if label_response.status_code == 200:
106
+ print(f"Added 'fixed' label to issue #{issue_number}")
107
+ else:
108
+ print(f"Failed to add label to issue #{issue_number}. Status: {label_response.status_code}")
109
+ except KeyError as e:
110
+ print(f"Error parsing GraphQL response: {e}")
111
+ return
112
+
113
+
114
+ def remove_todos_on_merge(pr_number):
115
+ """Removes specified labels from PR."""
116
+ for label in ["TODO"]: # Can be extended with more labels in the future
117
+ requests.delete(
118
+ f"{GITHUB_API_URL}/repos/{GITHUB_REPOSITORY}/issues/{pr_number}/labels/{label}", headers=GITHUB_HEADERS
119
+ )
120
+
121
+
74
122
  def main():
75
123
  """Summarize a pull request and update its description with an AI-generated summary."""
76
124
  pr_number = PR["number"]
77
125
 
78
126
  print(f"Retrieving diff for PR {pr_number}")
79
- diff = get_pr_diff(PR["number"])
127
+ diff = get_pr_diff(pr_number)
80
128
 
81
129
  # Generate PR summary
82
130
  print("Generating PR summary...")
@@ -90,6 +138,13 @@ def main():
90
138
  else:
91
139
  print(f"Failed to update PR description. Status code: {status_code}")
92
140
 
141
+ # Update linked issues
142
+ if PR.get("merged"):
143
+ print("PR is merged, labeling fixed issues...")
144
+ label_fixed_issues(pr_number)
145
+ print("Removing TODO label from PR...")
146
+ remove_todos_on_merge(pr_number)
147
+
93
148
 
94
149
  if __name__ == "__main__":
95
150
  main()
@@ -23,8 +23,6 @@ if GITHUB_EVENT_PATH:
23
23
  PR = EVENT_DATA.get("pull_request", {})
24
24
  DISCUSSION = EVENT_DATA.get("discussion", {})
25
25
 
26
- INPUTS = {k[6:].lower(): v for k, v in os.environ.items() if k.startswith("INPUT_")} # actions inputs dictionary
27
-
28
26
 
29
27
  def get_pr_diff(pr_number: int) -> str:
30
28
  """Retrieves the diff content for a specified pull request in a GitHub repository."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics-actions
3
- Version: 0.0.24
3
+ Version: 0.0.26
4
4
  Summary: Ultralytics Actions for GitHub automation and PR management.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>