slap icon indicating copy to clipboard operation
slap copied to clipboard

Add command to merge changelogs from multiple sub-projects into one

Open NiklasRosenstein opened this issue 1 year ago • 0 comments


from pathlib import Path
from tomli import loads
from tomli_w import dumps

dirs = [
    "databind/.changelog",
    "databind.core/.changelog",
    "databind.json/.changelog",
]

output = ".changelog"

releases = {x.name for d in dirs for x in Path(d).iterdir()}

for release in releases:
    files = [Path(d) / release for d in dirs]
    payloads = [(f.parent.parent.name, loads(f.read_text())) for f in files if f.is_file()]

    release_dates = {x[1].get("release-date") for x in payloads}
    if len(release_dates) != 1:
        release_date = min(filter(None, release_dates))
        print(f"warning: mismatching release-date values in {release}: {release_dates}; using {release_date}")
    else:
        release_date = release_dates.pop()

    entries = [{**e, "component": x[0]} for x in payloads for e in x[1].get("entries", [])]

    dest = Path(output) / release
    result = {"entries": entries}
    if release_date is not None:
        result["release-date"] = release_date
    dest.write_text(dumps(result))

NiklasRosenstein avatar Mar 19 '24 18:03 NiklasRosenstein