diff --git a/docs/development.md b/docs/development.md index 87d143ee..0832b194 100644 --- a/docs/development.md +++ b/docs/development.md @@ -1 +1,128 @@ -// This doc aims to help developers to build the dev environment and start contribute to Kompose \ No newline at end of file +# Development Guide + +## Building Kompose +### Build with `go` + +- you need `go v1.5` or later +- You need to set export `GO15VENDOREXPERIMENT=1` environment variable +- If your working copy is not in your `GOPATH`, you need to set it accordingly. + +```console +$ go build -tags experimental -o kompose ./cli/main +``` + +You need `-tags experimental` because the current bundlefile package of docker/libcompose is still experimental. + +### Building multi-platform binaries with make + +- You need `make` + +```console +$ make binary +``` + +## Workflow +### Fork the main repository + +1. Go to https://github.com/skippbox/kompose +2. Click the "Fork" button (at the top right) + +### Clone your fork + +The commands below require that you have $GOPATH. We highly recommended you put Kompose' code into your $GOPATH. + +```console +mkdir -p $GOPATH/src/github.com/skippbox +cd $GOPATH/src/github.com/skippbox +git clone https://github.com/$YOUR_GITHUB_USERNAME/kompose.git +cd kompose +git remote add upstream 'https://github.com/skippbox/kompose' +``` + +### Create a branch and make changes + +```console +git checkout -b myfeature +# Make your code changes +``` + +### Keeping your development fork in sync + +```console +git fetch upstream +git rebase upstream/master +``` + +Note: If you have write access to the main repository at github.com/skippbox/kompose, you should modify your git configuration so that you can't accidentally push to upstream: + +```console +git remote set-url --push upstream no_push +``` + +### Committing changes to your fork + +```console +git commit +git push -f origin myfeature +``` + +### Creating a pull request + +1. Visit https://github.com/$YOUR_GITHUB_USERNAME/kompose.git +2. Click the "Compare and pull request" button next to your "myfeature" branch. +3. Check out the pull request process for more details + +## Godep and dependency management + +Kompose uses `godep` to manage dependencies. It is not strictly required for building Kompose but it is required when managing dependencies under the vendor/ tree, and is required by a number of the build and test scripts. Please make sure that godep is installed and in your `$PATH`, and that `godep version` says it is at least v63. + +### Installing godep + +There are many ways to build and host Go binaries. Here is an easy way to get utilities like `godep` installed: + +1) Ensure that mercurial is installed on your system. (some of godep's dependencies use the mercurial source control system). Use `apt-get install mercurial` or `yum install mercurial` on Linux, or brew.sh on OS X, or download directly from mercurial. + +2) Create a new GOPATH for your tools and install godep: + +```console +export GOPATH=$HOME/go-tools +mkdir -p $GOPATH +go get -u github.com/tools/godep +``` + +3) Add this $GOPATH/bin to your path. Typically you'd add this to your ~/.profile: + +```console +export GOPATH=$HOME/go-tools +export PATH=$PATH:$GOPATH/bin +``` + +To check your version of godep: + +```console +godep version +godep v74 (linux/amd64/go1.6.2) +``` + +Note: At this time, godep version >= v64 is known to work in the Kompose project. + +If it is not a valid version try, make sure you have updated the godep repo with `go get -u github.com/tools/godep`. + +### Using godep + +1. Populate dependencies for your Kompose. + +```console +cd $GOPATH/src/github.com/skippbox +godep restore +``` + +2. Add a new dependency. + +To add a new package, do this: + +```console +go get foo/bar +# edit your code to import foo/bar +godep save ./... +```