Compare commits
2 Commits
recyclingf
...
d5d7358f58
Author | SHA1 | Date | |
---|---|---|---|
d5d7358f58 | |||
9b362b3c73 |
@@ -14,17 +14,39 @@ def get_version():
|
||||
return version_match.group(1) if version_match else None
|
||||
|
||||
def get_last_tag():
|
||||
"""Get the last non-beta tag for changelog generation"""
|
||||
try:
|
||||
result = subprocess.run(['git', 'describe', '--tags', '--abbrev=0'],
|
||||
# Get all tags sorted by version
|
||||
result = subprocess.run(['git', 'tag', '-l', '--sort=-version:refname'],
|
||||
capture_output=True, text=True)
|
||||
return result.stdout.strip()
|
||||
if result.returncode != 0:
|
||||
return None
|
||||
|
||||
tags = result.stdout.strip().split('\n')
|
||||
|
||||
# Find the first (newest) non-beta tag
|
||||
for tag in tags:
|
||||
if tag and not '-beta' in tag.lower():
|
||||
print(f"Using last stable tag for changelog: {tag}")
|
||||
return tag
|
||||
|
||||
# Fallback: if no non-beta tags found, use the newest tag
|
||||
print("No stable tags found, using newest tag")
|
||||
if tags and tags[0]:
|
||||
return tags[0]
|
||||
return None
|
||||
except subprocess.CalledProcessError:
|
||||
return None
|
||||
|
||||
def categorize_commit(commit_msg):
|
||||
"""Categorize commit messages based on conventional commits"""
|
||||
lower_msg = commit_msg.lower()
|
||||
if any(x in lower_msg for x in ['feat', 'add', 'new']):
|
||||
|
||||
# Check for breaking changes first
|
||||
if ('!' in commit_msg and any(x in lower_msg for x in ['feat!', 'fix!', 'chore!', 'refactor!'])) or \
|
||||
'breaking change' in lower_msg or 'breaking:' in lower_msg:
|
||||
return 'Breaking Changes'
|
||||
elif any(x in lower_msg for x in ['feat', 'add', 'new']):
|
||||
return 'Added'
|
||||
elif any(x in lower_msg for x in ['fix', 'bug']):
|
||||
return 'Fixed'
|
||||
@@ -34,6 +56,7 @@ def categorize_commit(commit_msg):
|
||||
def get_changes_from_git():
|
||||
"""Get changes from git commits since last tag"""
|
||||
changes = {
|
||||
'Breaking Changes': [],
|
||||
'Added': [],
|
||||
'Changed': [],
|
||||
'Fixed': []
|
||||
@@ -55,7 +78,9 @@ def get_changes_from_git():
|
||||
if commit:
|
||||
category = categorize_commit(commit)
|
||||
# Clean up commit message
|
||||
clean_msg = re.sub(r'^(feat|fix|chore|docs|style|refactor|perf|test)(\(.*\))?:', '', commit).strip()
|
||||
clean_msg = re.sub(r'^(feat|fix|chore|docs|style|refactor|perf|test)(\(.*\))?!?:', '', commit).strip()
|
||||
# Remove BREAKING CHANGE prefix if present
|
||||
clean_msg = re.sub(r'^breaking change:\s*', '', clean_msg, flags=re.IGNORECASE).strip()
|
||||
changes[category].append(clean_msg)
|
||||
|
||||
except subprocess.CalledProcessError:
|
||||
|
Reference in New Issue
Block a user