__HELM_INSTALL_TMPL = """
#!/bin/sh
# --- begin runfiles.bash initialization ---
# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash).
set -euo pipefail
if [[ ! -d "\\$${{RUNFILES_DIR:-/dev/null}}" && ! -f "\\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then
    if [[ -f "\\$$0.runfiles_manifest" ]]; then
        export RUNFILES_MANIFEST_FILE="\\$$0.runfiles_manifest"
    elif [[ -f "\\$$0.runfiles/MANIFEST" ]]; then
        export RUNFILES_MANIFEST_FILE="\\$$0.runfiles/MANIFEST"
    elif [[ -f "\\$$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
        export RUNFILES_DIR="\\$$0.runfiles"
    fi
fi
if [[ -f "\\$${{RUNFILES_DIR:-/dev/null}}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
    source "\\$${{RUNFILES_DIR}}/bazel_tools/tools/bash/runfiles/runfiles.bash"
elif [[ -f "\\$${{RUNFILES_MANIFEST_FILE:-/dev/null}}" ]]; then
    source "\\$$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash "     \t                 "\\$$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
else
    echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
    exit 1
fi
# --- end runfiles.bash initialization ---
CHART_TARBALL=\\$$(rlocation __main__/{package}/{chart})
helm --namespace={namespace} install --create-namespace {release_name} \\$$CHART_TARBALL {args}
"""

__HELM_UNINSTALL_TMPL = """
helm --namespace={namespace} uninstall {release_name}
"""

def helm_install(name, namespace, release_name, chart, args):
    args_str = ""
    for arg, value in args.items():
        args_str += "--set %s=%s " % (arg, value)
    native.genrule(
        name = "%s.sh" % name,
        executable = False,
        srcs = [chart],
        outs = ["helm_install.sh"],
        cmd = """cat > $@ <<EOM
%s
EOM
""" % __HELM_INSTALL_TMPL.format(
            namespace = namespace,
            release_name = release_name,
            package = native.package_name(),
            chart = "%s.tar.gz" % chart.split(":")[1],
            args = args_str,
        ),
    )
    native.sh_binary(
        name = name,
        srcs = ["helm_install.sh"],
        data = [
            chart,
        ],
        deps = [
            "@bazel_tools//tools/bash/runfiles",
        ],
    )

def helm_uninstall(name, namespace, release_name):
    native.genrule(
        name = "%s.sh" % name,
        executable = False,
        outs = ["helm_uninstall.sh"],
        cmd = """cat > $@ <<EOM
%s
EOM
""" % __HELM_UNINSTALL_TMPL.format(
            namespace = namespace,
            release_name = release_name,
        ),
    )
    native.sh_binary(
        name = name,
        srcs = ["helm_uninstall.sh"],
    )
