2014-07-15 16:52:17 +00:00
Contributing to InfluxDB
========================
2014-07-15 20:01:33 +00:00
InfluxDB follows standard Go project structure. This means that all
2014-07-15 16:52:17 +00:00
your go development are done in $GOPATH/src. GOPATH can be any
directory under which InfluxDB and all it's dependencies will be
cloned. For more details on recommended go project's structure, see
2014-09-28 18:06:45 +00:00
[How to Write Go Code ](http://golang.org/doc/code.html] ) and
[Go: Best Practices for Production Environments ](http://peter.bourgon.org/go-in-production/ ), or you can just follow
2014-07-15 16:52:17 +00:00
the steps below.
2014-07-15 19:26:19 +00:00
Signing the CLA
---------------
If you are going to be contributing back to InfluxDB please take a
second to sign our CLA, which can be found
[on our website ](http://influxdb.com/community/cla.html )
2014-07-15 16:52:17 +00:00
Getting go
----------
I recommend using gvm which is a go version manager. For instructions
on how to install see
2014-08-12 19:24:56 +00:00
[gvm page on github ](https://github.com/moovweb/gvm ). InfluxDB
currently works with go 1.3 and newer version only.
2014-07-15 16:52:17 +00:00
After installing gvm you can install and set the default go version by
running the following:
2014-08-12 19:24:56 +00:00
gvm install go1.3
gvm use go1.3 --default
2014-07-15 16:52:17 +00:00
Project structure
-----------------
First you need to setup the project structure
export GOPATH=$HOME/gocodez
mkdir -p $GOPATH/src/github.com/influxdb
cd $GOPATH/src/github.com/influxdb
git clone git@github.com:influxdb/influxdb
2014-07-17 16:49:45 +00:00
You can add the line `export GOPATH=$HOME/gocodez` to your bash/zsh
file to be set for every shell instead of having to manually run it
everytime.
2014-07-15 16:52:17 +00:00
We have a pre commit hook to make sure code is formatted properly
before you commit any changes. We strongly recommend using the pre
commit hook to guard against accidentally committing unformatted
code. To use the pre-commit hook, run the following:
cd $GOPATH/src/github.com/influxdb/influxdb
2014-07-15 17:00:21 +00:00
cp .hooks/pre-commit .git/hooks/
2014-07-15 16:52:17 +00:00
2014-07-15 16:55:38 +00:00
In case the commit is rejected because it's not formatted you can run
the following to format the code:
make format
2014-07-15 16:52:17 +00:00
Build on OSX
------------
You'll need the following dependencies:
brew install protobuf bison flex leveldb hg bzr
To build run the following command:
./configure \
2014-09-28 18:18:32 +00:00
--with-flex=$(brew --prefix flex)/bin/flex \
--with-bison=$(brew --prefix bison)/bin/bison & & make
2014-07-15 16:52:17 +00:00
Build on Linux
--------------
You'll need the following dependencies:
2014-07-15 16:58:09 +00:00
sudo apt-get install mercurial bzr protobuf-compiler flex bison \
valgrind g++ make autoconf libtool libz-dev libbz2-dev curl \
2014-10-13 14:25:38 +00:00
rpm build-essential git wget
2014-07-15 16:52:17 +00:00
2014-09-09 08:43:02 +00:00
on Red Hat-based distros:
2014-07-15 16:52:17 +00:00
2014-09-09 08:43:02 +00:00
sudo yum install mercurial bzr protobuf-compiler flex bison valgrind \
2014-09-30 21:01:38 +00:00
gcc-c++ libstdc++-static make autoconf libtool zlib-devel bzip2-libs \
bzlib2-devel
2014-07-15 16:52:17 +00:00
To build run the following:
./configure & & make
2014-07-17 16:49:45 +00:00
Building with RocksDB
---------------------
RocksDB requires GCC 4.7 to get C++11 support. See
[their installation instruction ](https://github.com/facebook/rocksdb/blob/296e340753f23f213655ff1d4549c73fa0262038/INSTALL.md )
for more information. Currently our build system runs Centos 6.4 and
uses a compiled version of GCC 4.7
2014-07-15 16:52:17 +00:00
Common Make targets
-------------------
The following are make targets that can be used on any architecture:
- `build` Builds the binaries. This target generates `influxdb` binary
in the root of the repo
- `test` Runs the unit tests in all packages. Can be run with
`verbose=on` to increase verbosity and `only=<test-name>` to only
run certain tests.
- `integration_test` Runs the integration test suite. Accepts tha same
arguments as `test` . The integration tests are in the `integration`
package.
- `clean` Cleans all dependencies and temporary files created by the Makefile.
2014-07-15 16:55:38 +00:00
- `format` Formats the entire codebase.
2014-07-17 16:36:01 +00:00
Useful links
------------
- [Useful techniques in Go ](http://arslan.io/ten-useful-techniques-in-go )
- [Go in production ](http://peter.bourgon.org/go-in-production/ )
- [Principles of designing Go APIs with channels ](https://inconshreveable.com/07-08-2014/principles-of-designing-go-apis-with-channels/ )
- [Common mistakes in Golang ](http://soryy.com/blog/2014/common-mistakes-with-go-lang/ ). Especially this section `Loops, Closures, and Local Variables`