123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #!/usr/bin/python
- from __future__ import print_function
- 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 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'])
- 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)
|