From 681e1a4d6429fd7d2fd719fb694851c2ed4d857e Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 9 Mar 2023 02:35:54 +0000 Subject: [PATCH] Update release support book page in release process --- zcutil/make-release.py | 54 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/zcutil/make-release.py b/zcutil/make-release.py index 06b0b6642..3da8e5eed 100755 --- a/zcutil/make-release.py +++ b/zcutil/make-release.py @@ -9,6 +9,7 @@ import subprocess import traceback import unittest import random +from datetime import date, datetime, timedelta, timezone from io import StringIO from functools import wraps @@ -108,6 +109,9 @@ def main_logged(revision, release, releaseprev, releasefrom, releaseheight, hotf ), ) + update_book(release, releaseheight) + commit('Updated book for {}.'.format(release.novtext)) + def phase(message): def deco(f): @@ -333,6 +337,11 @@ def update_debian_changelog(release): ) +@phase('Updating book.') +def update_book(release, releaseheight): + patch_book_release_support(release, releaseheight) + + # Helper code: def commit(message): logging.info('Committing: %r', message) @@ -388,6 +397,51 @@ def patch_gitian_linux_yml(release, releaseprev, path): outf.write(inf.read()) +def patch_book_release_support(release, releaseheight): + with PathPatcher('doc/book/src/user/release-support.md') as (inf, outf): + # Find the start marker. + cur_line = inf.readline() + while not 'RELEASE_SCRIPT_START_MARKER' in cur_line: + outf.write(cur_line) + cur_line = inf.readline() + outf.write(cur_line) + + # The next two lines are the table heading. + for _ in range(2): + outf.write(inf.readline()) + + # The remaining lines before the end marker are table rows. + table_rows = [] + cur_line = inf.readline() + while not 'RELEASE_SCRIPT_END_MARKER' in cur_line: + [row_ver, row_released, row_halt, row_eos] = cur_line.strip('| \n').split(' | ') + row_released = date.fromisoformat(row_released) + row_eos = date.fromisoformat(row_eos) + table_rows.append((row_ver, row_released, int(row_halt), row_eos)) + cur_line = inf.readline() + + # Prune rows for releases that have reached EoS. + today = datetime.now(timezone.utc).date() + table_rows = [row for row in table_rows if row[3] >= today] + + # Add a row for this release. + with open('src/deprecation.h', 'r', encoding='utf8') as f: + prefix = 'RELEASE_TO_DEPRECATION_WEEKS = ' + for line in f: + if prefix in line: + weeks_to_eos = int(line.split(prefix)[1].split(';')[0]) + eos = today + timedelta(weeks=weeks_to_eos) + table_rows.append((release.novtext, today, releaseheight, eos)) + + # Write out the updated table rows. + for row in table_rows: + outf.write('| %s | %s | %s | %s |\n' % row) + + # Write out the end marker and the rest of the page. + outf.write(cur_line) + outf.write(inf.read()) + + def _patch_build_defs(release, path, pattern): rgx = re.compile(pattern) with PathPatcher(path) as (inf, outf):