Blame tools/make_dist_html.py

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