post_version.py: stop adding release candidates to the index and relnotes
[mesa.git] / bin / post_version.py
index 3fbb5e2107cc9c162e5345f98d4bc3b6b3394213..c55309d93870380b42ce9ad51538d307e17e31e5 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
@@ -25,38 +25,30 @@ import argparse
 import calendar
 import datetime
 import pathlib
+import subprocess
+
 from lxml import (
     etree,
     html,
 )
 
 
-def calculate_previous_version(version: str, is_point: bool) -> str:
-    """Calculate the previous version to compare to.
+def is_first_release(version: str) -> bool:
+    return version.endswith('.0')
 
-    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)
 
+def is_release_candidate(version: str) -> bool:
+    return '-rc' in version
 
-def is_point_release(version: str) -> bool:
-    return not version.endswith('.0')
+
+def branch_name(version: str) -> str:
+    if is_release_candidate(version):
+        version = version.split('-')[0]
+    (major, minor, _) = version.split('.')
+    return f'{major}.{minor}'
 
 
-def update_index(is_point: bool, version: str, previous_version: str) -> None:
+def update_index(version: str) -> None:
     p = pathlib.Path(__file__).parent.parent / 'docs' / 'index.html'
     with p.open('rt') as f:
         tree = html.parse(f)
@@ -70,13 +62,13 @@ def update_index(is_point: bool, version: str, previous_version: str) -> None:
 
     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:
+        body, 'a', attrib={'href': f'relnotes/{version}.html'})
+    a.text = f"Mesa {version}"
+    if is_first_release(version):
         a.tail = (" is released. This is a new development release. "
-                  "See the release notes for mor information about this release.")
+                  "See the release notes for more information about this release.")
+    else:
+        a.tail = " is released. This is a bug fix release."
 
     root = news.getparent()
     index = root.index(news) + 1
@@ -84,29 +76,31 @@ def update_index(is_point: bool, version: str, previous_version: str) -> None:
     root.insert(index, header)
 
     tree.write(p.as_posix(), method='html', pretty_print=True)
+    subprocess.run(['git', 'add', p])
 
 
-def update_release_notes(previous_version: str) -> None:
+def update_release_notes(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'
+    a = etree.SubElement(li, 'a', href=f'relnotes/{version}.html')
+    a.text = f'{version} release notes'
 
     ul = tree.xpath('.//ul')[0]
     ul.insert(0, li)
 
     tree.write(p.as_posix(), method='html', pretty_print=True)
+    subprocess.run(['git', 'add', p])
 
 
-def update_calendar(previous_version: str) -> None:
+def update_calendar(version: str) -> None:
     p = pathlib.Path(__file__).parent.parent / 'docs' / 'release-calendar.html'
     with p.open('rt') as f:
         tree = html.parse(f)
 
-    base_version = previous_version[:-2]
+    branch = branch_name(version)
 
     old = None
     new = None
@@ -117,7 +111,7 @@ def update_calendar(previous_version: str) -> None:
             break
 
         for td in tr.xpath('./td'):
-            if td.text == base_version:
+            if td.text == branch:
                 old = tr
                 break
 
@@ -132,6 +126,7 @@ def update_calendar(previous_version: str) -> None:
         new.insert(0, td)
 
     tree.write(p.as_posix(), method='html', pretty_print=True)
+    subprocess.run(['git', 'add', p])
 
 
 def main() -> None:
@@ -139,12 +134,16 @@ 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 not is_release_candidate(args.version):
+        update_index(args.version)
+        update_release_notes(args.version)
+        done += ', add news item, and link releases notes'
 
-    update_index(is_point, args.version, previous_version)
-    update_release_notes(previous_version)
-    update_calendar(previous_version)
+    subprocess.run(['git', 'commit', '-m',
+                    f'docs: {done} for {args.version}'])
 
 
 if __name__ == "__main__":