doc: Generate dev release notes

pull/10303/head
Xavier Claessens 3 years ago committed by Jussi Pakkanen
parent 5746469e45
commit c88c1e7dba
  1. 79
      docs/genrelnotes.py
  2. 21
      docs/meson.build

@ -16,10 +16,11 @@
''' '''
Generates release notes for new releases of Meson build system Generates release notes for new releases of Meson build system
''' '''
import argparse
import subprocess import subprocess
import sys import re
import os import shutil
from glob import glob from pathlib import Path
RELNOTE_TEMPLATE = '''--- RELNOTE_TEMPLATE = '''---
title: Release {} title: Release {}
@ -31,43 +32,65 @@ short-description: Release notes for {}
''' '''
def add_to_sitemap(from_version, to_version): def add_to_sitemap(sitemap, output_sitemap):
''' '''
Adds release note entry to sitemap.txt. Adds release note entry to sitemap.txt.
''' '''
sitemapfile = '../sitemap.txt' sitemapfile = Path(sitemap)
s_f = open(sitemapfile, encoding='utf-8') with sitemapfile.open(encoding='utf-8') as s_f:
lines = s_f.readlines() lines = s_f.readlines()
s_f.close() relnotes = None
with open(sitemapfile, 'w', encoding='utf-8') as s_f: to_version = None
output = Path(output_sitemap)
output.parent.mkdir(exist_ok=True, parents=True)
with output.open('w', encoding='utf-8') as s_f:
for line in lines: for line in lines:
if 'Release-notes' in line and from_version in line: if relnotes is None:
new_line = line.replace(from_version, to_version) m = re.match(r'[\s]*Release-notes-for-([0-9]+)\.([0-9]+)\.([0-9]+)\.md', line)
s_f.write(new_line) if m:
from_version = f'{m[1]}.{m[2]}.{m[3]}'
to_version = f'{m[1]}.{int(m[2]) + 1}.{m[3]}'
new_line = line.replace(from_version, to_version)
relnotes = new_line.strip()
s_f.write(new_line)
s_f.write(line) s_f.write(line)
def generate(from_version, to_version): if sitemapfile == output:
subprocess.check_call(['git', 'add', output])
return relnotes, to_version
def generate(relnotes, to_version, source_dir, output_dir):
''' '''
Generate notes for Meson build next release. Generate notes for Meson build next release.
''' '''
ofilename = f'Release-notes-for-{to_version}.md' release = f'{to_version} (in development)' if output_dir else to_version
with open(ofilename, 'w', encoding='utf-8') as ofile: output = Path(output_dir, relnotes) if output_dir else Path('markdown', relnotes)
ofile.write(RELNOTE_TEMPLATE.format(to_version, to_version)) output.parent.mkdir(exist_ok=True, parents=True)
for snippetfile in glob('snippets/*.md'): with output.open('w', encoding='utf-8') as ofile:
snippet = open(snippetfile, encoding='utf-8').read() ofile.write(RELNOTE_TEMPLATE.format(release, to_version))
for snippetfile in Path(source_dir, 'markdown/snippets').glob('*.md'):
snippet = snippetfile.read_text(encoding='utf-8')
ofile.write(snippet) ofile.write(snippet)
if not snippet.endswith('\n'): if not snippet.endswith('\n'):
ofile.write('\n') ofile.write('\n')
ofile.write('\n') ofile.write('\n')
subprocess.check_call(['git', 'rm', snippetfile])
subprocess.check_call(['git', 'add', ofilename]) if not output_dir:
add_to_sitemap(from_version, to_version) subprocess.check_call(['git', 'rm', 'markdown/snippets/*.md'])
subprocess.check_call(['git', 'add', output])
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv) != 3: parser = argparse.ArgumentParser(description='Generate meson docs')
print(sys.argv[0], 'from_version to_version') parser.add_argument('--input-sitemap', default='sitemap.txt')
sys.exit(1) parser.add_argument('--output-sitemap', default='sitemap.txt')
FROM_VERSION = sys.argv[1] parser.add_argument('--source-dir', default='.')
TO_VERSION = sys.argv[2] parser.add_argument('--output-dir')
os.chdir('markdown')
generate(FROM_VERSION, TO_VERSION) args = parser.parse_args()
if Path(args.source_dir, 'markdown/snippets').glob('*.md'):
relnotes, to_version = add_to_sitemap(args.input_sitemap, args.output_sitemap)
generate(relnotes, to_version, args.source_dir, args.output_dir)
elif args.input_sitemap != args.output_sitemap:
shutil.copyfile(args.input_sitemap, args.output_sitemap)

@ -15,10 +15,12 @@ docs_gen = custom_target(
build_by_default: true, build_by_default: true,
install: false) install: false)
sitemap = files('sitemap.txt')
genrefman = find_program('./genrefman.py') genrefman = find_program('./genrefman.py')
refman_binary = custom_target( refman_binary = custom_target(
'gen_refman_bin', 'gen_refman_bin',
input: files('sitemap.txt'), input: sitemap,
output: 'reference_manual.bin', output: 'reference_manual.bin',
depfile: 'reman_dep.d', depfile: 'reman_dep.d',
command: [ command: [
@ -39,7 +41,7 @@ refman_md = custom_target(
genrefman, genrefman,
'-l', 'pickle', '-l', 'pickle',
'-g', 'md', '-g', 'md',
'-s', files('sitemap.txt'), '-s', sitemap,
'-i', '@INPUT@', '-i', '@INPUT@',
'-o', '@OUTPUT0@', '-o', '@OUTPUT0@',
'--link-defs', '@OUTPUT1@', '--link-defs', '@OUTPUT1@',
@ -47,6 +49,7 @@ refman_md = custom_target(
'--no-modules', '--no-modules',
], ],
) )
sitemap = refman_md[0]
refman_json = custom_target( refman_json = custom_target(
'gen_refman_json', 'gen_refman_json',
@ -79,6 +82,18 @@ refman_man = custom_target(
], ],
) )
genrelnotes = custom_target(
output: ['sitemap-genrelnotes.txt'],
build_always_stale: true,
command: [find_program('genrelnotes.py'),
'--input-sitemap', sitemap,
'--output-sitemap', '@OUTPUT0@',
'--output-dir', meson.current_build_dir(),
'--source-dir', meson.current_source_dir(),
]
)
sitemap = genrelnotes[0]
test('validate_docs', find_program('./jsonvalidator.py'), args: [refman_json]) test('validate_docs', find_program('./jsonvalidator.py'), args: [refman_json])
hotdoc_prog = find_program('hotdoc', version: '>=0.13.7') hotdoc_prog = find_program('hotdoc', version: '>=0.13.7')
@ -86,7 +101,7 @@ hotdoc_prog = find_program('hotdoc', version: '>=0.13.7')
hotdoc = import('hotdoc') hotdoc = import('hotdoc')
documentation = hotdoc.generate_doc(meson.project_name(), documentation = hotdoc.generate_doc(meson.project_name(),
project_version: meson.project_version(), project_version: meson.project_version(),
sitemap: refman_md[0], sitemap: sitemap,
build_by_default: true, build_by_default: true,
depends: docs_gen, depends: docs_gen,
index: 'markdown/index.md', index: 'markdown/index.md',

Loading…
Cancel
Save