Skip to main content

A minimalistic tool to automate source code cloning and building

Project description

Python Bash Tests

forest

The forest project aims at automatizing the clone and build process for open source software. Differently from other systems such as Conda, or Conan, it is a non-intrusive system which does not aim at environment management.

Quickstart

Setup a new workspace and add new recipes. Optional arguments are surrounded by [square brackets].

  • [sudo] pip3 install hhcm-forest
  • mkdir my_ws && cd my_ws
  • forest init
  • source setup.bash
  • forest add-recipes git@github.com:advrhumanoids/multidof_recipes.git [--tag master]

Install the xbot2_examples recipe with its dependencies.

  • forest grow xbot2_examples [-j8] [--clone-protocol https]

Command line interface

Forest's CLI is divided into three main verbs, i.e. init, add-recipes, and grow.

forest init

Initialize the current folder as a forest workspace, i.e. it creates

  • a src folder that will contain source code
  • a recipes folder that will contain forest's recipe files (more on this later)
  • a build folder to carry out compilation and store build artifacts
  • an install folder
  • a setup.bash file which makes installed items visible to the system

forest add-recipes

Adds recipes from a remote.

usage: forest add-recipes [-h] [--tag TAG] [--verbose] url

positional arguments:
 url                   url of the remote (e.g. git@github.com:<username>/<reponame>.git 
                       or https://github.com/<username>/<reponame>.git)

optional arguments:
 -h, --help            show this help message and exit
 --tag TAG, -t TAG
 --verbose, -v         print additional information

forest grow

Builds a project according to the given recipe name, alongside its dependencies.

usage: forest grow [-h] [--jobs JOBS] [--mode MODE [MODE ...]]
                  [--config CONFIG [CONFIG ...]]
                  [--default-build-type {None,RelWithDebInfo,Release,Debug}]
                  [--force-reconfigure] [--list-eval-locals]
                  [--clone-protocol {ssh,https}] [--clone-depth CLONE_DEPTH]
                  [--cmake-args CMAKE_ARGS [CMAKE_ARGS ...]] [--no-deps]
                  [--uninstall] [--clean] [--pwd PWD] [--verbose]
                  [RECIPE]

positional arguments:
 RECIPE                name of recipe with fetch and build information

optional arguments:
 -h, --help            show this help message and exit
 --jobs JOBS, -j JOBS  parallel jobs for building
 --mode MODE [MODE ...], -m MODE [MODE ...]
                       specify modes that are used to set conditional
                       compilation flags (e.g., cmake args)
 --config CONFIG [CONFIG ...], -c CONFIG [CONFIG ...]
                       specify configuration variables that can be used
                       inside recipes
 --default-build-type {None,RelWithDebInfo,Release,Debug}, -t {None,RelWithDebInfo,Release,Debug}
                       build type for cmake, it is overridden by recipe
 --force-reconfigure   force calling cmake before building with args from the
                       recipe
 --list-eval-locals    print available attributes when using conditional
                       build args
 --clone-protocol {ssh,https}
                       override clone protocol
 --clone-depth CLONE_DEPTH
                       set maximum history depth to save bandwidth
 --cmake-args CMAKE_ARGS [CMAKE_ARGS ...]
                       specify additional cmake args to be appended to each
                       recipe (leading -D must be omitted)
 --no-deps, -n         skip dependency fetch and build step
 --uninstall           uninstall recipe
 --clean               uninstall recipe and remove build
 --pwd PWD, -p PWD     user password to be used when sudo permission is
                       required (if empty, user is prompted for password);
                       note: to be used with care, as exposing your password
                       might be harmful!
 --verbose, -v         print additional information
 --src-only, -s        only clone sources, skip build step
 --tag-override FILE, -o FILE
                       yaml file containing a {pkgname: tag} dictionary;
                       overrides the tag/branch/commit specified in each
                       recipe for the listed packages. Useful in combination
                       with forest.lock to reproduce a known-good build:
                       forest grow my_package --tag-override forest.lock

forest freeze

Snapshots the current HEAD commit of every repository under src/ into a forest.lock file at the workspace root. The lock file is a YAML dictionary of pkgname: sha1 entries.

The command fails if any src/ subdirectory is not a git repository, or if any repository has uncommitted local changes.

usage: forest freeze [-h] [--append] [--ignore-errors]

optional arguments:
  -h, --help        show this help message and exit
  --append, -a      update existing forest.lock in place instead of overwriting it
  --ignore-errors   write forest.lock even if some repos are invalid or have local changes

Example forest.lock:

my_package: 4a7f3c1d2e8b0a9f6c5d3e2b1a0f9e8d7c6b5a4f
other_package: 1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hhcm_forest-1.1.22.tar.gz (28.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hhcm_forest-1.1.22-py3-none-any.whl (33.4 kB view details)

Uploaded Python 3

File details

Details for the file hhcm_forest-1.1.22.tar.gz.

File metadata

  • Download URL: hhcm_forest-1.1.22.tar.gz
  • Upload date:
  • Size: 28.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for hhcm_forest-1.1.22.tar.gz
Algorithm Hash digest
SHA256 7c0181dc6535bfdce2ad62fc95e376e5ae0f66b6df4548bdd822af9355354a51
MD5 c9e7d141412c974b6f4f7f2dfb58d4d0
BLAKE2b-256 03257c6265dea46ef4bfc8d2033d84e68e67f9ebc43d6efe72003d6b545538f9

See more details on using hashes here.

File details

Details for the file hhcm_forest-1.1.22-py3-none-any.whl.

File metadata

  • Download URL: hhcm_forest-1.1.22-py3-none-any.whl
  • Upload date:
  • Size: 33.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for hhcm_forest-1.1.22-py3-none-any.whl
Algorithm Hash digest
SHA256 16d503908234c21448a668fbdb0354e25bfb2aebf6e9000c63e127d994426298
MD5 ebe95efb493b38a52657575d23aa153f
BLAKE2b-256 2a8631f9cc1e9a73562ce58347a8433ad5a6149e2c632673f2a89be34a1f2950

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page