Compare commits

...

4 Commits

3 changed files with 136 additions and 18 deletions

View File

@ -1,5 +1,27 @@
# Changelog # Changelog
## [1.0.5] - 2025-02-16
### Added
- update version to 1.0.5 and enhance changelog update process with automatic git push
- update changelog script to categorize commits and handle new changelog creation
- improve changelog update script to handle absolute paths and create new changelog if missing
## [1.0.4] - 2025-02-16
### Added
- improve changelog update script to handle absolute paths and create new changelog if missing
## [1.0.3] - 2025-02-16
### Added
-
### Changed
-
### Fixed
-
## [1.0.2] - 2025-02-16 ## [1.0.2] - 2025-02-16
### Added ### Added
- Feature 1 - Feature 1

View File

@ -9,7 +9,7 @@
; https://docs.platformio.org/page/projectconf.html ; https://docs.platformio.org/page/projectconf.html
[common] [common]
version = "1.0.2" version = "1.0.5"
[env:esp32dev] [env:esp32dev]
platform = espressif32 platform = espressif32

View File

@ -1,36 +1,132 @@
import os import os
import re import re
import subprocess
from datetime import datetime from datetime import datetime
def get_version(): def get_version():
with open('../platformio.ini', 'r') as f: script_dir = os.path.dirname(os.path.abspath(__file__))
project_dir = os.path.dirname(script_dir)
platformio_path = os.path.join(project_dir, 'platformio.ini')
with open(platformio_path, 'r') as f:
content = f.read() content = f.read()
version_match = re.search(r'version\s*=\s*"([^"]+)"', content) version_match = re.search(r'version\s*=\s*"([^"]+)"', content)
return version_match.group(1) if version_match else None return version_match.group(1) if version_match else None
def get_last_tag():
try:
result = subprocess.run(['git', 'describe', '--tags', '--abbrev=0'],
capture_output=True, text=True)
return result.stdout.strip()
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']):
return 'Added'
elif any(x in lower_msg for x in ['fix', 'bug']):
return 'Fixed'
else:
return 'Changed'
def get_changes_from_git():
"""Get changes from git commits since last tag"""
changes = {
'Added': [],
'Changed': [],
'Fixed': []
}
last_tag = get_last_tag()
# Get commits since last tag
git_log_command = ['git', 'log', '--pretty=format:%s']
if last_tag:
git_log_command.append(f'{last_tag}..HEAD')
try:
result = subprocess.run(git_log_command, capture_output=True, text=True)
commits = result.stdout.strip().split('\n')
# Filter out empty commits and categorize
for commit in commits:
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()
changes[category].append(clean_msg)
except subprocess.CalledProcessError:
print("Error: Failed to get git commits")
return None
return changes
def push_changes(version):
"""Push changes to upstream"""
try:
# Stage the CHANGELOG.md
subprocess.run(['git', 'add', 'CHANGELOG.md'], check=True)
# Commit the changelog
commit_msg = f"docs: update changelog for version {version}"
subprocess.run(['git', 'commit', '-m', commit_msg], check=True)
# Push to origin (local)
subprocess.run(['git', 'push', 'origin'], check=True)
print("Successfully pushed to origin")
# Ask for upstream push
response = input("Do you want to push to GitHub (upstream)? (y/n): ").lower()
if response == 'y':
subprocess.run(['git', 'push', 'upstream'], check=True)
print("Successfully pushed to upstream")
except subprocess.CalledProcessError as e:
print(f"Error during git operations: {e}")
return False
return True
def update_changelog(): def update_changelog():
version = get_version() version = get_version()
today = datetime.now().strftime('%Y-%m-%d') today = datetime.now().strftime('%Y-%m-%d')
changelog_template = f"""## [{version}] - {today} script_dir = os.path.dirname(os.path.abspath(__file__))
### Added project_dir = os.path.dirname(script_dir)
- changelog_path = os.path.join(project_dir, 'CHANGELOG.md')
### Changed
-
### Fixed
-
"""
with open('../CHANGELOG.md', 'r') as f: # Get changes from git
content = f.read() changes = get_changes_from_git()
if not changes:
print("No changes found or error occurred")
return
# Insert new version template after the header # Create changelog entry
updated_content = content.replace("# Changelog\n", f"# Changelog\n\n{changelog_template}") changelog_entry = f"## [{version}] - {today}\n"
for section, entries in changes.items():
if entries: # Only add sections that have entries
changelog_entry += f"### {section}\n"
for entry in entries:
changelog_entry += f"- {entry}\n"
changelog_entry += "\n"
with open('../CHANGELOG.md', 'w') as f: if not os.path.exists(changelog_path):
f.write(updated_content) with open(changelog_path, 'w') as f:
f.write(f"# Changelog\n\n{changelog_entry}")
push_changes(version)
else:
with open(changelog_path, 'r') as f:
content = f.read()
if f"[{version}]" not in content:
updated_content = content.replace("# Changelog\n", f"# Changelog\n\n{changelog_entry}")
with open(changelog_path, 'w') as f:
f.write(updated_content)
push_changes(version)
else:
print(f"Version {version} already exists in changelog")
if __name__ == "__main__": if __name__ == "__main__":
update_changelog() update_changelog()