feat: implement optimization #7 - release summary auto-generation
Add automated release summary document generation: - Create SummaryGenerator class to generate comprehensive release summaries - Extract CHANGELOG sections for specific versions automatically - Calculate git statistics (commits, files changed, insertions, deletions) - List build artifacts from dist/ directory with sizes - Include validation results in summary - Add 'release summary VERSION' CLI command to generate summaries - Support custom output paths with --output option - Auto-detect project name from pyproject.toml - Include contributor information from git log This automates the manual task of creating release documentation, ensuring consistent and comprehensive release summaries. Usage: release summary 0.10.0 # Generates RELEASE_SUMMARY_v0.10.0.md release summary 0.10.0 --output docs/v0.10.0.md # Custom output path 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ from typing import Optional
|
||||
from ..core.manager import ReleaseManager
|
||||
from ..utils.version import VersionManager
|
||||
from ..changelog.editor import ChangelogEditor
|
||||
from ..summary.generator import SummaryGenerator
|
||||
|
||||
|
||||
@click.group(invoke_without_command=True)
|
||||
@@ -326,5 +327,36 @@ def prepare(ctx, version: str, date: Optional[str]):
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
@main.command('summary')
|
||||
@click.argument('version')
|
||||
@click.option('--output', '-o', default=None, type=click.Path(path_type=Path),
|
||||
help='Output file path (defaults to RELEASE_SUMMARY_vX.Y.Z.md)')
|
||||
@click.pass_context
|
||||
def summary(ctx, version: str, output: Optional[Path]):
|
||||
"""Generate release summary document.
|
||||
|
||||
Extracts CHANGELOG content, git statistics, build artifacts, and
|
||||
validation results to create a comprehensive release summary.
|
||||
"""
|
||||
project_root = ctx.obj['project_root'] or Path.cwd()
|
||||
|
||||
# Default output path
|
||||
if output is None:
|
||||
version_clean = version.lstrip('v')
|
||||
output = project_root / f"RELEASE_SUMMARY_v{version_clean}.md"
|
||||
elif not output.is_absolute():
|
||||
output = project_root / output
|
||||
|
||||
generator = SummaryGenerator(project_root)
|
||||
|
||||
try:
|
||||
content = generator.generate(version, output_path=output)
|
||||
print(f"\n✅ Release summary generated successfully")
|
||||
print(f"📄 Summary saved to: {output}")
|
||||
except Exception as e:
|
||||
print(f"❌ Failed to generate release summary: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user