summaryrefslogtreecommitdiff
path: root/tools/upload_progress.py
blob: 6ec8f0813a67d915a557ff0c99fd6f82deb74641 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env python3

###
# Uploads progress information to https://github.com/decompals/frogress.
#
# Usage:
#   python3 tools/upload_progress.py -b https://progress.decomp.club/ -p [project] -v [version] build/[version]/progress.json
#
# If changes are made, please submit a PR to
# https://github.com/encounter/dtk-template
###

import argparse
import json
import os
import requests
import subprocess
import sys


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 entry to", url)
    json.dump(entries[0], sys.stdout, indent=4)
    print()
    r = requests.post(url, json={
        "api_key": api_key,
        "entries": entries,
    })
    r.raise_for_status()
    print("Done!")