Revisions to: Contributing to BigchainDB (docs)

This commit is contained in:
Troy McConaghy 2018-03-12 14:23:49 +01:00
parent 5283c32abb
commit 0e29517145
7 changed files with 216 additions and 27 deletions

View File

@ -7,6 +7,6 @@ Policies
code-of-conduct
shared-workspace
release-process
release-process-note
release-process

View File

@ -1,4 +1,9 @@
# A Note on Our Release Process
# Notes on Our Release Process
Our Release Process hasn't been revised for C4 yet. It should be. That will simplify it a lot. Releases are just tags on the ``master`` branch. There are no
topic branches!
"Our Release Process" is our release process for BigchainDB Server, not something else.
It hasn't been revised for [C4](https://github.com/bigchaindb/BEPs/tree/master/1) yet. It should be. That will simplify it a lot. Releases are just tags on the ``master`` branch. There are no topic branches!
Minor releases (X.Y.Z) and major releases (X.Y) are all just Git tags (named commits). There are no branches.
What if 2.4 is out but now you want to release an update to 2.3.1 named 2.3.2? Easy, create a whole new repository and let the `master` branch over in that repository represent the 2.3.x history.

View File

@ -11,9 +11,8 @@ It includes several sub-projects.
- `py-abci <https://github.com/davebryson/py-abci>`_ (a Python package we use)
- `BigchainDB Enhancement Proposals (BEPs) <https://github.com/bigchaindb/BEPs>`_
Ways You Might Contribute
-------------------------
Contents
--------
.. toctree::
:maxdepth: 2

View File

@ -7,5 +7,6 @@ Ways to Contribute
bug-report
write-a-bep
write-code
vanshdeep-notes
write-docs
answer-questions

View File

