blob: 2ade10dc478dba7611732803f2597a5b2c466712 [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 argparse
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
parser = argparse.ArgumentParser()
parser.add_argument("--dest_path", "-D",
default=os.path.dirname(os.path.abspath(__file__)))
args = parser.parse_args()
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))
with open(args.dest_path + '/validate.proto', 'w') as f:
f.write(proto)
with open(args.dest_path + '/VERSION', 'w') as f:
print('# Generated by update.py. DO NOT EDIT.', file=f)
f.write(ver)
with open(args.dest_path + '/LICENSE', 'w') as f:
f.write(lic)
if __name__ == '__main__':
main()