From f8ae7fd3ea365b03222be3c5f87f4e3f32a12cf9 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 20:58:20 +0100 Subject: [PATCH 01/42] Test --- .github/workflows/format.yml | 2 +- action.yml | 8 ++++++++ custom_script.py | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 custom_script.py diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 13c5509e..99e98829 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Run Ultralytics Formatting - uses: ultralytics/actions@main + uses: ultralytics/actions@test-local-python-script with: token: ${{ secrets.GITHUB_TOKEN }} # automatically generated python: true diff --git a/action.yml b/action.yml index de45b9a3..2adb966c 100644 --- a/action.yml +++ b/action.yml @@ -99,6 +99,14 @@ runs: shell: bash continue-on-error: true + # Custom Python Script ------------------------------------------------------------------------------------------- + - name: Run Custom Python Script + if: inputs.python == 'true' + run: | + python custom_script.py + shell: bash + continue-on-error: true + # Commit Changes --------------------------------------------------------------------------------------------------- - name: Commit and Push Changes run: | diff --git a/custom_script.py b/custom_script.py new file mode 100644 index 00000000..9e5da310 --- /dev/null +++ b/custom_script.py @@ -0,0 +1 @@ +print('CUSTOM PYTHON SCRIPT IS WORKING!!') From 68dd7acf4067747c0d348b82a500c4005d9d95c9 Mon Sep 17 00:00:00 2001 From: UltralyticsAssistant Date: Thu, 18 Jan 2024 19:58:51 +0000 Subject: [PATCH 02/42] Auto-format by Ultralytics actions --- custom_script.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_script.py b/custom_script.py index 9e5da310..7fed16a4 100644 --- a/custom_script.py +++ b/custom_script.py @@ -1 +1 @@ -print('CUSTOM PYTHON SCRIPT IS WORKING!!') +print("CUSTOM PYTHON SCRIPT IS WORKING!!") From f34a55fc9b174a6dcb45f0eb5f9d66a7d0cad094 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:08:43 +0100 Subject: [PATCH 03/42] Test --- action.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/action.yml b/action.yml index 2adb966c..8172c50a 100644 --- a/action.yml +++ b/action.yml @@ -35,6 +35,7 @@ runs: - name: Print Action Information run: | echo "github.event_name: ${{ github.event_name }}" + echo "github.event_action: ${{ github.event_action }}" echo "github.repository: ${{ github.repository }}" echo "github.event.pull_request.head.repo.full_name: ${{ github.event.pull_request.head.repo.full_name }}" echo "github.actor: ${{ github.actor }}" @@ -122,6 +123,14 @@ runs: shell: bash continue-on-error: false + # Custom Python Script for Summary -------------------------------------------------------------------------------- + - name: Summarize PR + if: (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event_action == 'opened' || inputs.event_action == 'closed') + run: | + python path/to/summary_script.py + shell: bash + continue-on-error: true + # Broken links ----------------------------------------------------------------------------------------------------- - name: Broken Link Checker if: inputs.links == 'true' From 2015cd1ec2b1c527a90d53de9839bca842418078 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:10:04 +0100 Subject: [PATCH 04/42] Test --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index 8172c50a..d96253ca 100644 --- a/action.yml +++ b/action.yml @@ -35,7 +35,7 @@ runs: - name: Print Action Information run: | echo "github.event_name: ${{ github.event_name }}" - echo "github.event_action: ${{ github.event_action }}" + echo "github.event.action: ${{ github.event.action }}" echo "github.repository: ${{ github.repository }}" echo "github.event.pull_request.head.repo.full_name: ${{ github.event.pull_request.head.repo.full_name }}" echo "github.actor: ${{ github.actor }}" From 9ddc57b4c6f268ca657a42dfd8b360cf0a317270 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:12:54 +0100 Subject: [PATCH 05/42] Test --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index d96253ca..8f06711e 100644 --- a/action.yml +++ b/action.yml @@ -125,7 +125,7 @@ runs: # Custom Python Script for Summary -------------------------------------------------------------------------------- - name: Summarize PR - if: (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event_action == 'opened' || inputs.event_action == 'closed') + if: (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event.action == 'opened' || inputs.event.action == 'closed') run: | python path/to/summary_script.py shell: bash From 11c903bdc136b29f2b738e214438778a126d7da7 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:21:08 +0100 Subject: [PATCH 06/42] Update action.yml --- action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/action.yml b/action.yml index 412ed368..3ace6784 100644 --- a/action.yml +++ b/action.yml @@ -33,8 +33,8 @@ runs: steps: - name: Print Action Information run: | - echo "github.event_name: ${{ github.event_name }}" - echo "github.event.action: ${{ github.event.action }}" + echo "github.event_name: ${{ github.event_name }}" # i.e. "pull_request" + echo "github.event.action: ${{ github.event.action }}" # i.e. "open" or "close" echo "github.repository: ${{ github.repository }}" echo "github.event.pull_request.head.repo.full_name: ${{ github.event.pull_request.head.repo.full_name }}" echo "github.actor: ${{ github.actor }}" From d8fe686acdbf1042f49b36fd9277c0f1e7940793 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:22:45 +0100 Subject: [PATCH 07/42] Update action.yml --- action.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/action.yml b/action.yml index 3ace6784..9275650c 100644 --- a/action.yml +++ b/action.yml @@ -28,6 +28,10 @@ inputs: description: "Run Broken Links checks" required: false default: "false" + summary: + description: "Run PR Summary" + required: false + default: "false" runs: using: "composite" steps: @@ -132,11 +136,11 @@ runs: shell: bash continue-on-error: false - # Custom Python Script for Summary -------------------------------------------------------------------------------- + # Custom Python Script for Summary --------------------------------------------------------------------------------- - name: Summarize PR - if: (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event.action == 'opened' || inputs.event.action == 'closed') + if: inputs.summary == 'true' && (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event.action == 'opened' || inputs.event.action == 'closed') run: | - python path/to/summary_script.py + python custom_script.py shell: bash continue-on-error: true From 67add8c63f622d75beaed073770eb71ee151a16c Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:32:08 +0100 Subject: [PATCH 08/42] Test --- action.yml | 4 ++++ custom_script.py | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/action.yml b/action.yml index 9275650c..f3955040 100644 --- a/action.yml +++ b/action.yml @@ -142,6 +142,10 @@ runs: run: | python custom_script.py shell: bash + env: + REPO_NAME: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number }} + GITHUB_TOKEN: ${{ inputs.token }} continue-on-error: true # Broken links ----------------------------------------------------------------------------------------------------- diff --git a/custom_script.py b/custom_script.py index 7fed16a4..c83482c6 100644 --- a/custom_script.py +++ b/custom_script.py @@ -1 +1,32 @@ -print("CUSTOM PYTHON SCRIPT IS WORKING!!") +import os + +print("CUSTOM PYTHON SCRIPT IS WORKING 1!!") + +import requests + +print("CUSTOM PYTHON SCRIPT IS WORKING 2!!") + + +def get_pr_diff(repo_name, pr_number, github_token): + """Fetches the diff of a specific PR from a GitHub repository.""" + url = f"https://api.github.com/repos/{repo_name}/pulls/{pr_number}" + headers = { + "Authorization": f"token {github_token}", + "Accept": "application/vnd.github.v3.diff" + } + response = requests.get(url, headers=headers) + if response.status_code == 200: + return response.text + else: + return None + + +# Example usage +repo_name = os.environ['REPO_NAME'] +pr_number = os.environ['PR_NUMBER'] +github_token = os.environ['GITHUB_TOKEN'] +pr_diff = get_pr_diff(repo_name, pr_number, github_token) +if pr_diff: + print(pr_diff) +else: + print("Failed to fetch PR diff") From ed32b59e6b4a68def3a9a9dfe9f7360aa26c485b Mon Sep 17 00:00:00 2001 From: UltralyticsAssistant Date: Thu, 18 Jan 2024 20:32:35 +0000 Subject: [PATCH 09/42] Auto-format by https://ultralytics.com/actions --- custom_script.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/custom_script.py b/custom_script.py index c83482c6..b98a66f1 100644 --- a/custom_script.py +++ b/custom_script.py @@ -10,10 +10,7 @@ def get_pr_diff(repo_name, pr_number, github_token): """Fetches the diff of a specific PR from a GitHub repository.""" url = f"https://api.github.com/repos/{repo_name}/pulls/{pr_number}" - headers = { - "Authorization": f"token {github_token}", - "Accept": "application/vnd.github.v3.diff" - } + headers = {"Authorization": f"token {github_token}", "Accept": "application/vnd.github.v3.diff"} response = requests.get(url, headers=headers) if response.status_code == 200: return response.text @@ -22,9 +19,9 @@ def get_pr_diff(repo_name, pr_number, github_token): # Example usage -repo_name = os.environ['REPO_NAME'] -pr_number = os.environ['PR_NUMBER'] -github_token = os.environ['GITHUB_TOKEN'] +repo_name = os.environ["REPO_NAME"] +pr_number = os.environ["PR_NUMBER"] +github_token = os.environ["GITHUB_TOKEN"] pr_diff = get_pr_diff(repo_name, pr_number, github_token) if pr_diff: print(pr_diff) From d6e0749a1c9969ea6e8581cb9ce0e984a869f438 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:33:46 +0100 Subject: [PATCH 10/42] Test --- custom_script.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/custom_script.py b/custom_script.py index c83482c6..3cbb8f25 100644 --- a/custom_script.py +++ b/custom_script.py @@ -22,9 +22,9 @@ def get_pr_diff(repo_name, pr_number, github_token): # Example usage -repo_name = os.environ['REPO_NAME'] -pr_number = os.environ['PR_NUMBER'] -github_token = os.environ['GITHUB_TOKEN'] +repo_name = os.getenv('REPO_NAME') +pr_number = os.getenv('PR_NUMBER') +github_token = os.getenv('GITHUB_TOKEN') pr_diff = get_pr_diff(repo_name, pr_number, github_token) if pr_diff: print(pr_diff) From a116fb5c627282e958ef97584063c9840af18896 Mon Sep 17 00:00:00 2001 From: UltralyticsAssistant Date: Thu, 18 Jan 2024 20:34:34 +0000 Subject: [PATCH 11/42] Auto-format by https://ultralytics.com/actions --- custom_script.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/custom_script.py b/custom_script.py index 3cbb8f25..f8bf8a5c 100644 --- a/custom_script.py +++ b/custom_script.py @@ -10,10 +10,7 @@ def get_pr_diff(repo_name, pr_number, github_token): """Fetches the diff of a specific PR from a GitHub repository.""" url = f"https://api.github.com/repos/{repo_name}/pulls/{pr_number}" - headers = { - "Authorization": f"token {github_token}", - "Accept": "application/vnd.github.v3.diff" - } + headers = {"Authorization": f"token {github_token}", "Accept": "application/vnd.github.v3.diff"} response = requests.get(url, headers=headers) if response.status_code == 200: return response.text @@ -22,9 +19,9 @@ def get_pr_diff(repo_name, pr_number, github_token): # Example usage -repo_name = os.getenv('REPO_NAME') -pr_number = os.getenv('PR_NUMBER') -github_token = os.getenv('GITHUB_TOKEN') +repo_name = os.getenv("REPO_NAME") +pr_number = os.getenv("PR_NUMBER") +github_token = os.getenv("GITHUB_TOKEN") pr_diff = get_pr_diff(repo_name, pr_number, github_token) if pr_diff: print(pr_diff) From 3e6f8868920b9b2a16e1227ac8eb277291a7ab1a Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:36:25 +0100 Subject: [PATCH 12/42] Test --- custom_script.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/custom_script.py b/custom_script.py index f8bf8a5c..abecf818 100644 --- a/custom_script.py +++ b/custom_script.py @@ -12,6 +12,8 @@ def get_pr_diff(repo_name, pr_number, github_token): url = f"https://api.github.com/repos/{repo_name}/pulls/{pr_number}" headers = {"Authorization": f"token {github_token}", "Accept": "application/vnd.github.v3.diff"} response = requests.get(url, headers=headers) + + print(response) if response.status_code == 200: return response.text else: @@ -22,6 +24,8 @@ def get_pr_diff(repo_name, pr_number, github_token): repo_name = os.getenv("REPO_NAME") pr_number = os.getenv("PR_NUMBER") github_token = os.getenv("GITHUB_TOKEN") + +print(repo_name, pr_number, github_token) pr_diff = get_pr_diff(repo_name, pr_number, github_token) if pr_diff: print(pr_diff) From 85172ee3ae569b978e91a34035ce6ab427e37b26 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:37:09 +0100 Subject: [PATCH 13/42] Test --- .github/workflows/format.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 96184049..5b54b4f0 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -19,6 +19,7 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} # automatically generated python: true - prettier: true + docstrings: true + markdown: true spelling: false - links: true + links: false From 8f3e5dba71fbe71570f2405dba121661ecc38517 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:39:21 +0100 Subject: [PATCH 14/42] Test --- action.yml | 6 +----- custom_script.py | 28 +++++++++++++--------------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/action.yml b/action.yml index f3955040..ee0f8504 100644 --- a/action.yml +++ b/action.yml @@ -140,12 +140,8 @@ runs: - name: Summarize PR if: inputs.summary == 'true' && (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event.action == 'opened' || inputs.event.action == 'closed') run: | - python custom_script.py + python custom_script.py "${{ github.repository }}" "${{ github.event.pull_request.number }}" "${{ inputs.token }}" shell: bash - env: - REPO_NAME: ${{ github.repository }} - PR_NUMBER: ${{ github.event.pull_request.number }} - GITHUB_TOKEN: ${{ inputs.token }} continue-on-error: true # Broken links ----------------------------------------------------------------------------------------------------- diff --git a/custom_script.py b/custom_script.py index abecf818..e5a2a938 100644 --- a/custom_script.py +++ b/custom_script.py @@ -1,10 +1,12 @@ -import os - -print("CUSTOM PYTHON SCRIPT IS WORKING 1!!") +import sys import requests -print("CUSTOM PYTHON SCRIPT IS WORKING 2!!") +repo_name = sys.argv[1] +pr_number = sys.argv[2] +github_token = sys.argv[3] + +print("CUSTOM PYTHON SCRIPT IS WORKING 1!!") def get_pr_diff(repo_name, pr_number, github_token): @@ -20,14 +22,10 @@ def get_pr_diff(repo_name, pr_number, github_token): return None -# Example usage -repo_name = os.getenv("REPO_NAME") -pr_number = os.getenv("PR_NUMBER") -github_token = os.getenv("GITHUB_TOKEN") - -print(repo_name, pr_number, github_token) -pr_diff = get_pr_diff(repo_name, pr_number, github_token) -if pr_diff: - print(pr_diff) -else: - print("Failed to fetch PR diff") +if __name__ == "__main__": + print(repo_name, pr_number, github_token) + pr_diff = get_pr_diff(repo_name, pr_number, github_token) + if pr_diff: + print(pr_diff) + else: + print("Failed to fetch PR diff") From d7b96519afa89bf32a9196200f9a036cd12aa3a6 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:42:45 +0100 Subject: [PATCH 15/42] Test --- action.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/action.yml b/action.yml index ee0f8504..3b67f6bf 100644 --- a/action.yml +++ b/action.yml @@ -40,6 +40,7 @@ runs: echo "github.event_name: ${{ github.event_name }}" # i.e. "pull_request" echo "github.event.action: ${{ github.event.action }}" # i.e. "open" or "close" echo "github.repository: ${{ github.repository }}" + echo "github.event.pull_request.number: ${{ github.event.pull_request.number }}" echo "github.event.pull_request.head.repo.full_name: ${{ github.event.pull_request.head.repo.full_name }}" echo "github.actor: ${{ github.actor }}" echo "github.event.pull_request.head.ref: ${{ github.event.pull_request.head.ref }}" From 27165ce3d9f215ca465bf13eb5f1094d4f6752f5 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:43:40 +0100 Subject: [PATCH 16/42] Test --- custom_script.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/custom_script.py b/custom_script.py index e5a2a938..5c511e46 100644 --- a/custom_script.py +++ b/custom_script.py @@ -2,6 +2,8 @@ import requests +print(sys.argv) + repo_name = sys.argv[1] pr_number = sys.argv[2] github_token = sys.argv[3] From 28a139aacdfba302f1a1316300899423ba4f9e80 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:44:21 +0100 Subject: [PATCH 17/42] Test --- action.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/action.yml b/action.yml index 3b67f6bf..7d4fd2a1 100644 --- a/action.yml +++ b/action.yml @@ -113,14 +113,6 @@ runs: shell: bash continue-on-error: true - # Custom Python Script ------------------------------------------------------------------------------------------- - - name: Run Custom Python Script - if: inputs.python == 'true' - run: | - python custom_script.py - shell: bash - continue-on-error: true - # Commit Changes --------------------------------------------------------------------------------------------------- - name: Commit and Push Changes run: | From 435b6cb26ed2740f4b4db2f5a8d74044cb4fd2a9 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:46:48 +0100 Subject: [PATCH 18/42] Test --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index 7d4fd2a1..889d193a 100644 --- a/action.yml +++ b/action.yml @@ -131,7 +131,7 @@ runs: # Custom Python Script for Summary --------------------------------------------------------------------------------- - name: Summarize PR - if: inputs.summary == 'true' && (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event.action == 'opened' || inputs.event.action == 'closed') + # if: inputs.summary == 'true' && (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event.action == 'opened' || inputs.event.action == 'closed') run: | python custom_script.py "${{ github.repository }}" "${{ github.event.pull_request.number }}" "${{ inputs.token }}" shell: bash From 2ab17f0914189e33ae1ba5188003206eb6af42bc Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:49:29 +0100 Subject: [PATCH 19/42] Test --- action.yml | 6 ++++- custom_script.py => utils/run_pr_summary.py | 28 +++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-) rename custom_script.py => utils/run_pr_summary.py (56%) diff --git a/action.yml b/action.yml index 889d193a..6993faeb 100644 --- a/action.yml +++ b/action.yml @@ -132,8 +132,12 @@ runs: # Custom Python Script for Summary --------------------------------------------------------------------------------- - name: Summarize PR # if: inputs.summary == 'true' && (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event.action == 'opened' || inputs.event.action == 'closed') + env: + REPO_NAME: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number }} + GITHUB_TOKEN: ${{ inputs.token }} run: | - python custom_script.py "${{ github.repository }}" "${{ github.event.pull_request.number }}" "${{ inputs.token }}" + python utils/run_pr_summary.py shell: bash continue-on-error: true diff --git a/custom_script.py b/utils/run_pr_summary.py similarity index 56% rename from custom_script.py rename to utils/run_pr_summary.py index 5c511e46..21acb62b 100644 --- a/custom_script.py +++ b/utils/run_pr_summary.py @@ -1,15 +1,7 @@ -import sys +import os import requests -print(sys.argv) - -repo_name = sys.argv[1] -pr_number = sys.argv[2] -github_token = sys.argv[3] - -print("CUSTOM PYTHON SCRIPT IS WORKING 1!!") - def get_pr_diff(repo_name, pr_number, github_token): """Fetches the diff of a specific PR from a GitHub repository.""" @@ -24,10 +16,14 @@ def get_pr_diff(repo_name, pr_number, github_token): return None -if __name__ == "__main__": - print(repo_name, pr_number, github_token) - pr_diff = get_pr_diff(repo_name, pr_number, github_token) - if pr_diff: - print(pr_diff) - else: - print("Failed to fetch PR diff") +# Example usage +repo_name = os.getenv("REPO_NAME") +pr_number = os.getenv("PR_NUMBER") +github_token = os.getenv("GITHUB_TOKEN") + +print(repo_name, pr_number, github_token) +pr_diff = get_pr_diff(repo_name, pr_number, github_token) +if pr_diff: + print(pr_diff) +else: + print("Failed to fetch PR diff") From 6a41badb2f5228da875f61d976944971a47e4350 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:50:30 +0100 Subject: [PATCH 20/42] Test --- utils/run_pr_summary.py | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index 21acb62b..4f0fdadd 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -8,22 +8,17 @@ def get_pr_diff(repo_name, pr_number, github_token): url = f"https://api.github.com/repos/{repo_name}/pulls/{pr_number}" headers = {"Authorization": f"token {github_token}", "Accept": "application/vnd.github.v3.diff"} response = requests.get(url, headers=headers) - - print(response) - if response.status_code == 200: - return response.text - else: - return None + return response.text if response.status_code == 200 else "" -# Example usage -repo_name = os.getenv("REPO_NAME") -pr_number = os.getenv("PR_NUMBER") -github_token = os.getenv("GITHUB_TOKEN") +if __name__ == "__main__": + repo_name = os.getenv("REPO_NAME") + pr_number = os.getenv("PR_NUMBER") + github_token = os.getenv("GITHUB_TOKEN") -print(repo_name, pr_number, github_token) -pr_diff = get_pr_diff(repo_name, pr_number, github_token) -if pr_diff: - print(pr_diff) -else: - print("Failed to fetch PR diff") + print(repo_name, pr_number, github_token) + pr_diff = get_pr_diff(repo_name, pr_number, github_token) + if pr_diff: + print(pr_diff) + else: + print("Failed to fetch PR diff") From 6f1172f529d69a8987646b44b536b4ea53cfb590 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:51:52 +0100 Subject: [PATCH 21/42] Test --- utils/run_pr_summary.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index 4f0fdadd..b24f43e5 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -2,23 +2,18 @@ import requests +REPO_NAME = os.getenv("REPO_NAME") +PR_NUMBER = os.getenv("PR_NUMBER") +github_token = os.getenv("GITHUB_TOKEN") -def get_pr_diff(repo_name, pr_number, github_token): + +def get_pr_diff(): """Fetches the diff of a specific PR from a GitHub repository.""" - url = f"https://api.github.com/repos/{repo_name}/pulls/{pr_number}" - headers = {"Authorization": f"token {github_token}", "Accept": "application/vnd.github.v3.diff"} + url = f"https://api.github.com/repos/{REPO_NAME}/pulls/{PR_NUMBER}" + headers = {"Authorization": f"token {GITHUB_TOKEN}", "Accept": "application/vnd.github.v3.diff"} response = requests.get(url, headers=headers) return response.text if response.status_code == 200 else "" if __name__ == "__main__": - repo_name = os.getenv("REPO_NAME") - pr_number = os.getenv("PR_NUMBER") - github_token = os.getenv("GITHUB_TOKEN") - - print(repo_name, pr_number, github_token) - pr_diff = get_pr_diff(repo_name, pr_number, github_token) - if pr_diff: - print(pr_diff) - else: - print("Failed to fetch PR diff") + pr_diff = get_pr_diff() From fe993686a4b18e07230846bd6a54215484ecde1b Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 21:58:46 +0100 Subject: [PATCH 22/42] Test --- utils/run_pr_summary.py | 80 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 76 insertions(+), 4 deletions(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index b24f43e5..6bbb3db7 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -1,19 +1,91 @@ import os import requests +from assistant.utils import openai_client +from assistant.utils.llm import create_openai_llm + +MODEL_NAME = "gpt-4-1106-preview" +MODEL = create_openai_llm(model_name=MODEL_NAME) +CONTEXT_TOKENS = 128000 +SUMMARY_START = ( + "## 🛠️ PR Summary\n\nMade with ❤️ by [Ultralytics Actions](https://github.com/ultralytics/actions)\n\n" +) REPO_NAME = os.getenv("REPO_NAME") PR_NUMBER = os.getenv("PR_NUMBER") -github_token = os.getenv("GITHUB_TOKEN") +GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") +GITHUB_HEADERS = {"Authorization": f"token {GITHUB_TOKEN}"} -def get_pr_diff(): +def get_pr_diff(repo_name, pr_number): """Fetches the diff of a specific PR from a GitHub repository.""" - url = f"https://api.github.com/repos/{REPO_NAME}/pulls/{PR_NUMBER}" + url = f"https://api.github.com/repos/{repo_name}/pulls/{pr_number}" headers = {"Authorization": f"token {GITHUB_TOKEN}", "Accept": "application/vnd.github.v3.diff"} response = requests.get(url, headers=headers) return response.text if response.status_code == 200 else "" +def generate_pr_summary(repo_name, pr_title, diff_text): + """Generates a professionally written yet accessible summary of a PR using OpenAI's API.""" + if not diff_text: + diff_text = "**ERROR: DIFF IS EMPTY, THERE ARE ZERO CODE CHANGES IN THIS PR." + ratio = 3.3 # about 3.3 characters per token + limit = round(CONTEXT_TOKENS * ratio * 0.7) # use up to 70% of the context window + messages = [ + { + "role": "system", + "content": "You are an Ultralytics AI assistant skilled in software development and technical communication. Your task is to summarize GitHub PRs from Ultralytics in a way that is accurate, concise, and understandable to both expert developers and non-expert users. Focus on highlighting the key changes and their impact in simple, concise terms.", + }, + { + "role": "user", + "content": f"Summarize this '{repo_name}' PR, focusing on major changes, their purpose, and potential impact. Keep the summary clear and concise, suitable for a broad audience. Add emojis to enliven the summary. Reply directly with a summary along these example guidelines, though feel free to adjust as appropriate:\n\n" + f"### 🌟 Summary (single-line synopsis)\n" + f"### 📊 Key Changes (bullet points highlighting any major changes)\n" + f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" + f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", + }, + ] + use_client = True + if use_client: + response = openai_client().chat.completions.create(model=MODEL_NAME, messages=messages).choices[0] + else: + response = MODEL.chat(messages=messages) + reply = response.message.content.strip() + if len(diff_text) > limit: + return SUMMARY_START + "**WARNING ⚠️** this PR is very large, summary may not cover all changes.\n\n" + reply + else: + return SUMMARY_START + reply + + +def update_pr_description(repo_name, pr_number, new_summary): + """Updates the original PR description with a new summary, replacing an existing summary if found.""" + # Fetch the current PR description + pr_url = f"https://api.github.com/repos/{repo_name}/pulls/{pr_number}" + pr_response = requests.get(pr_url, headers=GITHUB_HEADERS) + pr_data = pr_response.json() + current_description = pr_data.get("body") or "" # warning, can be None + + # Check if existing summary is present and update accordingly + if SUMMARY_START in current_description: + updated_description = current_description.split(SUMMARY_START)[0] + new_summary + else: + updated_description = current_description + "\n\n" + new_summary + + # Update the PR description + update_response = requests.patch(pr_url, json={"body": updated_description}, headers=GITHUB_HEADERS) + return update_response.status_code + + if __name__ == "__main__": - pr_diff = get_pr_diff() + # Fetch PR details + pr_diff = get_pr_diff(REPO_NAME, PR_NUMBER) + + # Generate PR summary + summary = generate_pr_summary(REPO_NAME, PR_NUMBER, pr_diff) + + # Update PR description + status_code = update_pr_description(REPO_NAME, PR_NUMBER, summary) + if status_code == 200: + print("PR description updated successfully.") + else: + print(f"Failed to update PR description. Status code: {status_code}") From 237a33f606c6b169a37b1d4123c3d0c06082d479 Mon Sep 17 00:00:00 2001 From: UltralyticsAssistant Date: Thu, 18 Jan 2024 20:59:13 +0000 Subject: [PATCH 23/42] Auto-format by https://ultralytics.com/actions --- utils/run_pr_summary.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index 6bbb3db7..bd87f991 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -39,10 +39,10 @@ def generate_pr_summary(repo_name, pr_title, diff_text): { "role": "user", "content": f"Summarize this '{repo_name}' PR, focusing on major changes, their purpose, and potential impact. Keep the summary clear and concise, suitable for a broad audience. Add emojis to enliven the summary. Reply directly with a summary along these example guidelines, though feel free to adjust as appropriate:\n\n" - f"### 🌟 Summary (single-line synopsis)\n" - f"### 📊 Key Changes (bullet points highlighting any major changes)\n" - f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" - f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", + f"### 🌟 Summary (single-line synopsis)\n" + f"### 📊 Key Changes (bullet points highlighting any major changes)\n" + f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" + f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", }, ] use_client = True From e8d60b387e0e87d8d26956e23ff245e31ece1fae Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 22:09:07 +0100 Subject: [PATCH 24/42] Test --- action.yml | 13 +++++++++++++ utils/run_pr_summary.py | 27 +++++++++++++++++++-------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/action.yml b/action.yml index 6993faeb..d63a364c 100644 --- a/action.yml +++ b/action.yml @@ -32,6 +32,15 @@ inputs: description: "Run PR Summary" required: false default: "false" + openai_api_key: + description: "OpenAI API Key" + required: false + openai_azure_api_key: + description: "OpenAI Azure API Key" + required: false + openai_azure_endpoint: + description: "OpenAI Azure Endpoint" + required: false runs: using: "composite" steps: @@ -136,7 +145,11 @@ runs: REPO_NAME: ${{ github.repository }} PR_NUMBER: ${{ github.event.pull_request.number }} GITHUB_TOKEN: ${{ inputs.token }} + OPENAI_API_KEY: ${{ inputs.openai_api_key }} + OPENAI_AZURE_API_KEY: ${{ inputs.openai_azure_api_key }} + OPENAI_AZURE_ENDPOINT: ${{ inputs.openai_azure_endpoint }} run: | + pip install openai python utils/run_pr_summary.py shell: bash continue-on-error: true diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index 6bbb3db7..620d5487 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -1,11 +1,9 @@ import os import requests -from assistant.utils import openai_client -from assistant.utils.llm import create_openai_llm +from openai import OpenAI, AzureOpenAI MODEL_NAME = "gpt-4-1106-preview" -MODEL = create_openai_llm(model_name=MODEL_NAME) CONTEXT_TOKENS = 128000 SUMMARY_START = ( "## 🛠️ PR Summary\n\nMade with ❤️ by [Ultralytics Actions](https://github.com/ultralytics/actions)\n\n" @@ -15,6 +13,23 @@ PR_NUMBER = os.getenv("PR_NUMBER") GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") GITHUB_HEADERS = {"Authorization": f"token {GITHUB_TOKEN}"} +OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") +OPENAI_AZURE_API_KEY = os.getenv("OPENAI_AZURE_API_KEY") +OPENAI_AZURE_ENDPOINT = os.getenv("OPENAI_AZURE_ENDPOINT") + + +def openai_client(azure=True): + """Returns OpenAI client instance.""" + + return ( + AzureOpenAI( + api_key=OPENAI_AZURE_API_KEY, + api_version="2023-09-01-preview", + azure_endpoint=OPENAI_AZURE_ENDPOINT, + ) + if azure + else OpenAI(api_key=OPENAI_API_KEY) + ) def get_pr_diff(repo_name, pr_number): @@ -45,11 +60,7 @@ def generate_pr_summary(repo_name, pr_title, diff_text): f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", }, ] - use_client = True - if use_client: - response = openai_client().chat.completions.create(model=MODEL_NAME, messages=messages).choices[0] - else: - response = MODEL.chat(messages=messages) + response = openai_client().chat.completions.create(model=MODEL_NAME, messages=messages).choices[0] reply = response.message.content.strip() if len(diff_text) > limit: return SUMMARY_START + "**WARNING ⚠️** this PR is very large, summary may not cover all changes.\n\n" + reply From e6d0ae9ce8023307c6aa00c8281f43b7f36ca204 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 22:25:35 +0100 Subject: [PATCH 25/42] Test --- .github/workflows/format.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 5b54b4f0..422cb808 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -23,3 +23,5 @@ jobs: markdown: true spelling: false links: false + summary: true + openai_api_key: ${{ secrets.OPENAI_API_KEY }} From 39641435bdb0f6709c0ef2888f4a4d6d9aa4a7ed Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 22:26:56 +0100 Subject: [PATCH 26/42] Test --- utils/run_pr_summary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index ed45003d..f7affec4 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -18,7 +18,7 @@ OPENAI_AZURE_ENDPOINT = os.getenv("OPENAI_AZURE_ENDPOINT") -def openai_client(azure=True): +def openai_client(azure=False): """Returns OpenAI client instance.""" return ( From 5030f0aecaea9bf3e4ac42fdbebb12149f8c59b3 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 22:27:39 +0100 Subject: [PATCH 27/42] Test --- utils/run_pr_summary.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index f7affec4..7ce36e23 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -18,7 +18,7 @@ OPENAI_AZURE_ENDPOINT = os.getenv("OPENAI_AZURE_ENDPOINT") -def openai_client(azure=False): +def openai_client(azure=OPENAI_AZURE_ENDPOINT and OPENAI_AZURE_API_KEY): """Returns OpenAI client instance.""" return ( From de990e9cf9958202fde3677170786a35f3d33702 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 22:41:54 +0100 Subject: [PATCH 28/42] Test --- action.yml | 5 +++++ utils/run_pr_summary.py | 30 ++++++++++++------------------ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/action.yml b/action.yml index d63a364c..2181f700 100644 --- a/action.yml +++ b/action.yml @@ -41,6 +41,10 @@ inputs: openai_azure_endpoint: description: "OpenAI Azure Endpoint" required: false + openai_model: + description: "OpenAI Model" + required: false + default: "gpt-4-1106-preview" runs: using: "composite" steps: @@ -148,6 +152,7 @@ runs: OPENAI_API_KEY: ${{ inputs.openai_api_key }} OPENAI_AZURE_API_KEY: ${{ inputs.openai_azure_api_key }} OPENAI_AZURE_ENDPOINT: ${{ inputs.openai_azure_endpoint }} + OPENAI_MODEL: ${{ inputs.openai_model }} run: | pip install openai python utils/run_pr_summary.py diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index 7ce36e23..0f6a54ab 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -3,12 +3,6 @@ import requests from openai import OpenAI, AzureOpenAI -MODEL_NAME = "gpt-4-1106-preview" -CONTEXT_TOKENS = 128000 -SUMMARY_START = ( - "## 🛠️ PR Summary\n\nMade with ❤️ by [Ultralytics Actions](https://github.com/ultralytics/actions)\n\n" -) - REPO_NAME = os.getenv("REPO_NAME") PR_NUMBER = os.getenv("PR_NUMBER") GITHUB_TOKEN = os.getenv("GITHUB_TOKEN") @@ -16,17 +10,17 @@ OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") OPENAI_AZURE_API_KEY = os.getenv("OPENAI_AZURE_API_KEY") OPENAI_AZURE_ENDPOINT = os.getenv("OPENAI_AZURE_ENDPOINT") +OPENAI_MODEL = os.getenv("OPENAI_MODEL") +OPENAI_MODEL_TOKENS = 128000 +SUMMARY_START = ( + "## 🛠️ PR Summary\n\nMade with ❤️ by [Ultralytics Actions](https://github.com/ultralytics/actions)\n\n" +) def openai_client(azure=OPENAI_AZURE_ENDPOINT and OPENAI_AZURE_API_KEY): """Returns OpenAI client instance.""" - return ( - AzureOpenAI( - api_key=OPENAI_AZURE_API_KEY, - api_version="2023-09-01-preview", - azure_endpoint=OPENAI_AZURE_ENDPOINT, - ) + AzureOpenAI(api_key=OPENAI_AZURE_API_KEY, api_version="2023-09-01-preview", azure_endpoint=OPENAI_AZURE_ENDPOINT) if azure else OpenAI(api_key=OPENAI_API_KEY) ) @@ -45,7 +39,7 @@ def generate_pr_summary(repo_name, pr_title, diff_text): if not diff_text: diff_text = "**ERROR: DIFF IS EMPTY, THERE ARE ZERO CODE CHANGES IN THIS PR." ratio = 3.3 # about 3.3 characters per token - limit = round(CONTEXT_TOKENS * ratio * 0.7) # use up to 70% of the context window + limit = round(OPENAI_MODEL_TOKENS * ratio * 0.7) # use up to 70% of the context window messages = [ { "role": "system", @@ -54,13 +48,13 @@ def generate_pr_summary(repo_name, pr_title, diff_text): { "role": "user", "content": f"Summarize this '{repo_name}' PR, focusing on major changes, their purpose, and potential impact. Keep the summary clear and concise, suitable for a broad audience. Add emojis to enliven the summary. Reply directly with a summary along these example guidelines, though feel free to adjust as appropriate:\n\n" - f"### 🌟 Summary (single-line synopsis)\n" - f"### 📊 Key Changes (bullet points highlighting any major changes)\n" - f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" - f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", + f"### 🌟 Summary (single-line synopsis)\n" + f"### 📊 Key Changes (bullet points highlighting any major changes)\n" + f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" + f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", }, ] - response = openai_client().chat.completions.create(model=MODEL_NAME, messages=messages).choices[0] + response = openai_client().chat.completions.create(model=OPENAI_MODEL, messages=messages).choices[0] reply = response.message.content.strip() if len(diff_text) > limit: return SUMMARY_START + "**WARNING ⚠️** this PR is very large, summary may not cover all changes.\n\n" + reply From 0dce74a95f14942630d79ab1c96c44d2e859e657 Mon Sep 17 00:00:00 2001 From: UltralyticsAssistant Date: Thu, 18 Jan 2024 21:42:19 +0000 Subject: [PATCH 29/42] Auto-format by https://ultralytics.com/actions --- utils/run_pr_summary.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index 0f6a54ab..e7be824e 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -20,7 +20,9 @@ def openai_client(azure=OPENAI_AZURE_ENDPOINT and OPENAI_AZURE_API_KEY): """Returns OpenAI client instance.""" return ( - AzureOpenAI(api_key=OPENAI_AZURE_API_KEY, api_version="2023-09-01-preview", azure_endpoint=OPENAI_AZURE_ENDPOINT) + AzureOpenAI( + api_key=OPENAI_AZURE_API_KEY, api_version="2023-09-01-preview", azure_endpoint=OPENAI_AZURE_ENDPOINT + ) if azure else OpenAI(api_key=OPENAI_API_KEY) ) @@ -48,10 +50,10 @@ def generate_pr_summary(repo_name, pr_title, diff_text): { "role": "user", "content": f"Summarize this '{repo_name}' PR, focusing on major changes, their purpose, and potential impact. Keep the summary clear and concise, suitable for a broad audience. Add emojis to enliven the summary. Reply directly with a summary along these example guidelines, though feel free to adjust as appropriate:\n\n" - f"### 🌟 Summary (single-line synopsis)\n" - f"### 📊 Key Changes (bullet points highlighting any major changes)\n" - f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" - f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", + f"### 🌟 Summary (single-line synopsis)\n" + f"### 📊 Key Changes (bullet points highlighting any major changes)\n" + f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" + f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", }, ] response = openai_client().chat.completions.create(model=OPENAI_MODEL, messages=messages).choices[0] From 11bc73b5c36189641f64a48529ad1bdbc29cfbb6 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 22:52:25 +0100 Subject: [PATCH 30/42] Test --- .github/workflows/format.yml | 4 +++- action.yml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 422cb808..fa9aa9f5 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -24,4 +24,6 @@ jobs: spelling: false links: false summary: true - openai_api_key: ${{ secrets.OPENAI_API_KEY }} + #openai_api_key: ${{ secrets.OPENAI_API_KEY }} + openai_azure_api_key: ${{ secrets.OPENAI_AZURE_API_KEY }} + openai_azure_endpoint: ${{ secrets.OPENAI_AZURE_ENDPOINT }} diff --git a/action.yml b/action.yml index 2181f700..1e7e8098 100644 --- a/action.yml +++ b/action.yml @@ -154,7 +154,7 @@ runs: OPENAI_AZURE_ENDPOINT: ${{ inputs.openai_azure_endpoint }} OPENAI_MODEL: ${{ inputs.openai_model }} run: | - pip install openai + pip install --no-cache -q openai python utils/run_pr_summary.py shell: bash continue-on-error: true From 19d28357fcf70f8e9e0d1c930e5fc5f3d1c81a90 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 22:55:40 +0100 Subject: [PATCH 31/42] Test --- utils/run_pr_summary.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index e7be824e..3b13bab2 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -16,6 +16,14 @@ "## 🛠️ PR Summary\n\nMade with ❤️ by [Ultralytics Actions](https://github.com/ultralytics/actions)\n\n" ) +# Checks +assert OPENAI_MODEL, "No model found, please define OPENAI_MODEL" +assert OPENAI_API_KEY or (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT), \ + "No OpenAI Keys found, please pass either OPENAI_API_KEY or both (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT)" +if OPENAI_AZURE_API_KEY or OPENAI_AZURE_ENDPOINT: + assert (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT), \ + "For Azure usage both both OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT must be passed." + def openai_client(azure=OPENAI_AZURE_ENDPOINT and OPENAI_AZURE_API_KEY): """Returns OpenAI client instance.""" @@ -50,10 +58,10 @@ def generate_pr_summary(repo_name, pr_title, diff_text): { "role": "user", "content": f"Summarize this '{repo_name}' PR, focusing on major changes, their purpose, and potential impact. Keep the summary clear and concise, suitable for a broad audience. Add emojis to enliven the summary. Reply directly with a summary along these example guidelines, though feel free to adjust as appropriate:\n\n" - f"### 🌟 Summary (single-line synopsis)\n" - f"### 📊 Key Changes (bullet points highlighting any major changes)\n" - f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" - f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", + f"### 🌟 Summary (single-line synopsis)\n" + f"### 📊 Key Changes (bullet points highlighting any major changes)\n" + f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" + f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", }, ] response = openai_client().chat.completions.create(model=OPENAI_MODEL, messages=messages).choices[0] From 0faabe318ca23663afeeafdf9eb7dacaf939e20c Mon Sep 17 00:00:00 2001 From: UltralyticsAssistant Date: Thu, 18 Jan 2024 21:56:03 +0000 Subject: [PATCH 32/42] Auto-format by https://ultralytics.com/actions --- utils/run_pr_summary.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index 3b13bab2..6ff0f97d 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -18,11 +18,13 @@ # Checks assert OPENAI_MODEL, "No model found, please define OPENAI_MODEL" -assert OPENAI_API_KEY or (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT), \ - "No OpenAI Keys found, please pass either OPENAI_API_KEY or both (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT)" +assert OPENAI_API_KEY or ( + OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT +), "No OpenAI Keys found, please pass either OPENAI_API_KEY or both (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT)" if OPENAI_AZURE_API_KEY or OPENAI_AZURE_ENDPOINT: - assert (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT), \ - "For Azure usage both both OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT must be passed." + assert ( + OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT + ), "For Azure usage both both OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT must be passed." def openai_client(azure=OPENAI_AZURE_ENDPOINT and OPENAI_AZURE_API_KEY): @@ -58,10 +60,10 @@ def generate_pr_summary(repo_name, pr_title, diff_text): { "role": "user", "content": f"Summarize this '{repo_name}' PR, focusing on major changes, their purpose, and potential impact. Keep the summary clear and concise, suitable for a broad audience. Add emojis to enliven the summary. Reply directly with a summary along these example guidelines, though feel free to adjust as appropriate:\n\n" - f"### 🌟 Summary (single-line synopsis)\n" - f"### 📊 Key Changes (bullet points highlighting any major changes)\n" - f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" - f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", + f"### 🌟 Summary (single-line synopsis)\n" + f"### 📊 Key Changes (bullet points highlighting any major changes)\n" + f"### 🎯 Purpose & Impact (bullet points explaining any benefits and potential impact to users)\n" + f"\n\nHere's the PR diff:\n\n{diff_text[:limit]}", }, ] response = openai_client().chat.completions.create(model=OPENAI_MODEL, messages=messages).choices[0] From 067320e405619ac90d05bb2ab168a4c69ef8854e Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 22:59:47 +0100 Subject: [PATCH 33/42] Test --- utils/run_pr_summary.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index 6ff0f97d..fae3fda2 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -10,6 +10,7 @@ OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") OPENAI_AZURE_API_KEY = os.getenv("OPENAI_AZURE_API_KEY") OPENAI_AZURE_ENDPOINT = os.getenv("OPENAI_AZURE_ENDPOINT") +OPENAI_AZURE_BOTH = OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT OPENAI_MODEL = os.getenv("OPENAI_MODEL") OPENAI_MODEL_TOKENS = 128000 SUMMARY_START = ( @@ -18,16 +19,12 @@ # Checks assert OPENAI_MODEL, "No model found, please define OPENAI_MODEL" -assert OPENAI_API_KEY or ( - OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT -), "No OpenAI Keys found, please pass either OPENAI_API_KEY or both (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT)" +assert OPENAI_API_KEY or OPENAI_AZURE_BOTH, "No OpenAI Keys found, please pass either OPENAI_API_KEY or both (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT)" if OPENAI_AZURE_API_KEY or OPENAI_AZURE_ENDPOINT: - assert ( - OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT - ), "For Azure usage both both OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT must be passed." + assert OPENAI_AZURE_BOTH, "For Azure usage both both OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT must be passed." -def openai_client(azure=OPENAI_AZURE_ENDPOINT and OPENAI_AZURE_API_KEY): +def openai_client(azure=OPENAI_AZURE_BOTH): """Returns OpenAI client instance.""" return ( AzureOpenAI( From c5ce7f6ec1d29b144c5f0a92bc04b92bc6e3148e Mon Sep 17 00:00:00 2001 From: UltralyticsAssistant Date: Thu, 18 Jan 2024 22:00:13 +0000 Subject: [PATCH 34/42] Auto-format by https://ultralytics.com/actions --- utils/run_pr_summary.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index fae3fda2..757670ea 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -19,7 +19,9 @@ # Checks assert OPENAI_MODEL, "No model found, please define OPENAI_MODEL" -assert OPENAI_API_KEY or OPENAI_AZURE_BOTH, "No OpenAI Keys found, please pass either OPENAI_API_KEY or both (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT)" +assert ( + OPENAI_API_KEY or OPENAI_AZURE_BOTH +), "No OpenAI Keys found, please pass either OPENAI_API_KEY or both (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT)" if OPENAI_AZURE_API_KEY or OPENAI_AZURE_ENDPOINT: assert OPENAI_AZURE_BOTH, "For Azure usage both both OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT must be passed." From 214389bfd20474492c0c2b752ee73f932417471d Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 23:02:53 +0100 Subject: [PATCH 35/42] Test --- .github/workflows/format.yml | 7 +++---- action.yml | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index fa9aa9f5..9829d8f3 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -17,13 +17,12 @@ jobs: - name: Run Ultralytics Formatting uses: ultralytics/actions@test-local-python-script with: - token: ${{ secrets.GITHUB_TOKEN }} # automatically generated + token: ${{ secrets.GITHUB_TOKEN }} # automatically generated, do not modify python: true - docstrings: true markdown: true spelling: false links: false - summary: true - #openai_api_key: ${{ secrets.OPENAI_API_KEY }} + summary: true # requires either 'openai_api_key' or both 'openai_azure_api_key' and 'openai_azure_endpoint' openai_azure_api_key: ${{ secrets.OPENAI_AZURE_API_KEY }} openai_azure_endpoint: ${{ secrets.OPENAI_AZURE_ENDPOINT }} + #openai_api_key: ${{ secrets.OPENAI_API_KEY }} diff --git a/action.yml b/action.yml index 1e7e8098..c08dfe37 100644 --- a/action.yml +++ b/action.yml @@ -142,9 +142,9 @@ runs: shell: bash continue-on-error: false - # Custom Python Script for Summary --------------------------------------------------------------------------------- + # PR Summary ------------------------------------------------------------------------------------------------------- - name: Summarize PR - # if: inputs.summary == 'true' && (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event.action == 'opened' || inputs.event.action == 'closed') + if: inputs.summary == 'true' && (github.event_name == 'pull_request' || github.event_name == 'pull_request_target') && (inputs.event.action == 'opened' || inputs.event.action == 'closed') env: REPO_NAME: ${{ github.repository }} PR_NUMBER: ${{ github.event.pull_request.number }} From 419fb41b767e73d5a3bf7110babd936fac0d9b6a Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 23:06:57 +0100 Subject: [PATCH 36/42] Test --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index c08dfe37..c81892c9 100644 --- a/action.yml +++ b/action.yml @@ -107,7 +107,7 @@ runs: # Prettier (JavaScript, JSX, Angular, Vue, Flow, TypeScript, CSS, HTML, JSON, GraphQL, Markdown, YAML) ------------- - name: Run Prettier - if: inputs.prettier == 'true' || inputs.markdown == 'true' + if: inputs.prettier == 'true' run: | npm install --global prettier npx prettier \ From 8f5a3cf9ab91cc5ff6fec51a70cbd59434079bd8 Mon Sep 17 00:00:00 2001 From: UltralyticsAssistant Date: Thu, 18 Jan 2024 22:07:18 +0000 Subject: [PATCH 37/42] Auto-format by https://ultralytics.com/actions --- README.md | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 2050af99..5b086125 100644 --- a/README.md +++ b/README.md @@ -32,29 +32,29 @@ To use this action in your Ultralytics repository: 2. **Add the Action:** Use the Ultralytics Actions in your workflow file as follows: - ```yaml - name: Ultralytics Actions - - on: - push: - branches: [main] - pull_request_target: - branches: [main] - - jobs: - format: - runs-on: ubuntu-latest - steps: - - name: Run Ultralytics Formatting - uses: ultralytics/actions@main - with: - token: ${{ secrets.GITHUB_TOKEN }} # automatically generated - python: true - docstrings: true - markdown: true - spelling: true - links: true - ``` + ```yaml + name: Ultralytics Actions + + on: + push: + branches: [main] + pull_request_target: + branches: [main] + + jobs: + format: + runs-on: ubuntu-latest + steps: + - name: Run Ultralytics Formatting + uses: ultralytics/actions@main + with: + token: ${{ secrets.GITHUB_TOKEN }} # automatically generated + python: true + docstrings: true + markdown: true + spelling: true + links: true + ``` 3. **Customize:** Adjust the workflow settings as necessary for your project. From 7875a7c08d4780fc31fcc1b6a02a1e6a6cff7f60 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 23:09:09 +0100 Subject: [PATCH 38/42] Test --- .github/workflows/format.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 9829d8f3..6666814c 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -9,6 +9,7 @@ on: branches: [main, master] pull_request: branches: [main, master] + types: [opened, closed, synchronize] jobs: format: From ac0e7681ab45e4adeff6e430ad436d784244eafc Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 23:12:05 +0100 Subject: [PATCH 39/42] Test --- .github/workflows/format.yml | 4 ++-- utils/run_pr_summary.py | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 6666814c..100a1605 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -16,14 +16,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Run Ultralytics Formatting - uses: ultralytics/actions@test-local-python-script + uses: ultralytics/actions@main with: token: ${{ secrets.GITHUB_TOKEN }} # automatically generated, do not modify python: true markdown: true spelling: false links: false - summary: true # requires either 'openai_api_key' or both 'openai_azure_api_key' and 'openai_azure_endpoint' + summary: true # requires either 'openai_api_key' or 'openai_azure_api_key' and 'openai_azure_endpoint' openai_azure_api_key: ${{ secrets.OPENAI_AZURE_API_KEY }} openai_azure_endpoint: ${{ secrets.OPENAI_AZURE_ENDPOINT }} #openai_api_key: ${{ secrets.OPENAI_API_KEY }} diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index 757670ea..383453cf 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -12,7 +12,7 @@ OPENAI_AZURE_ENDPOINT = os.getenv("OPENAI_AZURE_ENDPOINT") OPENAI_AZURE_BOTH = OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT OPENAI_MODEL = os.getenv("OPENAI_MODEL") -OPENAI_MODEL_TOKENS = 128000 +OPENAI_MODEL_TOKENS = 128000 # update with model SUMMARY_START = ( "## 🛠️ PR Summary\n\nMade with ❤️ by [Ultralytics Actions](https://github.com/ultralytics/actions)\n\n" ) @@ -20,7 +20,7 @@ # Checks assert OPENAI_MODEL, "No model found, please define OPENAI_MODEL" assert ( - OPENAI_API_KEY or OPENAI_AZURE_BOTH + OPENAI_API_KEY or OPENAI_AZURE_BOTH ), "No OpenAI Keys found, please pass either OPENAI_API_KEY or both (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT)" if OPENAI_AZURE_API_KEY or OPENAI_AZURE_ENDPOINT: assert OPENAI_AZURE_BOTH, "For Azure usage both both OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT must be passed." @@ -45,7 +45,7 @@ def get_pr_diff(repo_name, pr_number): return response.text if response.status_code == 200 else "" -def generate_pr_summary(repo_name, pr_title, diff_text): +def generate_pr_summary(repo_name, diff_text): """Generates a professionally written yet accessible summary of a PR using OpenAI's API.""" if not diff_text: diff_text = "**ERROR: DIFF IS EMPTY, THERE ARE ZERO CODE CHANGES IN THIS PR." @@ -94,10 +94,10 @@ def update_pr_description(repo_name, pr_number, new_summary): if __name__ == "__main__": # Fetch PR details - pr_diff = get_pr_diff(REPO_NAME, PR_NUMBER) + diff = get_pr_diff(REPO_NAME, PR_NUMBER) # Generate PR summary - summary = generate_pr_summary(REPO_NAME, PR_NUMBER, pr_diff) + summary = generate_pr_summary(REPO_NAME, diff) # Update PR description status_code = update_pr_description(REPO_NAME, PR_NUMBER, summary) From 18f8e1d9ebead009d81ae09820a3b4aebc5b949a Mon Sep 17 00:00:00 2001 From: UltralyticsAssistant Date: Thu, 18 Jan 2024 22:12:29 +0000 Subject: [PATCH 40/42] Auto-format by https://ultralytics.com/actions --- README.md | 46 ++++++++++++++++++++--------------------- utils/run_pr_summary.py | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 5b086125..2050af99 100644 --- a/README.md +++ b/README.md @@ -32,29 +32,29 @@ To use this action in your Ultralytics repository: 2. **Add the Action:** Use the Ultralytics Actions in your workflow file as follows: - ```yaml - name: Ultralytics Actions - - on: - push: - branches: [main] - pull_request_target: - branches: [main] - - jobs: - format: - runs-on: ubuntu-latest - steps: - - name: Run Ultralytics Formatting - uses: ultralytics/actions@main - with: - token: ${{ secrets.GITHUB_TOKEN }} # automatically generated - python: true - docstrings: true - markdown: true - spelling: true - links: true - ``` + ```yaml + name: Ultralytics Actions + + on: + push: + branches: [main] + pull_request_target: + branches: [main] + + jobs: + format: + runs-on: ubuntu-latest + steps: + - name: Run Ultralytics Formatting + uses: ultralytics/actions@main + with: + token: ${{ secrets.GITHUB_TOKEN }} # automatically generated + python: true + docstrings: true + markdown: true + spelling: true + links: true + ``` 3. **Customize:** Adjust the workflow settings as necessary for your project. diff --git a/utils/run_pr_summary.py b/utils/run_pr_summary.py index 383453cf..0e24e37e 100644 --- a/utils/run_pr_summary.py +++ b/utils/run_pr_summary.py @@ -20,7 +20,7 @@ # Checks assert OPENAI_MODEL, "No model found, please define OPENAI_MODEL" assert ( - OPENAI_API_KEY or OPENAI_AZURE_BOTH + OPENAI_API_KEY or OPENAI_AZURE_BOTH ), "No OpenAI Keys found, please pass either OPENAI_API_KEY or both (OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT)" if OPENAI_AZURE_API_KEY or OPENAI_AZURE_ENDPOINT: assert OPENAI_AZURE_BOTH, "For Azure usage both both OPENAI_AZURE_API_KEY and OPENAI_AZURE_ENDPOINT must be passed." From 9e326a39e65500d7914d4c74e6732c2fba23993d Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Thu, 18 Jan 2024 23:16:11 +0100 Subject: [PATCH 41/42] Test --- README.md | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 2050af99..20c2f15f 100644 --- a/README.md +++ b/README.md @@ -32,29 +32,28 @@ To use this action in your Ultralytics repository: 2. **Add the Action:** Use the Ultralytics Actions in your workflow file as follows: - ```yaml - name: Ultralytics Actions - - on: - push: - branches: [main] - pull_request_target: - branches: [main] - - jobs: - format: - runs-on: ubuntu-latest - steps: - - name: Run Ultralytics Formatting - uses: ultralytics/actions@main - with: - token: ${{ secrets.GITHUB_TOKEN }} # automatically generated - python: true - docstrings: true - markdown: true - spelling: true - links: true - ``` + ```yaml + name: Ultralytics Actions + + on: + push: + branches: [main] + pull_request_target: + branches: [main] + + jobs: + format: + runs-on: ubuntu-latest + steps: + - name: Run Ultralytics Formatting + uses: ultralytics/actions@main + with: + token: ${{ secrets.GITHUB_TOKEN }} # automatically generated + python: true + markdown: true + spelling: true + links: true + ``` 3. **Customize:** Adjust the workflow settings as necessary for your project. From de3539c6aba6c9a1d1195354e64c3634173d3ace Mon Sep 17 00:00:00 2001 From: UltralyticsAssistant Date: Thu, 18 Jan 2024 22:16:40 +0000 Subject: [PATCH 42/42] Auto-format by https://ultralytics.com/actions --- README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 20c2f15f..1f353e04 100644 --- a/README.md +++ b/README.md @@ -32,28 +32,28 @@ To use this action in your Ultralytics repository: 2. **Add the Action:** Use the Ultralytics Actions in your workflow file as follows: - ```yaml - name: Ultralytics Actions - - on: - push: - branches: [main] - pull_request_target: - branches: [main] - - jobs: - format: - runs-on: ubuntu-latest - steps: - - name: Run Ultralytics Formatting - uses: ultralytics/actions@main - with: - token: ${{ secrets.GITHUB_TOKEN }} # automatically generated - python: true - markdown: true - spelling: true - links: true - ``` + ```yaml + name: Ultralytics Actions + + on: + push: + branches: [main] + pull_request_target: + branches: [main] + + jobs: + format: + runs-on: ubuntu-latest + steps: + - name: Run Ultralytics Formatting + uses: ultralytics/actions@main + with: + token: ${{ secrets.GITHUB_TOKEN }} # automatically generated + python: true + markdown: true + spelling: true + links: true + ``` 3. **Customize:** Adjust the workflow settings as necessary for your project.