Blame tools/make_dist_html.py

Packit b5b901
#!/usr/bin/python
Packit b5b901
Packit b5b901
from __future__ import print_function
Packit b5b901
Packit b5b901
import itertools
Packit b5b901
import os
Packit b5b901
import re
Packit b5b901
import subprocess
Packit b5b901
Packit b5b901
HTML = r'''
Packit b5b901
Packit b5b901
<html>
Packit b5b901
  <head>
Packit b5b901
    <link rel="stylesheet" href="http://libuv.org/styles/vendor.css">
Packit b5b901
    <link rel="stylesheet" href="http://libuv.org/styles/main.css">
Packit b5b901
    <style>
Packit b5b901
    table {{
Packit b5b901
      border-spacing: 0;
Packit b5b901
    }}
Packit b5b901
    body table {{
Packit b5b901
      margin: 0 0 0 12pt;
Packit b5b901
    }}
Packit b5b901
    th, td {{
Packit b5b901
      padding: 2pt;
Packit b5b901
      text-align: left;
Packit b5b901
      vertical-align: top;
Packit b5b901
    }}
Packit b5b901
    table table {{
Packit b5b901
      border-collapse: initial;
Packit b5b901
      padding: 0 0 16pt 0;
Packit b5b901
    }}
Packit b5b901
    table table tr:nth-child(even) {{
Packit b5b901
      background-color: #777;
Packit b5b901
    }}
Packit b5b901
    </style>
Packit b5b901
  </head>
Packit b5b901
  <body>
Packit b5b901
    {groups}
Packit b5b901
  </body>
Packit b5b901
</html>
Packit b5b901
'''
Packit b5b901
Packit b5b901
GROUPS = r'''
Packit b5b901
Packit b5b901
  {groups[0]}
Packit b5b901
  {groups[1]}
Packit b5b901
  {groups[2]}
Packit b5b901
  {groups[3]}
Packit b5b901
Packit b5b901
'''
Packit b5b901
Packit b5b901
GROUP = r'''
Packit b5b901
Packit b5b901
  
Packit b5b901
    version
Packit b5b901
    tarball
Packit b5b901
    gpg
Packit b5b901
    windows
Packit b5b901
  
Packit b5b901
  {rows}
Packit b5b901
Packit b5b901
'''
Packit b5b901
Packit b5b901
ROW = r'''
Packit b5b901
Packit b5b901
  
Packit b5b901
    {tag}
Packit b5b901
  
Packit b5b901
  
Packit b5b901
    tarball
Packit b5b901
  
Packit b5b901
  {maybe_gpg}
Packit b5b901
  {maybe_exe}
Packit b5b901
Packit b5b901
'''
Packit b5b901
Packit b5b901
GPG = r'''
Packit b5b901
gpg
Packit b5b901
'''
Packit b5b901
Packit b5b901
# The binaries don't have a predictable name, link to the directory instead.
Packit b5b901
EXE = r'''
Packit b5b901
exe
Packit b5b901
'''
Packit b5b901
Packit b5b901
def version(tag):
Packit b5b901
  return map(int, re.match('^v(\d+)\.(\d+)\.(\d+)', tag).groups())
Packit b5b901
Packit b5b901
def major_minor(tag):
Packit b5b901
  return version(tag)[:2]
Packit b5b901
Packit b5b901
def row_for(tag):
Packit b5b901
  maybe_gpg = ''
Packit b5b901
  maybe_exe = ''
Packit b5b901
  # We didn't start signing releases and producing Windows installers
Packit b5b901
  # until v1.7.0.
Packit b5b901
  if version(tag) >= version('v1.7.0'):
Packit b5b901
    maybe_gpg = GPG.format(**locals())
Packit b5b901
    maybe_exe = EXE.format(**locals())
Packit b5b901
  return ROW.format(**locals())
Packit b5b901
Packit b5b901
def group_for(tags):
Packit b5b901
  rows = ''.join(row_for(tag) for tag in tags)
Packit b5b901
  return GROUP.format(rows=rows)
Packit b5b901
Packit b5b901
# Partition in groups of |n|.
Packit b5b901
def groups_for(groups, n=4):
Packit b5b901
  html = ''
Packit b5b901
  groups = groups[:] + [''] * (n - 1)
Packit b5b901
  while len(groups) >= n:
Packit b5b901
    html += GROUPS.format(groups=groups)
Packit b5b901
    groups = groups[n:]
Packit b5b901
  return html
Packit b5b901
Packit b5b901
if __name__ == '__main__':
Packit b5b901
  os.chdir(os.path.dirname(__file__))
Packit b5b901
  tags = subprocess.check_output(['git', 'tag'])
Packit b5b901
  tags = [tag for tag in tags.split('\n') if tag.startswith('v')]
Packit b5b901
  tags.sort(key=version, reverse=True)
Packit b5b901
  groups = [group_for(list(g)) for _, g in itertools.groupby(tags, major_minor)]
Packit b5b901
  groups = groups_for(groups)
Packit b5b901
  html = HTML.format(groups=groups).strip()
Packit b5b901
  html = re.sub('>\\s+<', '><', html)
Packit b5b901
  print(html)