#!/usr/bin/env python
"""
This script gathers build metadata from Travis environment variables and Travis
APIs.

Usage:
$ python get_build_info.py
{
    "json": ["containing", "build", "metadata"]
}
"""

import os
import sys
import json


def gha_get_self_url():
    import requests

    # stringed together api call to get the current check's html url.
    sha = os.environ["GITHUB_SHA"]
    repo = os.environ["GITHUB_REPOSITORY"]
    resp = requests.get(
        "https://api.github.com/repos/{}/commits/{}/check-suites".format(repo, sha)
    )
    data = resp.json()
    for check in data["check_suites"]:
        slug = check["app"]["slug"]
        if slug == "github-actions":
            run_url = check["check_runs_url"]
            html_url = requests.get(run_url).json()["check_runs"][0]["html_url"]
            return html_url

    # Return a fallback url
    return "https://github.com/ray-project/ray/actions"


def get_build_env():
    if os.environ.get("GITHUB_ACTION"):
        return {
            "TRAVIS_COMMIT": os.environ["GITHUB_SHA"],
            "TRAVIS_JOB_WEB_URL": gha_get_self_url(),
            "TRAVIS_OS_NAME": "windows",
        }

    if os.environ.get("BUILDKITE"):
        return {
            "TRAVIS_COMMIT": os.environ["BUILDKITE_COMMIT"],
            "TRAVIS_JOB_WEB_URL": (
                os.environ["BUILDKITE_BUILD_URL"] + "#" + os.environ["BUILDKITE_JOB_ID"]
            ),
            "TRAVIS_OS_NAME": {  # The map is used to stay consistent with Travis
                "linux": "linux",
                "darwin": "osx",
                "win32": "windows",
            }[sys.platform],
        }

    keys = [
        "TRAVIS_COMMIT",
        "TRAVIS_JOB_WEB_URL",
        "TRAVIS_OS_NAME",
    ]
    return {key: os.environ.get(key) for key in keys}


def get_build_config():
    if os.environ.get("GITHUB_ACTION"):
        return {"config": {"env": "Windows CI"}}

    if os.environ.get("BUILDKITE"):
        return {"config": {"env": "Buildkite " + os.environ["BUILDKITE_LABEL"]}}

    import requests

    url = "https://api.travis-ci.com/job/{job_id}?include=job.config"
    url = url.format(job_id=os.environ["TRAVIS_JOB_ID"])
    resp = requests.get(url, headers={"Travis-API-Version": "3"})
    return resp.json()


if __name__ == "__main__":
    build_env = get_build_env()
    build_config = get_build_config()

    print(json.dumps({"build_env": build_env, "build_config": build_config}, indent=2))
