Great that you are here and you want to contribute to flowease
- Contributing to flowease
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. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected].
flowease is split up in different modules which are all in a single mono repository.
The most important directories:
- /docker/image - Dockerfiles to create flowease containers
- /docker/compose - Examples Docker Setups
- /packages - The different flowease modules
- /packages/cli - CLI code to run front- & backend
- /packages/core - Core code which handles workflow execution, active webhooks and workflows. Contact flowease before starting on any changes here
- /packages/design-system - Vue frontend components
- /packages/editor-ui - Vue frontend workflow editor
- /packages/node-dev - CLI to create new flowease-nodes
- /packages/nodes-base - Base flowease nodes
- /packages/workflow - Workflow code with interfaces which get used by front- & backend
If you want to change or extend flowease you have to make sure that all the needed dependencies are installed and the packages get linked correctly. Here's a short guide on how that can be done:
Node.js version 16.9 or newer is required for development purposes.
pnpm version 8.9 or newer is required for development purposes. We recommend installing it with corepack.
flowease is split up into different modules which are all in a single mono repository. To facilitate the module management, pnpm workspaces are used. This automatically sets up file-links between modules which depend on each other.
We recommend enabling Node.js corepack with corepack enable
.
With Node.js v16.17 or newer, you can install the latest version of pnpm: corepack prepare pnpm@latest --activate
. If you use an older version install at least version 7.18 of pnpm via: corepack prepare [email protected] --activate
.
IMPORTANT: If you have installed Node.js via homebrew, you'll need to run brew install corepack
, since homebrew explicitly removes npm
and corepack
from the node
formula.
IMPORTANT: If you are on windows, you'd need to run corepack enable
and corepack prepare pnpm --activate
in a terminal as an administrator.
The packages which flowease uses depend on a few build tools:
Debian/Ubuntu:
apt-get install -y build-essential python
CentOS:
yum install gcc gcc-c++ make
Windows:
npm add -g windows-build-tools
MacOS:
No additional packages required.
IMPORTANT: All the steps below have to get executed at least once to get the development setup up and running!
Now that everything flowease requires to run is installed, the actual flowease code can be checked out and set up:
-
Fork the flowease repository.
-
Clone your forked repository:
git clone https://github.com/<your_github_username>/flowease.git
-
Go into repository folder:
cd flowease
-
Add the original flowease repository as
upstream
to your forked repository:git remote add upstream https://github.com/khulnasoft/flowease.git
-
Install all dependencies of all modules and link them together:
pnpm install
-
Build all the code:
pnpm build
To start flowease execute:
pnpm start
To start flowease with tunnel:
./packages/cli/bin/flowease start --tunnel
While iterating on flowease modules code, you can run pnpm dev
. It will then
automatically build your code, restart the backend and refresh the frontend
(editor-ui) on every change you make.
- Start flowease in development mode:
pnpm dev
- Hack, hack, hack
- Check if everything still runs in production mode:
pnpm build pnpm start
- Create tests
- Run all tests:
pnpm test
- Commit code and create a pull request
Unit tests can be started via:
pnpm 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 flowease-root folder it will run all tests of all packages.
pnpm cypress:install
to install cypress before running the tests for the first time and to update cypress.
E2E tests can be started via one of the following commands:
pnpm test:e2e:ui
: Start flowease and run e2e tests interactively using built UI code. Does not react to code changes (i.e. runspnpm start
andcypress open
)pnpm test:e2e:dev
: Start flowease in development mode and run e2e tests interactively. Reacts to code changes (i.e. runspnpm dev
andcypress open
)pnpm test:e2e:all
: Start flowease and run e2e tests headless (i.e. runspnpm start
andcypress run --headless
)
To start a release, trigger this workflow with the SemVer release type, and select a branch to cut this release from. This workflow will then:
- Bump versions of packages that have changed or have dependencies that have changed
- Update the Changelog
- Create a new branch called
release/${VERSION}
, and - Create a new pull-request to track any further changes that need to be included in this release
Once ready to release, simply merge the pull-request. This triggers another workflow, that will:
- Build and publish the packages that have a new version in this release
- Create a new tag, and GitHub release from squashed release commit
- Merge the squashed release commit back into
master
Learn about building nodes to create custom nodes for flowease. You can create community nodes and make them available using npm.
The repository for the flowease documentation on docs.flowease.khulnasoft.com can be found here.
You can submit your workflows to flowease's template library.
flowease is working on a creator program, and developing a marketplace of templates. This is an ongoing project, and details are likely to change.
Refer to flowease Creator hub for information on how to submit templates and become a creator.
That we do not have any potential problems later it is sadly necessary to sign a Contributor License Agreement. That can be done literally with the push of a button.
We used the most simple one that exists. It is from Indie Open Source which uses plain English and is literally only a few lines long.
Once a pull request is opened, an automated bot will promptly leave a comment requesting the agreement to be signed. The pull request can only be merged once the signature is obtained.