blob: 7eaaa8d0433983968dbd42488433fbf2f81ac1bd [file] [log] [blame]
#!/usr/bin/env vpython3
# Copyright 2023 The LUCI Authors. All rights reserved.
# Use of this source code is governed under the Apache License, Version 2.0
# that can be found in the LICENSE file.
"""Automatically updates the .proto files in this directory."""
import base64
import json
import os
import re
import sys
import requests
BASE_URL = 'https://chromium.googlesource.com/infra/luci/luci-go'
LOG_URL = BASE_URL+'/+log/main/%s?format=JSON&n=1'
GO_MOD_URL = BASE_URL+'/+/%s/go.mod?format=TEXT'
PKG_URL = 'github.com/envoyproxy/protoc-gen-validate'
def fetch(url):
print('Fetching ' + url, file=sys.stderr)
resp = requests.get(url)
if resp.status_code != 200:
raise requests.HTTPError(resp.text)
return resp.text
def main():
"""Automatically updates validate.proto in this directory."""
# find ver
log = fetch(LOG_URL % 'go.mod')
commit = str(json.loads(log[4:])['log'][0]['commit'])
mods = base64.b64decode(fetch(GO_MOD_URL % commit)).decode('utf8')
ver = None
for m in mods.split('\n'):
if re.match(r'\s*' + PKG_URL, m):
ver = m.split()[1]
break
if not ver:
print('Missing %s in go.mod' % PKG_URL, file=sys.stderr)
return
proto = fetch('https://%s/raw/%s/validate/validate.proto' % (PKG_URL, ver))
lic = fetch('https://%s/raw/%s/LICENSE' % (PKG_URL, ver))
dest_path = os.path.dirname(os.path.abspath(__file__))
with open(dest_path + '/validate.proto', 'w') as f:
f.write(proto)
with open(dest_path + '/VERSION', 'w') as f:
print('# Generated by update.py. DO NOT EDIT.', file=f)
f.write(ver)
with open(dest_path + '/LICENSE', 'w') as f:
f.write(lic)
if __name__ == '__main__':
main()