post_version.py: update the files in the current worktree, not the one with the scrip...
[mesa.git] / bin / post_version.py
index d9b2a1de3245880b12c9746401fcaf0878fd5dd3..328a48b26049021b8d59125019b3c4c6dd4816ab 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright © 2019 Intel Corporation
+# Copyright © 2019-2020 Intel Corporation
 
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
 """Update the main page, release notes, and calendar."""
 
 import argparse
-import calendar
-import datetime
 import pathlib
-from lxml import (
-    etree,
-    html,
-)
+import subprocess
 
 
-def calculate_previous_version(version: str, is_point: bool) -> str:
-    """Calculate the previous version to compare to.
+def update_release_notes(version: str) -> None:
+    p = pathlib.Path('docs') / 'relnotes.rst'
 
-    In the case of -rc to final that verison is the previous .0 release,
-    (19.3.0 in the case of 20.0.0, for example). for point releases that is
-    the last point release. This value will be the same as the input value
-    for a poiont release, but different for a major release.
-    """
-    if '-' in version:
-        version = version.split('-')[0]
-    if is_point:
-        return version
-    base = version.split('.')
-    if base[1] == '0':
-        base[0] = str(int(base[0]) - 1)
-        base[1] = '3'
-    else:
-        base[1] = str(int(base[1]) - 1)
-    return '.'.join(base)
+    with open(p, 'r') as f:
+        relnotes = f.readlines()
 
+    new_relnotes = []
+    first_list = True
+    for line in relnotes:
+        if first_list and line.startswith('-'):
+            first_list = False
+            new_relnotes.append(f'- `{version} release notes <relnotes/{version}.rst>`__\n')
+        new_relnotes.append(line)
 
-def is_point_release(version: str) -> bool:
-    return not version.endswith('.0')
+    with open(p, 'w') as f:
+        for line in new_relnotes:
+            f.write(line)
 
+    subprocess.run(['git', 'add', p])
 
-def update_index(is_point: bool, version: str, previous_version: str) -> None:
-    p = pathlib.Path(__file__).parent.parent / 'docs' / 'index.html'
-    with p.open('rt') as f:
-        tree = html.parse(f)
 
-    news = tree.xpath('.//h1')[0]
+def update_calendar(version: str) -> None:
+    p = pathlib.Path('docs') / 'release-calendar.rst'
 
-    date = datetime.date.today()
-    month = calendar.month_name[date.month]
-    header = etree.Element('h2')
-    header.text = f"{month} {date.day}, {date.year}"
+    with open(p, 'r') as f:
+        calendar = f.readlines()
 
-    body = etree.Element('p')
-    a = etree.SubElement(
-        body, 'a', attrib={'href': f'relnotes/{previous_version}.html'})
-    a.text = f"Mesa {previous_version}"
-    if is_point:
-        a.tail = " is released. This is a bug fix release."
-    else:
-        a.tail = (" is released. This is a new development release. "
-                  "See the release notes for mor information about this release.")
+    branch = ''
+    skip_line = False
+    new_calendar = []
+    for line in calendar:
+        if version in line:
+            branch = line.split('|')[1].strip()
+            skip_line = True
+        elif skip_line:
+            skip_line = False
+        elif branch:
+            # Put the branch number back on the next line
+            new_calendar.append(line[:2] + branch + line[len(branch) + 2:])
+            branch = ''
+        else:
+            new_calendar.append(line)
 
-    root = news.getparent()
-    index = root.index(news) + 1
-    root.insert(index, body)
-    root.insert(index, header)
+    with open(p, 'w') as f:
+        for line in new_calendar:
+            f.write(line)
 
-    tree.write(p.as_posix(), method='html')
-
-
-def update_release_notes(previous_version: str) -> None:
-    p = pathlib.Path(__file__).parent.parent / 'docs' / 'relnotes.html'
-    with p.open('rt') as f:
-        tree = html.parse(f)
-
-    li = etree.Element('li')
-    a = etree.SubElement(li, 'a', href=f'relnotes/{previous_version}.html')
-    a.text = f'{previous_version} release notes'
-
-    ul = tree.xpath('.//ul')[0]
-    ul.insert(0, li)
-
-    tree.write(p.as_posix(), method='html')
+    subprocess.run(['git', 'add', p])
 
 
 def main() -> None:
@@ -106,11 +81,15 @@ def main() -> None:
     parser.add_argument('version', help="The released version.")
     args = parser.parse_args()
 
-    is_point = is_point_release(args.version)
-    previous_version = calculate_previous_version(args.version, is_point)
+    update_calendar(args.version)
+    done = 'update calendar'
+
+    if 'rc' not in args.version:
+        update_release_notes(args.version)
+        done += ' and link releases notes'
 
-    update_index(is_point, args.version, previous_version)
-    update_release_notes(previous_version)
+    subprocess.run(['git', 'commit', '-m',
+                    f'docs: {done} for {args.version}'])
 
 
 if __name__ == "__main__":