Extension definition: install.yml

December 11, 2022 ยท View on GitHub

PHP Mods: Overview | PHP Mods: options.yml | PHP Mods: install.yml


Contributor Documentation: PHP Modules

Extension definition: install.yml

Top level defines

Yaml keyDescription
already_availArray of PHP versions for which we don't have to install the module as it is already present via its FROM image.
allIs generic for all PHP versions and will be used whenever no specific version is defined.
7.2A version specific block for PHP 7.2. Its child keys will overwrite what has been defined in all.

Example: Using already_avail

# "{{ php_all_versions }}" Jinja2 variable is available and
# translates to an array of all available PHP versions.
already_avail: "{{ php_all_versions }}"

Example: Overwriting git_ref for a specific version

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 )

Second level defines

The following keys can be added below: all, 8.2, 8.1, 8.0, 7.4, ...

Yaml keyRequiredSupports
Shell code
Description
preNoYesSpecify a shell command to be run before module installation.
postNoYesSpecify a shell command to be run after module installation.
build_depNoNoArray 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_depNoNoArray 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: [].
typeYesNoOn of the following types to build the module: builtin, pecl, git or custom.

Example:

all:
  type: builtin
  pre: |
    ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE))" \
  post: |
    rm -f /tmp/file.txt \
  build_dep: [libmcrypt-dev]
  run_dep: [libmcrypt4]

8.1:
  type: builtin
  build_dep: []
  run_dep: []

Second level defines for type: builtin

Yaml keyRequiredSupports
Shell code
Description
configureNoYesAdd ./configure arguments. E.g.:
configure: --with-jpeg --with-png

Example:

all:
  type: builtin

8.1:
  type: builtin
  configure: --with-jpeg --with-png

8.0:
  type: builtin
  configure: --with-jpeg

Second level defines for type: pecl

Yaml keyRequiredSupports
Shell code
Description
versionNoYesPecl packet version
commandNoYesOverwrite pecl command (default: pecl install <ext>)

Example:

all:
  type: pecl
  command: echo "/usr" | pecl install amqp
  build_dep: [librabbitmq-dev]
  run_dep: [librabbitmq4]

5.5:
  type: pecl
  version: 1.9.3
  run_dep: [librabbitmq1]

Second level defines for type: git

Yaml keyRequiredSupports
Shell code
Description
git_urlYesYesGit repository URL
git_refNoYesTag, branch, commit to check out (shell code supported to dynamically checkout)
configureNoYesAdd ./configure arguments.
commandNoYesOverwrite default command (default: phpize && ./configure && make && make install)

Example:

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 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 )

Second level defines for type: custom

Yaml keyRequiredSupports
Shell code
Description
commandYesYesCustom command to install and enable a module

Example:

all:
  type: custom
  command: |
    wget http://url/file.tar.gz \
	&& tar xvfz file.tar.gz \
	&& cd file \
	&& phpize \
	&& ./configure \
	&& make \
	&& make install \

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:

all:
  pre: VERSION="$( curl http://url | grep -Eo '[0-9.]+' )"

Multi-line:

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:

all:
  pre: |
    VERSION="$( \
      curl http://url \
      | grep -Eo '[0-9.]+' \
    )" \

Multi-command:

all:
  pre: |
    URL="http://url" \
    && VERSION="$( \
      curl "${URL} \
      | grep -Eo '[0-9.]+' \
    )" \
    && echo "${VERSION}" \