From c52eba44241cd6d973b1924b193a1df517a14128 Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Tue, 14 May 2024 01:17:47 +0200 Subject: [PATCH] feat: add `credits` field to release note generator Now, we can credit folks for their work. The credit generator is very basic, we probably want a database of profiles and link to their preferred page or something. Change-Id: Ida81905750371e5e125d0ce7e554d0526265cf8e Co-Authored-By: Jade Lovelace Signed-off-by: Raito Bezarius --- maintainers/build-release-notes.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/maintainers/build-release-notes.py b/maintainers/build-release-notes.py index 2a154a61e..85bc40aba 100644 --- a/maintainers/build-release-notes.py +++ b/maintainers/build-release-notes.py @@ -6,6 +6,7 @@ import textwrap GH_BASE = "https://github.com/NixOS/nix" FORGEJO_BASE = "https://git.lix.systems/lix-project/lix" GERRIT_BASE = "https://gerrit.lix.systems/c/lix/+" +KNOWN_KEYS = ('synopsis', 'cls', 'issues', 'prs', 'significance', 'credits') SIGNIFICANCECES = { None: 0, @@ -31,6 +32,13 @@ def format_pr(pr: str) -> str: def format_cl(clid: int) -> str: return f"[cl/{clid}]({GERRIT_BASE}/{clid})" +def plural_list(strs: list[str]) -> str: + if len(strs) <= 1: + return ''.join(strs) + else: + comma = ',' if len(strs) >= 3 else '' + return '{}{} and {}'.format(', '.join(strs[:-1]), comma, strs[-1]) + def run_on_dir(d): paths = pathlib.Path(d).glob('*.md') entries = [] @@ -39,7 +47,7 @@ def run_on_dir(d): e = frontmatter.load(p) if 'synopsis' not in e.metadata: raise Exception('missing synopsis') - unknownKeys = set(e.metadata.keys()) - set(('synopsis', 'cls', 'issues', 'prs', 'significance')) + unknownKeys = set(e.metadata.keys()) - set(KNOWN_KEYS) if unknownKeys: raise Exception('unknown keys', unknownKeys) entries.append((p, e)) @@ -66,7 +74,9 @@ def run_on_dir(d): print(f"- {header}") print() print(textwrap.indent(entry.content, ' ')) - print() + if credits := listify(entry.metadata.get('credits', [])): + print() + print(textwrap.indent('Many thanks to {} for this.'.format(plural_list(credits)), ' ')) except Exception as e: e.add_note(f"in {p}") raise