2022-11-26 04:36:25 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
|
|
import json
|
|
|
|
import os
|
|
|
|
import subprocess
|
|
|
|
from pprint import pprint
|
|
|
|
|
|
|
|
import requests
|
|
|
|
|
|
|
|
|
|
|
|
def get_git_commit_timestamp() -> int:
|
|
|
|
return int(subprocess.check_output(['git', 'show', '-s', '--format=%ct']).decode('ascii').rstrip())
|
|
|
|
|
|
|
|
|
|
|
|
def get_git_commit_sha() -> str:
|
|
|
|
return subprocess.check_output(['git', 'rev-parse', 'HEAD']).decode('ascii').strip()
|
|
|
|
|
|
|
|
|
|
|
|
def generate_url(args: argparse.Namespace) -> str:
|
|
|
|
url_components = [args.base_url.rstrip('/'), 'data']
|
|
|
|
|
|
|
|
for arg in [args.project, args.version]:
|
|
|
|
if arg != "":
|
|
|
|
url_components.append(arg)
|
|
|
|
|
|
|
|
return str.join('/', url_components) + '/'
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
parser = argparse.ArgumentParser(description="Upload progress information.")
|
|
|
|
parser.add_argument("-b", "--base_url", help="API base URL", required=True)
|
|
|
|
parser.add_argument("-a", "--api_key", help="API key (env var PROGRESS_API_KEY)")
|
|
|
|
parser.add_argument("-p", "--project", help="Project slug", required=True)
|
|
|
|
parser.add_argument("-v", "--version", help="Version slug", required=True)
|
|
|
|
parser.add_argument("input", help="Progress JSON input")
|
|
|
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
api_key = args.api_key or os.environ.get("PROGRESS_API_KEY")
|
|
|
|
if not api_key:
|
|
|
|
raise "API key required"
|
|
|
|
url = generate_url(args)
|
|
|
|
|
|
|
|
entries = []
|
|
|
|
with open(args.input, "r") as f:
|
|
|
|
data = json.load(f)
|
|
|
|
entries.append({
|
|
|
|
"timestamp": get_git_commit_timestamp(),
|
|
|
|
"git_hash": get_git_commit_sha(),
|
|
|
|
"categories": data,
|
|
|
|
})
|
|
|
|
|
|
|
|
print("Publishing entries to", url)
|
|
|
|
pprint(entries)
|
|
|
|
data = {
|
2022-11-26 04:40:34 +00:00
|
|
|
"api_key": api_key,
|
2022-11-26 04:36:25 +00:00
|
|
|
"entries": entries,
|
|
|
|
}
|
|
|
|
r = requests.post(url, json=data)
|
|
|
|
r.raise_for_status()
|
|
|
|
print("Done!")
|