diff third_party/libuv/tools/make_dist_html.py @ 160:948de3f54cea

[ThirdParty] Added libuv
author June Park <parkjune1995@gmail.com>
date Wed, 14 Jan 2026 19:39:52 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/third_party/libuv/tools/make_dist_html.py	Wed Jan 14 19:39:52 2026 -0800
@@ -0,0 +1,122 @@
+#!/usr/bin/python3
+
+import itertools
+import os
+import re
+import subprocess
+
+HTML = r'''
+<!DOCTYPE html>
+<html>
+  <head>
+    <link rel="stylesheet" href="http://libuv.org/styles/vendor.css">
+    <link rel="stylesheet" href="http://libuv.org/styles/main.css">
+    <style>
+    table {{
+      border-spacing: 0;
+    }}
+    body table {{
+      margin: 0 0 0 12pt;
+    }}
+    th, td {{
+      padding: 2pt;
+      text-align: left;
+      vertical-align: top;
+    }}
+    table table {{
+      border-collapse: initial;
+      padding: 0 0 16pt 0;
+    }}
+    table table tr:nth-child(even) {{
+      background-color: #777;
+    }}
+    </style>
+  </head>
+  <body>
+    <table>{groups}</table>
+  </body>
+</html>
+'''
+
+GROUPS = r'''
+<tr>
+  <td>{groups[0]}</td>
+  <td>{groups[1]}</td>
+  <td>{groups[2]}</td>
+  <td>{groups[3]}</td>
+</tr>
+'''
+
+GROUP = r'''
+<table>
+  <tr>
+    <th>version</th>
+    <th>tarball</th>
+    <th>gpg</th>
+    <th>windows</th>
+  </tr>
+  {rows}
+</table>
+'''
+
+ROW = r'''
+<tr>
+  <td>
+    <a href="http://dist.libuv.org/dist/{tag}/">{tag}</a>
+  </td>
+  <td>
+    <a href="http://dist.libuv.org/dist/{tag}/libuv-{tag}.tar.gz">tarball</a>
+  </td>
+  <td>{maybe_gpg}</td>
+  <td>{maybe_exe}</td>
+</tr>
+'''
+
+GPG = r'''
+<a href="http://dist.libuv.org/dist/{tag}/libuv-{tag}.tar.gz.sign">gpg</a>
+'''
+
+# The binaries don't have a predictable name, link to the directory instead.
+EXE = r'''
+<a href="http://dist.libuv.org/dist/{tag}/">exe</a>
+'''
+
+def version(tag):
+  return list(map(int, re.match('^v(\d+)\.(\d+)\.(\d+)', tag).groups()))
+
+def major_minor(tag):
+  return version(tag)[:2]
+
+def row_for(tag):
+  maybe_gpg = ''
+  maybe_exe = ''
+  # We didn't start signing releases and producing Windows installers
+  # until v1.7.0.
+  if version(tag) >= version('v1.7.0'):
+    maybe_gpg = GPG.format(**locals())
+    maybe_exe = EXE.format(**locals())
+  return ROW.format(**locals())
+
+def group_for(tags):
+  rows = ''.join(row_for(tag) for tag in tags)
+  return GROUP.format(rows=rows)
+
+# Partition in groups of |n|.
+def groups_for(groups, n=4):
+  html = ''
+  groups = groups[:] + [''] * (n - 1)
+  while len(groups) >= n:
+    html += GROUPS.format(groups=groups)
+    groups = groups[n:]
+  return html
+
+if __name__ == '__main__':
+  os.chdir(os.path.dirname(__file__))
+  tags = subprocess.check_output(['git', 'tag'], text=True)
+  tags = [tag for tag in tags.split('\n') if tag.startswith('v')]
+  tags.sort(key=version, reverse=True)
+  groups = [group_for(list(g)) for _, g in itertools.groupby(tags, major_minor)]
+  groups = groups_for(groups)
+  html = HTML.format(groups=groups).strip()
+  html = re.sub('>\\s+<', '><', html)
+  print(html)