n8n/CONTRIBUTING.md
2019-08-21 23:18:09 +02:00

161 lines
3.7 KiB
Markdown

# Contributing to n8n
Great that you are here and you want to contribute to n8n
## Contents
- [Code of Conduct](#code-of-conduct)
- [Directory Structure](#directory-structure)
- [Development Setup](#development-setup)
- [Development Cycle](#development-cycle)
- [Create Custom Nodes](#create-custom-nodes)
## Code of Conduct
This project and everyone participating in it are governed by the Code of
Conduct which can be found in the file [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
By participating, you are expected to uphold this code. Please report
unacceptable behavior to jan@n8n.io.
## Directory Structure
n8n is split up in different modules which are all in a single mono repository.
The most important directories:
- [/docker/image](/docker/image) - Dockerfiles to create n8n containers
- [/docker/compose](/docker/compose) - Examples Docker Setups
- [/packages](/packages) - The different n8n modules
- [/packages/cli](/packages/cli) - CLI code to run front- & backend
- [/packages/core](/packages/core) - Core code which handles workflow
execution, active webhooks and
workflows
- [/packages/editor-ui](/packages/editor-ui) - Vue frontend workflow editor
- [/packages/node-dev](/packages/node-dev) - Simple CLI to create new n8n-nodes
- [/packages/nodes-base](/packages/nodes-base) - Base n8n nodes
- [/packages/worflow](/packages/worflow) - Workflow code with interfaces which
get used by front- & backend
## Development Setup
If you want to change or extend n8n you have to make sure that all needed
dependencies are installed and the packages get linked correctly. Here a short guide on how that can be done:
### Requirements
#### Build Tools
The packages which n8n uses depend on a few build tools:
Linux:
```
apt-get install -y build-essential python
```
Windows:
```
npm install -g windows-build-tools
```
#### lerna
n8n is split up in different modules which are all in a single mono repository.
To facilitate those modules management, [lerna](https://lerna.js.org) gets
used. It automatically sets up file-links between modules which depend on each
other.
So for the setup to work correctly lerna has to be installed globally like this:
```
npm install -g lerna
```
### Actual n8n setup
Now that everything n8n requires to run is installed the actual n8n code can be
checked out and set up:
1. Clone the repository
```
git clone https://github.com/n8n-io/n8n.git
```
1. Go into repository folder
```
cd n8n
```
1. Install all dependencies of all modules and link them together:
```
lerna bootstrap --hoist
```
1. Build all the code:
```
npm run build
```
### Start
To start n8n execute:
```
npm run start
```
## Development Cycle
While iterating on n8n modules code, you can run `npm run dev`. It will then
automatically build your code, restart the backend and refresh the frontend
(editor-ui) on every change you make.
1. Start n8n in development mode:
```
npm run dev
```
1. hack, hack, hack
1. Check if everything still runs in production mode
```
npm run build
npm run start
```
1. Create tests
1. Run all tests
```
npm run test
```
1. Commit code and create pull request
### Test suite
The tests can be started via:
```
npm run test
```
If that gets executed in one of the package folders it will only run the tests
of this package. If it gets executed in the n8n-root folder it will run all
tests of all packages.
## Create Custom Nodes
It is very easy to create own nodes for n8n. More information about that can
be found in the documentation of "n8n-node-dev" which is a small CLI which
helps with n8n-node-development.
[To n8n-node-dev](https://github.com/n8n-io/n8n/tree/master/packages/node-dev)