CID Tools

Please check Design section first.

As previously dicusses, tools are represented as plugins in CID.

Each tool can be installed or upgraded. Some tools support removal. Some tools allow multiple concurrent versions installed.

The list of supported tool plugins can retrieved via cid tool list.

$ cid tool list
List of tools supported by CID:
  * ant: Ant build tool for Java applications.
  * archiva: Apache Archiva: The Build Artifact Repository Manager.
  * artifactory: JFrog Artifactory: Artifact Repository Manager.
  * bash: Bash is an sh-compatible command language interpreter.
  * aws: Generic AWS CLI and S3 as RMS.
  * binutils: GNU Binutils.
  * bower: Bower: a package manager for the web.
  * brew: Homebrew. The missing package manager for macOS.
  * bundler: Bundler: The best way to manage a Ruby application's gems.
  * bzip2: Freely available, patent free (see below), high-quality data compressor.
  * cargo: Cargo, Rust;s Package Manager.
  * cid: Noop FutoIn-CID - a workaround to allow CID use from virtualenv
  * cmake: Build, Test and Package Your Software With CMake.
  * composer: Dependency Manager for PHP.
  * curl: Command line tool and library for transferring data with URLs.
  * docker: Docker - Build, Ship, and Run Any App, Anywhere.
  * dockercompose: Compose is a tool for defining and running multi-container Docker applications.
  * elixir: Elixir.
  * erlang: Erlang OTP.
  * exe: Dummy tool to execute files directly
  * flyway: Flyway - Evolve your Database Schema easily and
  * futoin: futoin.json updater as defined in FTN16.
  * gcc: GNU Compiler Collection.
  * gem: RubyGems: Find, install, and publish RubyGems.
  * git: Git distributed version control system.
  * go: The Go Programming Language
  * gpg: The GNU Privacy Guard.
  * gradle: Gradle Build Tool.
  * grunt: Grunt: The JavaScript Task Runner.
  * gulp: Automate and enhance your workflow (Node.js).
  * gvm: Go Version Manager.
  * gzip: Compression utility designed to be a replacement for compress.
  * hg: Mercurial SCM.
  * java: Java Runtime Environment.
  * jdk: Java Development Kit.
  * jfrog: JFrog: Command Line Interface for Artifactory and Bintray
  * liquibase: Liquibase - source control for your database.
  * make: GNU Make.
  * maven: Apache Maven is a software project management and comprehension tool.
  * mix: Mix - elixir build tool.
  * nexus: Sonatype Nexus RMS.
  * nexus3: Sonatype Nexus RMS.
  * nginx: nginx [engine x], originally written by Igor Sysoev.
  * node: Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.
  * npm: npm is the package manager for JavaScript.
  * nvm: Node Version Manager.
  * phoenix: Phoenix - a productive web framework that does not compromise speed or maintainability.
  * php: PHP is a popular general-purpose scripting language that is especially suited to web development.
  * phpbuild: Builds PHP so that multiple versions can be used side by side.
  * phpfpm: PHP is a popular general-purpose scripting language that is especially suited to web development.
  * pip: The PyPA recommended tool for installing Python packages.
  * puma: A ruby web server built for concurrency http://puma.io
  * puppet: Puppet system automation.
  * python: Python is a programming language.
  * ruby: Ruby is a dynamic, open source programming language.
  * rust: Rust is a systems programming language.
  * rustup: rustup is an installer for the systems programming language Rust.
  * rvm: Ruby Version Manager.
  * sbt: The interactive build tool (Scala).
  * scala: The Scala Programming Language.
  * scp: secure copy.
  * sdkman: SDK Man for Java.
  * setuptools: Easily download, build, install, upgrade, and uninstall Python packages.
  * ssh: Secure Shell client.
  * svn: Apache Subversion: Enterprise-class centralized version control for the masses.
  * tar: The GNU version of the tar archiving utility.
  * twine: Collection of utilities for interacting with PyPI
  * unzip: list, test and extract compressed files in a ZIP archive.
  * uwsgi: uWSGI application server container http://projects.unbit.it/uwsgi
  * virtualenv: Virtual Python Environment builder.
  * webpack: webpack is a module bundler (JS world)
  * xz: Free general-purpose data compression software with a high compression ratio.
  * yarn: YARN: fast, reliable, and secure dependency management.
  * zip: package and compress (archive) files.
End.

Information on any particular tool can be retrieved with cid tool describe:

$ cid tool describe php
* Tool: php
* Environment variables: phpDir, phpBin, phpVer, phpfpmVer, phpBinOnly, phpSuryRepo, phpExtRequire, phpExtTry, phpForceBuild, phpSourceVer
* Dependencies: bash, curl, phpbuild

PHP is a popular general-purpose scripting language that is especially suited to web development.

Home: http://php.net/


By default the latest available PHP binary is used for the following OSes:
 * Debian & Ubuntu - uses Sury (https://deb.sury.org/) builds 5.6, 7.0 & 7.1.
 * CentOS, RHEL & Oracle Linux - uses SCL 5.6 & 7.0

You can forbid source builds by setting phpBinOnly to non-empty string.

However, if phpVer is set then we use php-build which make consume a lot of time and
resources due to lack of trusted binary builds.

You can control installed extensions by setting:
 * phpExtRequire - required extensions to be installed or fail
 * phpExtTry - nice to have extensions

Configuration

Project tool list.

As previously discussed, CID does auto-detection of tools. However, each project may set strict list of tools with optional version constraint in .tools entry of futoin.json configuration.

For example:

{
  "tools": {
    "node": "6",
    "flyway": "*",
    "ruby": "2.3",
    "php": "5"
  }
}

Project-specific tool tuning.

Many tool plugins support tuning. For example, npm allows tuning very specific --tag and --access parameters during RMS promotion (npm publish).

Example:

{
  "toolTune": {
    "npm": {
      "access": "public"
    }
  }
}

Commands

Below is list of tool-related commands.

  • cid tool ...

    • Family tool-centric commands.
  • cte <tool_name> [<tool_arg>...]
  • cid tool exec <tool_name> [<tool_version>] [-- <tool_arg>...]

    • Execute <tool_name> binary with provided arguments.
    • Tool and all its dependencies are automatically installed.
    • Note: not all tools support execution.
  • cid tool envexec <tool_name> [<tool_version>] [-- <command>...]

    • Execute arbitrary command with environment of specified tool.
  • cid tool (install|uninstall|update) [<tool_name>] [<tool_version>]

    • Manage tools.
    • Note: not all tools support all kinds of actions.
  • cid tool test [<tool_name>]

    • Test if tool is installed.
  • cid tool env [<tool_name>]

    • Dump tool-specific environment variables to be set in shell for execution without CID.
    • Tool and all its dependencies are automatically installed.
  • cid tool (prepare|build|check|package|migrate) <tool_name> [<tool_version>]

    • Run standard actions described above only for specific tool.
    • Tool and all its dependencies are automatically installed.
    • Note: auto-detection is skipped and tool is always run.
  • cid tool list

    • Show a list of supported tools.
  • cid tool describe <tool_name>

    • Show tool’s detailed description.
  • cid tool detect

    • Show list of auto-detected tools for current project with possible version numbers.