|
|
@@ -0,0 +1,57 @@
|
|
|
+import os
|
|
|
+import re
|
|
|
+import subprocess
|
|
|
+
|
|
|
+def run_git_command(command):
|
|
|
+ try:
|
|
|
+ result = subprocess.getoutput(command)
|
|
|
+ print(f"Git Command: {command}")
|
|
|
+ print(f"Git Output: {result}")
|
|
|
+ return result
|
|
|
+ except subprocess.CalledProcessError as e:
|
|
|
+ print(f"Error running command: {e}")
|
|
|
+ print(f"stderr: {e.stderr}")
|
|
|
+ return None
|
|
|
+
|
|
|
+def parse_merge_commit(line):
|
|
|
+ # Parse merge commit messages like:
|
|
|
+ # "355dc82 Merge pull request #71 from RooVetGit/better-error-handling"
|
|
|
+ pattern = r"([a-f0-9]+)\s+Merge pull request #(\d+) from (.+)"
|
|
|
+ match = re.match(pattern, line)
|
|
|
+ if match:
|
|
|
+ sha, pr_number, branch = match.groups()
|
|
|
+ return {
|
|
|
+ 'sha': sha,
|
|
|
+ 'pr_number': pr_number,
|
|
|
+ 'branch': branch
|
|
|
+ }
|
|
|
+ return None
|
|
|
+
|
|
|
+def get_version_refs():
|
|
|
+ # Get the merge commits with full message
|
|
|
+ command = 'git log --merges --pretty=oneline -n 3'
|
|
|
+ result = run_git_command(command)
|
|
|
+
|
|
|
+ if result:
|
|
|
+ commits = result.split('\n')
|
|
|
+ if len(commits) >= 3:
|
|
|
+ # Parse HEAD~1 (PR to generate notes for)
|
|
|
+ head_info = parse_merge_commit(commits[1])
|
|
|
+ # Parse HEAD~2 (previous PR to compare against)
|
|
|
+ base_info = parse_merge_commit(commits[2])
|
|
|
+
|
|
|
+ if head_info and base_info:
|
|
|
+ # Set output for GitHub Actions
|
|
|
+ with open(os.environ['GITHUB_OUTPUT'], 'a') as gha_outputs:
|
|
|
+ gha_outputs.write(f"head_ref={head_info['sha']}\n")
|
|
|
+ gha_outputs.write(f"base_ref={base_info['sha']}")
|
|
|
+
|
|
|
+ print(f"Head ref (PR #{head_info['pr_number']}): {head_info['sha']}")
|
|
|
+ print(f"Base ref (PR #{base_info['pr_number']}): {base_info['sha']}")
|
|
|
+ return head_info, base_info
|
|
|
+
|
|
|
+ print("Could not find or parse sufficient merge history")
|
|
|
+ return None, None
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ head_info, base_info = get_version_refs()
|