#!/usr/bin/env python3

import os.path
import subprocess
import sys

ref = os.environ["GITHUB_REF"].split("/")

if ref[1] != "heads":
    print("Not a branch")
    sys.exit(0)

version = "/".join(ref[2:])

if version not in os.environ.get("HELM_RELEASE_NAMES", "").split(","):
    print("Not a release branch")
    sys.exit(0)

env = {}
with open(".env") as f:
    for line in f:
        if line and line[0] != "#":
            try:
                index = line.index("=")
                env[line[:index].strip()] = line[index + 1 :].strip()
            except ValueError:
                # Ignore lines that don't have a '='
                pass

print("Deploying images to Docker Hub for tag {}".format(version))
sys.stdout.flush()
subprocess.check_call(
    [
        "docker",
        "login",
        "--username=" + subprocess.check_output(["gopass", "gs/ci/dockerhub/username"]).decode(),
        "--password=" + subprocess.check_output(["gopass", "gs/ci/dockerhub/password"]).decode(),
    ]
)

images = sys.argv[1:]
for image in images:
    full_image = "{}-{}".format(env.get("DOCKER_BASE", "camptocamp/geomapfish"), image)
    src_image = "{}:{}".format(full_image, env.get("DOCKER_TAG", "latest"))
    dest_image = "{}:{}".format(full_image, version)
    subprocess.check_call(["docker", "tag", src_image, dest_image])
    subprocess.check_call(["docker", "push", dest_image])


openshift_version = "3.11.0"
openshift_hash = "0cbc58b"
openshift_version_name = "openshift-origin-client-tools-v{}-{}-linux-64bit".format(
    openshift_version, openshift_hash
)
openshift_file = openshift_version_name + ".tar.gz"
openshift_url = "https://github.com/openshift/origin/releases/download/v{}/{}".format(
    openshift_version, openshift_file
)
subprocess.check_call(["wget", "--quiet", openshift_url], cwd="/tmp")
subprocess.check_call(["tar", "xfz", openshift_file], cwd="/tmp")
oc = "/tmp/{}/oc".format(openshift_version_name)

subprocess.check_call(
    [
        oc,
        "login",
        subprocess.check_output(
            ["gopass", "gs/ci/openshift/{}/url".format(os.environ["OPENSHIFT_PROJECT"])]
        ).decode(),
        "--token="
        + subprocess.check_output(
            ["gopass", "gs/ci/openshift/{}/token".format(os.environ["OPENSHIFT_PROJECT"])]
        ).decode(),
    ]
)
for image in images:
    openshift_image_ref = "{version}-c2cgeoportal-{image}:{version}".format(version=version, image=image)
    subprocess.check_call(
        [
            oc,
            "import-image",
            openshift_image_ref,
            "--scheduled=true",
            "--reference-policy=local",
            "--namespace=" + os.environ["OPENSHIFT_PROJECT"],
        ]
    )