@ -0,0 +1,163 @@
# Vanshdeep's Notes on Running a Local Dev Node
The following doc describes how to run a local node for developing BigchainDB Tendermint version.
There are two crucial dependencies required to start a local node:
- MongoDB
- Tendermint
and of course you also need to install BigchainDB Sever from the local code you just developed.
## Installing MongoDB
MongoDB can be easily installed, just refer their [installation documentation](https://docs.mongodb.com/manual/installation/) for your distro.
We know MongoDB 3.4 works with BigchainDB.
MongoDB 3.6 _might_ work, or it might not. You could try it.
After the installation of MongoDB is complete, run MongoDB using `sudo mongod --replSet=bigchain-rs`
## Installing Tendermint
### Installing Tendermint Using Docker
Tendermint can be run directly using the docker image. Refer [here](https://hub.docker.com/r/tendermint/tendermint/) for more details.
### Installing Tendermint from Source
- Before we can begin installing Tendermint one should ensure that the Golang is installed on system and `$GOPATH` should be set in the `.bashrc` or `.zshrc`. An example setup is shown below
```bash
$ echo $GOPATH
/home/user/Documents/go
$ go -h
Go is a tool for managing Go source code.
Usage:
go command [arguments]
The commands are:
build compile packages and dependencies
clean remove object files
...
```
- We can drop `GOPATH` in `PATH` so that installed Golang packages are directly available in the shell. To do that add the following to your `.bashrc`
```bash
export PATH=${PATH}:${GOPATH}/bin
```
- Now we can install Glide which is vendor package manger for Golang,
```bash
$ go get github.com/Masterminds/glide
...
...
$ glide -h
NAME:
glide - Vendor Package Management for your Go projects.
Each project should have a 'glide.yaml' file in the project directory. Files
look something like this:
...
```
- Now we install Tendermint from source,
```bash
$ mkdir -p $GOPATH/src/github.com/tendermint && cd $_
$ git clone https://github.com/tendermint/tendermint
...
$ cd tendermint && glide install
$ go install ./cmd/tendermint
```
- If the above commands were executed successfully then Tendermint is installed at `$GOPATH/bin`. To ensure Tendermint's installed fine execute the following command,
```bash
$ tendermint -h
Tendermint Core (BFT Consensus) in Go
Usage:
tendermint [command]
Available Commands:
gen_validator Generate new validator keypair
help Help about any command
init Initialize Tendermint
...
```
### Running Tendermint
- We can initialize and run tendermint as follows,
```bash
$ tendermint init
...
$ tendermint node --consensus.create_empty_blocks=false
```
The argument `--consensus.create_empty_blocks=false` specifies that Tendermint should not commit empty blocks.
- To reset all the data stored in Tendermint execute the following command,
```bash
$ tendermint unsafe_reset_all
```
## Installing BigchainDB
To install BigchainDB from source (for dev), clone the repo and execute the following command, (it is better that you create a virtual env for this)
```bash
$ git clone https://github.com/bigchaindb/bigchaindb.git
...
$ git checkout tendermint
$ pip install -e .[dev] # or pip install -e '.[dev]' # for zsh
```
## Running tests
To execute tests when developing a feature or fixing a bug one could use the following command,
```bash
$ pytest -v --database-backend=localmongodb
```
NOTE: MongoDB and Tendermint should be running as discussed above.
One could mark a specific test and execute the same by appending `-m my_mark` to the above command.
Although the above should prove sufficient in most cases but in case tests are failing on Travis CI then the following command can be used to possibly replicate the failure locally,
```bash
$ docker-compose -f docker-compose.travis.yml run --rm --no-deps bdb pytest -v --cov=bigchaindb
```
NOTE: before executing the above command the user must ensure that they reset the Tendermint container by executing `tendermint usafe_reset_all` command in the Tendermint container.
### Notes
How to check `bigchaindb upsert-validator`:
- Clean bigchaindb (`bigchaindb drop`, `bigchaindb init`) and execute `bigchaindb upsert-validator B0E42D2589A455EAD339A035D6CE1C8C3E25863F268120AA0162AD7D003A4014 10`
- Start Tendermint
- `tendermint init`
- `tendermint unsafe_reset_all`
- `tendermint node --consensus.create_empty_blocks=false`
- Start BigchainDB with `bichaindb start`
- Execute `curl http://localhost:46657/validators`

View File

@ -6,4 +6,4 @@ the better chance you have of convincing us that it's easy and worth doing.
1. Review [2/COSS](https://github.com/bigchaindb/BEPs/tree/master/2). Maybe print it for reference.
1. Folowing those guidelines, make a pull request against the [bigchaindb/BEPs](https://github.com/bigchaindb/BEPs) repository on GitHub.
1. Don't spend weeks on this. Version 1 should take a few hours to write up, maximum. You can add to it in the future. The process is iterative.
If you need more than a few hours, then consider writing multiple BEPs, because your idea is too big to fit into one BEP.
If you need more than a few hours, then consider writing multiple BEPs.

View File

@ -22,6 +22,8 @@ C4 is the Collective Code Construction Contract. It's quite short:
Set Up Your Local Machine. Here's How.
--------------------------------------
- Make sure you have Git installed.
- Get a text editor. Internally, we like:
- Vim
@ -41,18 +43,28 @@ Set Up Your Local Machine. Here's How.
Don't use apt or apt-get to get the latest ``pip``. It won't work properly. Use ``get-pip.py``
from `the pip website <https://pip.pypa.io/en/stable/installing/>`_.
- Use the latest ``pip`` to get the latest ``virtualenv`` and ``pre-commit``:
- Use the latest ``pip`` to get the latest ``virtualenv``:
.. code::
$ pip install virtualenv
$ pip install pre-commit
- Create a Python Virttual Environment (virtualenv) for doing BigchainDB Server development. There are many ways to do that. Google around and pick one.
An old-fashioned but fine way is:
.. code::
$ virtualenv -p $(which python3.6) NEW_ENV_NAME
$ . NEW_ENV_NAME/bin/activate
Be sure to use Python 3.6.x as the Python version for your virtualenv. The virtualenv creation process will actually get the
latest ``pip``, ``wheel`` and ``setuptools`` and put them inside the new virtualenv.
Start Coding
------------
Start Writing Code
------------------
Use the Git `Fork and Pull Request Workflow <https://github.com/susam/gitpr>`_. Tip: print that page for reference.
Use the Git `Fork and Pull Request Workflow <https://github.com/susam/gitpr>`_. Tip: You could print that page for reference.
Your Python code should follow `our Python Style Guide <https://github.com/bigchaindb/bigchaindb/blob/master/PYTHON_STYLE_GUIDE.md>`_.
Similarly for JavaScript.
@ -61,29 +73,38 @@ Make sure `pre-commit <https://pre-commit.com/>`_ actually checks commits. Do:
.. code::
$ pip install pre-commit # might not do anything if it is already installed, which is okay
$ pre-commit install
That will load the pre-commit settings in the file ``.pre-commit-config.yaml``. Now every time you do ``git commit <stuff>``, pre-commit
will run all those checks.
The Tricky Bits
---------------
To install BigchainDB Server from the local code, and to keep it up to date with the latest code in there, use:
Running MongoDB and Tendermint to test stuff...
.. code::
But how?
$ pip install -e .[dev]
You can look up how to install them, configure them, and run them. But the details are hazy.
This is where we need some advice and help.
Vanshdeep was going to write what he does. TODO: add that here.
What about a multi-node setup? Even more confusing.
The ``-e`` tells it to use the latest code. The ``.`` means use the current directory, which should be the one containing ``setup.py``.
The ``[dev]`` tells it to install some extra Python packages. Which ones? Open ``setup.py`` and look for ``dev`` in the ``extras_require`` section.
Run the Tests Locally
---------------------
Remember to Write Tests
-----------------------
This is also unclear. I mean, use pytest, but how, exactly? Again MongoDB and Tendermint are probably needed sometimes.
We like to test everything, if possible. Unit tests and also integration tests. We use the `pytest <https://docs.pytest.org/en/latest/>`_
framework to write Python tests. Read all about it.
Most tests are in the ``tests/`` folder. Take a look around.
Running a Local Node for Dev and Test
-------------------------------------
This is tricky and personal. Different people do it different ways. We documented some of those on separate pages.
- `Vanshdeep's notes on dev node setup and running all tests locally <vanshdeep-notes.html>`_
- More to come? (Potentially: using Docker Compose, Kubernetes and Minikube, or Ansible.)
Create the PR on GitHub