# Developers Guide This guide explains how to set up your environment for developing on Helm and Tiller. ## Prerequisites - Go 1.6.0 or later - Glide 0.10.2 or later - kubectl 1.2 or later - A Kubernetes cluster (optional) - The gRPC toolchain ## Building Helm/Tiller We use Make to build our programs. The simplest way to get started is: ```console $ make boostrap build ``` This will build both Helm and Tiller. To run all of the tests (without running the tests for `vendor/`), run `make test`. To run Helm and Tiller locally, you can run `bin/helm` or `bin/tiller`. - Helm and Tiller are known to run on Mac OSX and most Linuxes, including Alpine. - Tiller must have access to a Kubernets cluster. It learns about the cluster by examining the Kube config files that `kubectl` uese. ## gRPC and Protobuf Helm and Tiller communicate using gRPC. To get started with gRPC, you will need to... - Install `protoc` for compiling protobuf files. Releases are [here](https://github.com/google/protobuf/releases) - Install the protoc Go plugin: `go get -u github.com/golang/protobuf/protoc-gen-go` Note that you need to be on protobuf 3.x (`protoc --version`) and use the latest Go plugin. While the gRPC and ProtoBuf specs remain silent on indentation, we require that the indentation style matches the Go format specification. Namely, protocol buffers should use tab-based indentation and rpc declarations should follow the style of Go function declarations. ### The Helm API (HAPI) We use gRPC as an API layer. See `pkg/proto/hapi` for the generated Go code, and `_proto` for the protocol buffer definitions. To regenerate the Go files from the protobuf source, `make protoc`. ## Docker Images To build Docker images, use `make docker-build` ## Running a Local Cluster You can run tests locally using the `scripts/local-cluster.sh` script to start Kubernetes inside of a Docker container. For OS X, you will need to be running `docker-machine`. ## Contribution Guidelines We welcome contributions. This project has set up some guidelines in order to ensure that (a) code quality remains high, (b) the project remains consistent, and (c) contributions follow the open source legal requirements. Our intent is not to burden contributors, but to build elegant and high-quality open source code so that our users will benefit. Make sure you have read and understood the main CONTRIBUTING guide: https://k8s.io/helm/blob/master/CONTRIBUTING.md We follow the coding standards and guidelines outlined by the Deis project: https://github.com/deis/workflow/blob/master/CONTRIBUTING.md https://github.com/deis/workflow/blob/master/src/contributing/submitting-a-pull-request.md Adidtionally, contributors must have a CLA with CNCF/Google before we can accept contributions.