forked from lix-project/lix
release-notes: check with pre-commit
This required making the build-release-notes script understand how to
check multiple directories.
Change-Id: I057f5f636155ab6c6fb5755da5217b7e72249ece
This commit is contained in:
parent
6fcab7ee95
commit
06f17a5c78
|
@ -344,6 +344,15 @@
|
||||||
enable = true;
|
enable = true;
|
||||||
excludes = [ "^tests/functional/lang/" ];
|
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
|
# TODO: Once the test suite is nicer, clean up and start
|
||||||
# enforcing trailing whitespace on tests that don't explicitly
|
# enforcing trailing whitespace on tests that don't explicitly
|
||||||
# check for it.
|
# check for it.
|
||||||
|
|
|
@ -31,41 +31,46 @@ def format_pr(pr: str) -> str:
|
||||||
def format_cl(clid: int) -> str:
|
def format_cl(clid: int) -> str:
|
||||||
return f"[cl/{clid}]({GERRIT_BASE}/{clid})"
|
return f"[cl/{clid}]({GERRIT_BASE}/{clid})"
|
||||||
|
|
||||||
paths = pathlib.Path(sys.argv[1]).glob('*.md')
|
def run_on_dir(d):
|
||||||
entries = []
|
paths = pathlib.Path(d).glob('*.md')
|
||||||
for p in paths:
|
entries = []
|
||||||
try:
|
for p in paths:
|
||||||
e = frontmatter.load(p)
|
try:
|
||||||
if 'synopsis' not in e.metadata:
|
e = frontmatter.load(p)
|
||||||
raise Exception('missing synopsis')
|
if 'synopsis' not in e.metadata:
|
||||||
unknownKeys = set(e.metadata.keys()) - set(('synopsis', 'cls', 'issues', 'prs', 'significance'))
|
raise Exception('missing synopsis')
|
||||||
if unknownKeys:
|
unknownKeys = set(e.metadata.keys()) - set(('synopsis', 'cls', 'issues', 'prs', 'significance'))
|
||||||
raise Exception('unknown keys', unknownKeys)
|
if unknownKeys:
|
||||||
entries.append((p, e))
|
raise Exception('unknown keys', unknownKeys)
|
||||||
except Exception as e:
|
entries.append((p, e))
|
||||||
e.add_note(f"in {p}")
|
except Exception as e:
|
||||||
raise
|
e.add_note(f"in {p}")
|
||||||
|
raise
|
||||||
|
|
||||||
def listify(l: list | int) -> list:
|
def listify(l: list | int) -> list:
|
||||||
if not isinstance(l, list):
|
if not isinstance(l, list):
|
||||||
return [l]
|
return [l]
|
||||||
else:
|
else:
|
||||||
return l
|
return l
|
||||||
|
|
||||||
for p, entry in sorted(entries, key=lambda e: (-SIGNIFICANCECES[e[1].metadata.get('significance')], e[0])):
|
for p, entry in sorted(entries, key=lambda e: (-SIGNIFICANCECES[e[1].metadata.get('significance')], e[0])):
|
||||||
try:
|
try:
|
||||||
header = entry.metadata['synopsis']
|
header = entry.metadata['synopsis']
|
||||||
links = []
|
links = []
|
||||||
links += [format_issue(str(s)) for s in listify(entry.metadata.get('issues', []))]
|
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_pr(str(s)) for s in listify(entry.metadata.get('prs', []))]
|
||||||
links += [format_cl(cl) for cl in listify(entry.metadata.get('cls', []))]
|
links += [format_cl(cl) for cl in listify(entry.metadata.get('cls', []))]
|
||||||
if links != []:
|
if links != []:
|
||||||
header += " " + " ".join(links)
|
header += " " + " ".join(links)
|
||||||
if header:
|
if header:
|
||||||
print(f"- {header}")
|
print(f"- {header}")
|
||||||
|
print()
|
||||||
|
print(textwrap.indent(entry.content, ' '))
|
||||||
print()
|
print()
|
||||||
print(textwrap.indent(entry.content, ' '))
|
except Exception as e:
|
||||||
print()
|
e.add_note(f"in {p}")
|
||||||
except Exception as e:
|
raise
|
||||||
e.add_note(f"in {p}")
|
|
||||||
raise
|
if __name__ == '__main__':
|
||||||
|
for d in sys.argv[1:]:
|
||||||
|
run_on_dir(d)
|
||||||
|
|
Loading…
Reference in a new issue