Merge branch 'master' into karthik/gflagsrm
diff --git a/WORKSPACE b/WORKSPACE
index 75ac1d3..e29405b 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -783,11 +783,29 @@
 )
 # end pex repos
 
+# 3rdparty C++ dependencies
 http_archive(
     name = "com_github_gflags_gflags",
     urls = ["https://github.com/gflags/gflags/archive/v2.2.1.tar.gz"],
     strip_prefix = "gflags-2.2.1",
 )
+# end 3rdparty C++ dependencies
+
+# for helm
+new_http_archive(
+    name = "helm_mac",
+    url = "https://storage.googleapis.com/kubernetes-helm/helm-v2.7.2-darwin-amd64.tar.gz",
+    strip_prefix = "darwin-amd64",
+    build_file = "third_party/helm/helm.BUILD",
+)
+
+new_http_archive(
+    name = "helm_linux",
+    url = "https://storage.googleapis.com/kubernetes-helm/helm-v2.7.2-darwin-amd64.tar.gz",
+    strip_prefix = "linux-amd64",
+    build_file = "third_party/helm/helm.BUILD",
+)
+# end helm
 
 # for docker image building
 http_archive(
diff --git a/deploy/kubernetes/helm/BUILD b/deploy/kubernetes/helm/BUILD
new file mode 100644
index 0000000..a88d46a
--- /dev/null
+++ b/deploy/kubernetes/helm/BUILD
@@ -0,0 +1,8 @@
+licenses(["notice"])
+
+package(default_visibility = ["//visibility:public"])
+
+filegroup(
+    name = "chart",
+    srcs = glob(["templates/*.yaml"] + ["templates/*.txt"] + ["templates/*.tpl"] + ["*.lock"] + ["*.yaml"] + ["*.template"]),
+)
diff --git a/deploy/kubernetes/helm/Chart.yaml b/deploy/kubernetes/helm/Chart.yaml.template
similarity index 89%
rename from deploy/kubernetes/helm/Chart.yaml
rename to deploy/kubernetes/helm/Chart.yaml.template
index fa00f27..59e8000 100644
--- a/deploy/kubernetes/helm/Chart.yaml
+++ b/deploy/kubernetes/helm/Chart.yaml.template
@@ -1,8 +1,8 @@
 apiVersion: v1
 description: Heron is a fast distributed streaming engine for processing large data volumes with velocity
 name: heron
-version: 0.17.0
-appVersion: 0.17.0
+version: VERSION
+appVersion: VERSION
 icon: https://twitter.github.io/heron/img/HeronTextLogo-small.png
 home: http://heron.io
 sources:
diff --git a/scripts/packages/BUILD b/scripts/packages/BUILD
index ec56f0f..6afc107 100644
--- a/scripts/packages/BUILD
+++ b/scripts/packages/BUILD
@@ -431,7 +431,7 @@
         'rm -rf $$HERONPYSTREAMLET_UNZIP/heron/streamlet',
         'rm -rf $$HERONPYCONNECTORS_UNZIP/heron/connectors',
         'rm -rf $$HERONPYPROTO_UNZIP/heron/proto',
-        'cp $(SRCS) $$HERONPY_DIR',
+        'cp -R $(SRCS) $$HERONPY_DIR',
         'echo "Heron Python toplevel directory: $$HERONPY_DIR"',
         'cd $$HERONPY_DIR',
         'sed "s/VERSION/$$HERON_VERSION/" setup.py.template > setup.py',
@@ -449,6 +449,46 @@
 )
 
 ################################################################################
+# Heron helm chart packaging
+################################################################################
+genrule(
+    name = "generate-helm-charts",
+    srcs = [
+        "//deploy/kubernetes/helm:chart"
+    ] + generated_release_files,
+    outs = ['index.yaml'],
+    tools = [
+        "//third_party/helm:helm",
+    ],
+    stamp = 1,
+    cmd = "\n".join([
+        'export OUTPUT_DIR=$$(pwd)/$(@D)',
+        'export RELEASE_FILE_DIR=$$(pwd)',
+        'export TMP_DIR=$$(mktemp -d -t helm.XXXXX)',
+        'export HELM_DIR=$$TMP_DIR/heron',
+        'export HERON_VERSION=$$(grep version $$RELEASE_FILE_DIR/$(location :release.yaml) | awk \'{print $$3}\')',
+        'export HERON_VERSION=$$(echo $$HERON_VERSION | sed -e "s/^\'//" -e "s/\'$$//")',
+        'export HERON_VERSION=$$(echo $$HERON_VERSION | grep "[0-9]*\.[0-9]*\.[0-9]*")',
+        'export HERON_VERSION=$$([[ -z $$HERON_VERSION ]] && echo "0.0.0" || echo $$HERON_VERSION)',
+        'mkdir -p $$TMP_DIR $$HELM_DIR heron-charts',
+        'cp $(SRCS) $$HELM_DIR',
+        'sed "s/VERSION/$$HERON_VERSION/" $$HELM_DIR/Chart.yaml.template > $$HELM_DIR/Chart.yaml',
+        'mkdir $$HELM_DIR/charts $$HELM_DIR/templates',
+        'mv $$HELM_DIR/bookkeeper.yaml $$HELM_DIR/tools.yaml $$HELM_DIR/templates',
+        'mv $$HELM_DIR/zookeeper.yaml $$HELM_DIR/templates',
+        'mv $$HELM_DIR/*.txt $$HELM_DIR/*.tpl $$HELM_DIR/templates',
+        'rm $$HELM_DIR/Chart.yaml.template $$HELM_DIR/release.yaml',
+        'tree $$HELM_DIR',
+        '$(location //third_party/helm:helm) init --client-only',
+        '$(location //third_party/helm:helm) package $$HELM_DIR',
+        'mv *.tgz heron-charts',
+        '$(location //third_party/helm:helm) repo index heron-charts --url https://storage.googleapis.com/heron-charts',
+        'cp heron-charts/* $$OUTPUT_DIR',
+    ]),
+)
+
+# '$(location //third_party/helm:helm) init -c',
+################################################################################
 # Heron self installed binaries
 ################################################################################
 sh_binary(
diff --git a/third_party/helm/BUILD b/third_party/helm/BUILD
new file mode 100644
index 0000000..9e4a24b
--- /dev/null
+++ b/third_party/helm/BUILD
@@ -0,0 +1,11 @@
+licenses(["notice"])
+
+package(default_visibility = ["//visibility:public"])
+
+filegroup(
+    name = "helm",
+    srcs = select({
+        "//tools/platform:darwin": ["@helm_mac//:helm-exec"],
+        "//conditions:default": ["@helm_linux//:helm-exec"],
+    }),
+)
diff --git a/third_party/helm/helm.BUILD b/third_party/helm/helm.BUILD
new file mode 100644
index 0000000..4990773
--- /dev/null
+++ b/third_party/helm/helm.BUILD
@@ -0,0 +1,8 @@
+licenses(["notice"])
+
+package(default_visibility = ["//visibility:public"])
+
+filegroup(
+    name = "helm-exec",
+    srcs = ["helm"],
+)