123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #! /usr/bin/env python
- # Copyright 2018 Google LLC.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- from subprocess import check_output, CalledProcessError
- import os
- import re
- import sys
- import tempfile
- HEADER = '''<!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>SkQP Pre-built APKs</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <style>
- body {
- font-family:sans-serif;
- max-width:50em;
- margin:8px auto;
- padding:0 8px;
- }
- table { max-width:100%; border-collapse: collapse; }
- td { padding:12px 8px; vertical-align:top; }
- tr:nth-child(even) {background: #F2F2F2; color:#000;}
- tr:nth-child(odd) {background: #FFFFFF; color:#000;}
- </style>
- </head>
- <body>
- <h1>SkQP Pre-built APKs</h1>
- '''
- FOOTER = '</body>\n</html>\n'
- BUCKET = 'skia-skqp'
- NAME_FMT = 'skqp-universal-%s.apk'
- def get_existing_files():
- cmd = ['gsutil', 'ls', 'gs://' + BUCKET]
- try:
- output = check_output(cmd)
- except (OSError, CalledProcessError):
- sys.stderr.write('command: "%s" failed.\n' % ' '.join(cmd))
- sys.exit(1)
- result = set()
- regex = re.compile('gs://%s/%s' % (BUCKET, NAME_FMT % '([0-9a-f]+)'))
- for line in output.split('\n'):
- m = regex.match(line.strip())
- if m is not None:
- result.add(m.group(1))
- return result
- def find(v, extant):
- l = min(16, len(v))
- while l > 8:
- if v[:l] in extant:
- return v[:l]
- l -= 1
- return None
- def nowrap(s):
- return (s.replace(' ', u'\u00A0'.encode('utf-8'))
- .replace('-', u'\u2011'.encode('utf-8')))
- def table(o, from_commit, to_commit):
- env_copy = os.environ.copy()
- env_copy['TZ'] = ''
- extant = get_existing_files()
- o.write('<h2>%s %s</h2>\n' % (to_commit, ' '.join(from_commit)))
- o.write('<table>\n<tr><th>APK</th><th>Date</th><th>Commit</th></tr>\n')
- git_cmd = ['git', 'log', '--format=%H;%cd;%<(100,trunc)%s',
- '--date=format-local:%Y-%m-%d %H:%M:%S %Z'
- ] + from_commit + [to_commit]
- commits = check_output(git_cmd, env=env_copy)
- for line in commits.split('\n'):
- line = line.strip()
- if not line:
- continue
- commit, date, subj = line.split(';', 2)
- short = find(commit, extant)
- if short is not None:
- apk_name = NAME_FMT % short
- url = 'https://storage.googleapis.com/%s/%s' % (BUCKET, apk_name)
- else:
- apk_name, url = '', ''
- commit_url = 'https://skia.googlesource.com/skia/+/' + commit
- o.write('<tr>\n<td><a href="%s">%s</a></td>\n'
- '<td>%s</td>\n<td><a href="%s">%s</a></td>\n</tr>\n' %
- (url, nowrap(apk_name), nowrap(date), commit_url, subj))
- o.write('</table>\n')
- def main():
- assert '/' in [os.sep, os.altsep] and '..' == os.pardir
- os.chdir(os.path.join(os.path.dirname(__file__), '../..'))
- d = tempfile.mkdtemp()
- path = os.path.join(d, 'apklist.html')
- with open(path, 'w') as o:
- o.write(HEADER)
- table(o, ['^origin/master', '^3e34285f2a0'], 'origin/skqp/dev')
- table(o, ['^origin/master'], 'origin/skqp/release')
- o.write(FOOTER)
- print path
- gscmd = 'gsutil -h "Content-Type:text/html" cp "%s" gs://skia-skqp/apklist'
- print gscmd % path
- if __name__ == '__main__':
- main()
|