__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 " \
    	                 "\$$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",]
    )
