blob: 3fe537e45eb2a4403cf4bfbf11eb29ea043a7786 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from collections import defaultdict
def generate_release_notes(content_text):
"""
Generate release notes from the github auto generated release note.
"""
sections = defaultdict(list)
new_contributors = []
current_section = None
full_changelog_link = None
for line in content_text.strip().split("\n"):
if line.startswith("##"):
continue # Skip section headers
# Check for the Full Changelog line
if "Full Changelog" in line:
full_changelog_link = line
continue
# Remove the trailing ')' character, if present, from the line
line = line.rstrip(")")
if (
line.startswith("* feat")
or line.startswith("* perf")
or line.startswith("* refactor")
):
current_section = "Features"
elif line.startswith("* fix"):
current_section = "Bug Fix"
elif (
line.startswith("* chore")
or line.startswith("* docs")
or line.startswith("* style")
):
current_section = "Other Improvements"
elif line.startswith("* @"):
current_section = "New Contributors"
if current_section == "New Contributors":
new_contributors.append(line)
elif current_section:
sections[current_section].append(line)
markdown_text = "## Highlights\n* xxx\n* xxx\n\n"
if "Features" in sections:
markdown_text += "## Features\n" + "\n".join(sections["Features"]) + "\n\n"
if "Bug Fix" in sections:
markdown_text += "## Bug Fix\n" + "\n".join(sections["Bug Fix"]) + "\n\n"
if "Other Improvements" in sections:
markdown_text += (
"## Other Improvements\n"
+ "\n".join(sections["Other Improvements"])
+ "\n\n"
)
if new_contributors:
markdown_text += "## New Contributors\n" + "\n".join(new_contributors) + "\n\n"
if full_changelog_link:
markdown_text += full_changelog_link
print(markdown_text)
# Example input
input_text = """
## What's Changed
* feat(java): xxx by @xxx in https://github.com/apache/fory/pull/xxx
* fix(doc): xxx by @xxx in https://github.com/apache/fory/pull/xxx
* perf(python): xxx by @xxx in https://github.com/apache/fory/pull/xxx
* chore: xxx by @xxx in https://github.com/apache/fory/pull/xxx
* feat(python): xxx by @xxx in https://github.com/apache/fory/pull/xxx
## New Contributors
* @XXX made their first contribution in https://github.com/apache/fory/pull/XXX
**Full Changelog**: https://github.com/apache/fory/compare/v0.11.0...v0.11.1-rc1
"""
# Generate release notes from given input
generate_release_notes(input_text)