From 06f17a5c78c33120afd71a94f907bfdabd5c40aa Mon Sep 17 00:00:00 2001 From: Jade Lovelace Date: Sun, 7 Apr 2024 20:05:19 -0700 Subject: [PATCH] release-notes: check with pre-commit This required making the build-release-notes script understand how to check multiple directories. Change-Id: I057f5f636155ab6c6fb5755da5217b7e72249ece --- flake.nix | 9 ++++ maintainers/build-release-notes.py | 75 ++++++++++++++++-------------- 2 files changed, 49 insertions(+), 35 deletions(-) diff --git a/flake.nix b/flake.nix index b8a5da33f..56dd4bfc3 100644 --- a/flake.nix +++ b/flake.nix @@ -344,6 +344,15 @@ enable = true; excludes = [ "^tests/functional/lang/" ]; }; + release-notes = { + enable = true; + package = pkgs.build-release-notes; + files = "^doc/manual/rl-next(-dev)?"; + pass_filenames = false; + entry = '' + ${lib.getExe pkgs.build-release-notes} doc/manual/rl-next doc/manual/rl-next-dev + ''; + }; # TODO: Once the test suite is nicer, clean up and start # enforcing trailing whitespace on tests that don't explicitly # check for it. diff --git a/maintainers/build-release-notes.py b/maintainers/build-release-notes.py index dd26fd1cb..2a154a61e 100644 --- a/maintainers/build-release-notes.py +++ b/maintainers/build-release-notes.py @@ -31,41 +31,46 @@ def format_pr(pr: str) -> str: def format_cl(clid: int) -> str: return f"[cl/{clid}]({GERRIT_BASE}/{clid})" -paths = pathlib.Path(sys.argv[1]).glob('*.md') -entries = [] -for p in paths: - try: - 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')) - if unknownKeys: - raise Exception('unknown keys', unknownKeys) - entries.append((p, e)) - except Exception as e: - e.add_note(f"in {p}") - raise +def run_on_dir(d): + paths = pathlib.Path(d).glob('*.md') + entries = [] + for p in paths: + try: + 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')) + if unknownKeys: + raise Exception('unknown keys', unknownKeys) + entries.append((p, e)) + except Exception as e: + e.add_note(f"in {p}") + raise -def listify(l: list | int) -> list: - if not isinstance(l, list): - return [l] - else: - return l + def listify(l: list | int) -> list: + if not isinstance(l, list): + return [l] + else: + return l -for p, entry in sorted(entries, key=lambda e: (-SIGNIFICANCECES[e[1].metadata.get('significance')], e[0])): - try: - header = entry.metadata['synopsis'] - links = [] - links += [format_issue(str(s)) for s in listify(entry.metadata.get('issues', []))] - links += [format_pr(str(s)) for s in listify(entry.metadata.get('prs', []))] - links += [format_cl(cl) for cl in listify(entry.metadata.get('cls', []))] - if links != []: - header += " " + " ".join(links) - if header: - print(f"- {header}") + for p, entry in sorted(entries, key=lambda e: (-SIGNIFICANCECES[e[1].metadata.get('significance')], e[0])): + try: + header = entry.metadata['synopsis'] + links = [] + links += [format_issue(str(s)) for s in listify(entry.metadata.get('issues', []))] + links += [format_pr(str(s)) for s in listify(entry.metadata.get('prs', []))] + links += [format_cl(cl) for cl in listify(entry.metadata.get('cls', []))] + if links != []: + header += " " + " ".join(links) + if header: + print(f"- {header}") + print() + print(textwrap.indent(entry.content, ' ')) print() - print(textwrap.indent(entry.content, ' ')) - print() - except Exception as e: - e.add_note(f"in {p}") - raise + except Exception as e: + e.add_note(f"in {p}") + raise + +if __name__ == '__main__': + for d in sys.argv[1:]: + run_on_dir(d)