Contributing to the CLI

Our CLI is fully open source and you're more than welcome to make new contributions

Requirements

Most of this package is a very conventional Python package. The main difference is the static the CLI's analysis module uses both git submodules and C code

Before installing, one should pull the submodules with:

git submodule update --init

Then, install dependencies with

pip install -r requirements.txt python setup.py develop

The C code shouldn't require anything additional setup to get running, but depending on your enviroment, you may be prompted to install compilers and supporting tools. If errors are generating during installation, it is likely due to missing dependencies / tools required of the C code. In many cases, resulting error messages should be clear enough to determine what is missing and how to install it, but common errors will be collected here as they are encountered.

Guidelines

There are a few guidelines when developing in this systems. Some notable folders:

  1. commands - It's the folder that interacts with the caller. This is where the commands themselves should reside. These commands are not meant to do heavy lifting. They only do wiring, which is mostly parsing the input parameters.
  2. services - It's where the heavy logic resides. It's mostly organizaed by which command needs them. Commands should generally be thin wrappers around these services.
  3. helpers - This is meant for logic that is useful accross different commands. For example, logging helpers, or the logic the searches folders.

Releases

The standard way to making a new release is the following:

  1. Open a PR that increases the version number in setup.py. As a rule of thumb, just add one to the micro/patch version (e.g., v0.1.6 -> v0.1.7).
  2. Get the up-to-date master branch locally and run the tag.release command from the Makefile.

$ make tag.release version=v<VERSION_NUM>

The version tag must match the regex defined on the Makefile (tag_regex := ^v([0-9]{1,}\.){2}[0-9]{1,}([-_]\w+)?$).

:information-source: Note:
Releases with test word in them are created as draft.
Releases with beta word in them are created as pre-release.