diff --git a/doc/contributor/PHP-EXT-install.yml.md b/doc/contributor/PHP-EXT-install.yml.md
index 5d9c7f2..64b56ba 100644
--- a/doc/contributor/PHP-EXT-install.yml.md
+++ b/doc/contributor/PHP-EXT-install.yml.md
@@ -29,16 +29,21 @@ already_avail: "{{ php_all_versions }}"
**Example:** Overwriting `git_ref` for a specific version
```yaml
already_avail: [5.2]
+
all:
type: git
git_url: https://github.com/phalcon/cphalcon
git_ref: master
+
# PHP 8.1 is using a different git_ref
8.1:
+ type: git
git_ref: v1.0.0
+
# PHP 8.0 is using a different git_ref dynamically with latest tag found
# See the usage of supported shell code
8.0:
+ type: git
git_ref: $( git tag | sort -V | tail -1 )
```
@@ -53,7 +58,7 @@ The following keys can be added below: `all`, `8.2`, `8.1`, `8.0`, `7.4`, ...
| `post` | No | Yes | Specify a shell command to be run after module installation. |
| `build_dep` | No | No | Array Debian packages required to build the module (they won't be present in the final image - only used to built the module) If you don't need any, assign it an empty array: `build_dep: []`. |
| `run_dep` | No | No | Array Debian packages required for the module run-time (they won't be present during the build stage - only in the final image). If you don't need any, assign it an empty array: `run_dep: []`. |
-| `type` | **Yes** | No | On of the following types to build the module: `builtin`, `pecl`, `git`, `custom`. |
+| `type` | **Yes** | No | On of the following types to build the module: `builtin`, `pecl`, `git` or `custom`. |
**Example:**
```yaml
@@ -65,6 +70,7 @@ all:
rm -f /tmp/file.txt \
build_dep: [libmcrypt-dev]
run_dep: [libmcrypt4]
+
8.1:
type: builtin
build_dep: []
@@ -82,9 +88,11 @@ all:
```yaml
all:
type: builtin
+
8.1:
type: builtin
configure: --with-jpeg --with-png
+
8.0:
type: builtin
configure: --with-jpeg
@@ -105,6 +113,7 @@ all:
command: echo "/usr" | pecl install amqp
build_dep: [librabbitmq-dev]
run_dep: [librabbitmq4]
+
5.5:
type: pecl
version: 1.9.3
@@ -124,16 +133,22 @@ all:
**Example:**
```yaml
already_avail: [5.2]
+
+# Default for all PHP versions if no overwrite exists
all:
type: git
git_url: https://github.com/phalcon/cphalcon
git_ref: master
-# PHP 8.1 is using a different git_ref
+
+# PHP 8.1 is overwriting the git_ref
8.1:
+ type: git
git_ref: v1.0.0
+
# PHP 8.0 is using a different git_ref dynamically with latest tag found
# See the usage of supported shell code
8.0:
+ type: git
git_ref: $( git tag | sort -V | tail -1 )
```
@@ -165,12 +180,12 @@ all:
**Note:** All keys that support shell code can be written as a single line yaml definition or as a multi line yaml definition. Multi-line yaml definitions need a trailing `\` at the end of each line, including the last line.
**Single-line:**
-```bash
+```yaml
all:
pre: VERSION="$( curl http://url | grep -Eo '[0-9.]+' )"
```
**Multi-line:**
-```bash
+```yaml
all:
pre: |
VERSION="$( \
@@ -183,7 +198,7 @@ all:
**Note:** All keys that support shell code also support to write multiple shell commands. If you use multiple shell commands, you need to separate them with `&&`.
**Single-command:**
-```bash
+```yaml
all:
pre: |
VERSION="$( \
@@ -192,7 +207,7 @@ all:
)" \
```
**Multi-command:**
-```bash
+```yaml
all:
pre: |
URL="http://url" \
diff --git a/doc/contributor/PHP-TOOL-install.yml.md b/doc/contributor/PHP-TOOL-install.yml.md
index 7d52c56..2e3bb22 100644
--- a/doc/contributor/PHP-TOOL-install.yml.md
+++ b/doc/contributor/PHP-TOOL-install.yml.md
@@ -9,3 +9,219 @@ PHP Tools: `install.yml`
# Tool definition: `install.yml`
+
+
+## Top level defines
+
+| Yaml key | Description |
+|-----------------|-------------|
+| `check` | A check command to test that the tool has been installed correctly. |
+| `all` | Is generic for all PHP versions and will be used whenever no specific version is defined. |
+| `7.2` | A version specific block for PHP 7.2. Its child keys will overwrite what has been defined in `all`. |
+**Example:**
+```yaml
+check: yq --version 2>&1 | grep -E '[0-9][.0-9]+' || (yq --version; false)
+
+# Default for all PHP version if no overwrite exists
+all:
+ type: pip
+ version:
+ build_dep: []
+ run_dep: []
+ pre:
+ post:
+
+
+# PHP 5.2 is overwriting the version of yq to install
+5.2:
+ type: pip
+ version: 0.1.0
+```
+
+
+## Second level defines
+
+The following keys can be added below: `all`, `8.2`, `8.1`, `8.0`, `7.4`, ...
+
+| Yaml key | Required | Supports
Shell code | Description |
+|-------------|----------|-------------------------|-------------|
+| `pre` | No | Yes | Specify a shell command to be run before module installation. |
+| `post` | No | Yes | Specify a shell command to be run after module installation. |
+| `build_dep` | No | No | Array Debian packages required to build the module (they won't be present in the final image - only used to built the module) If you don't need any, assign it an empty array: `build_dep: []`. |
+| `run_dep` | No | No | Array Debian packages required for the module run-time (they won't be present during the build stage - only in the final image). If you don't need any, assign it an empty array: `run_dep: []`. |
+| `type` | **Yes** | No | On of the following types to build the module: `apt`, `composer`, `npm`, `pip`, `rubygem` or `custom`. |
+
+**Note:** When using `type: custom`, all data needs to be installed into `/usr/local/bin` as only this directory is copied into the next docker stage during multi-stage build.
+
+
+## Second level defines for `type: apt`
+
+| Yaml key | Required | Supports
Shell code | Description |
+|-------------|----------|-------------------------|-------------|
+| `package` | Yes | No | Specify the Debian apt package to install |
+
+**Example:**
+```yaml
+all:
+ type: apt
+ package: netcat
+
+5.3:
+ type: apt
+ package: netcat.traditional
+```
+
+
+## Second level defines for `type: composer`
+
+| Yaml key | Required | Supports
Shell code | Description |
+|-------------|----------|-------------------------|-------------|
+| `package` | Yes | No | Specify the Composer package name to install |
+| `composer` | Yes | No | Specify the composer version to use for installation: `1` or `2` |
+| `version` | No | Yes | Specify the Composer package version to install |
+| `binary` | No | Yes | Specify the composer relative binary path to symlink to `/usr/loca/bin/` |
+| `flags` | No | Yes | Add composer flags to `composer require` |
+
+**Example:**
+```yaml
+all:
+ type: composer
+ composer: 2
+ package: laravel/installer
+ binary: bin/laravel
+
+7.1:
+ type: composer
+ version: 2.3.0
+ binary: laravel
+```
+
+
+## Second level defines for `type: npm`
+
+| Yaml key | Required | Supports
Shell code | Description |
+|-------------|----------|-------------------------|-------------|
+| `package` | Yes | No | Specify the NPM package name to install |
+| `version` | No | Yes | Specify the NPM package version to install |
+| `binary` | No | Yes | Specify the NPM relative binary path to symlink to `/usr/loca/bin/` |
+
+**Example:**
+```yaml
+all:
+ type: npm
+ package: pm2
+ binary: pm2
+ version:
+```
+
+
+## Second level defines for `type: pip`
+
+| Yaml key | Required | Supports
Shell code | Description |
+|-------------|----------|-------------------------|-------------|
+| `version` | No | Yes | Specify the Pip package version to install |
+
+The PyPI package name defaults to the name specified in `options.yml`.
+
+**Example:**
+```yaml
+all:
+ type: pip
+ version:
+ build_dep: []
+ run_dep: []
+ pre:
+ post: |
+ ln -s pwncat /usr/local/bin/netcat \
+```
+
+
+## Second level defines for `type: rubygem`
+
+| Yaml key | Required | Supports
Shell code | Description |
+|-------------|----------|-------------------------|-------------|
+| `package` | Yes | No | Specify the Rubygem package name to install |
+| `version` | No | Yes | Specify the Rubygem package version to install |
+
+**Example:**
+```yaml
+all:
+ type: rubygem
+ package: mdl
+ build_dep: [ruby-dev]
+ run_dep: [ruby]
+
+7.2:
+ type: rubygem
+ version: 0.11.0
+ pre: |
+ gem install chef-utils -v 16.6.14 \
+```
+
+
+## Second level defines for `type: custom`
+
+| Yaml key | Required | Supports
Shell code | Description |
+|-------------|----------|-------------------------|-------------|
+| `command` | Yes | Yes | Custom command to install a tool. |
+
+**Note:** When using `type: custom`, all data needs to be installed into `/usr/local/bin` as only this directory is copied into the next docker stage during multi-stage build.
+
+**Example:**
+```yaml
+all:
+ type: custom
+ command: curl -sS -k -L --fail -L "${PHP_CS_FIXER_URL}" -o /usr/local/bin/php-cs-fixer
+ pre: PHP_CS_FIXER_URL="https://cs.symfony.com/download/php-cs-fixer-v3.phar"
+ post: chmod +x /usr/local/bin/php-cs-fixer
+
+7.3:
+ type: custom
+ pre: PHP_CS_FIXER_URL="https://cs.symfony.com/download/php-cs-fixer-v2.phar"
+```
+
+
+## Usage of shell code
+
+### Single-line vs Multi-line
+
+**Note:** All keys that support shell code can be written as a single line yaml definition or as a multi line yaml definition. Multi-line yaml definitions need a trailing `\` at the end of each line, including the last line.
+**Single-line:**
+```yaml
+all:
+ pre: VERSION="$( curl http://url | grep -Eo '[0-9.]+' )"
+```
+**Multi-line:**
+```yaml
+all:
+ pre: |
+ VERSION="$( \
+ curl http://url \
+ | grep -Eo '[0-9.]+' \
+ )" \
+```
+
+### Single-command vs Multi-command
+
+**Note:** All keys that support shell code also support to write multiple shell commands. If you use multiple shell commands, you need to separate them with `&&`.
+**Single-command:**
+```yaml
+all:
+ pre: |
+ VERSION="$( \
+ curl http://url \
+ | grep -Eo '[0-9.]+' \
+ )" \
+```
+**Multi-command:**
+```yaml
+all:
+ pre: |
+ URL="http://url" \
+ && VERSION="$( \
+ curl "${URL} \
+ | grep -Eo '[0-9.]+' \
+ )" \
+ && echo "${VERSION}" \
+
+```