This format has been used by Horde Framework 5.2 since roughly the time of the git split.
Document .horde.yml format and how it relates to composer json and pear xml
id: string, mandatory, uppercase and minus Horde_ for libs, lowercase for apps (horde, turba, Autoloader, Exception)
name: string, mandatory, Uppercase (Horde, Turba, Autoloader, Exception)
full: string, mandatory, a one-line description
description: string, mandatory, a multi-line description
list: string, mandatory, may be empty: a hint on the mailing list appropriate for the component
type: string, mandatory, classic: either "application" or "library", modern: horde-application, horde-library, horde-theme
homepage: string, mandatory, a related informational url
authors: list, each element has string attributes name, user, email, active (true/false), role (lead, developer)
version: has sub keys api and release each with a version string (1.0.0 format)
state: has sub keys api and release, each with a stabilitiy string (stable, beta, alpha)
license: has subkeys identifier and uri
license: identifier: An SPDX license identifier string
license: uri: a link to a fulltext license
--- id: Db name: Db full: Database abstraction library description: Database access and SQL abstraction layer. list: dev type: library homepage: https://www.horde.org/libraries/Horde_Db authors: - name: Jan Schneider user: jan email: firstname.lastname@example.org active: true role: lead - name: Mike Naberezny user: mnaberez email: email@example.com active: false role: lead - name: Chuck Hagenbuch user: chuck email: firstname.lastname@example.org active: false role: lead version: release: 2.4.1 api: 2.4.0 state: release: stable api: stable license: identifier: BSD-2-Clause uri: http://www.horde.org/licenses/bsd
This covers PHP itself, php binary modules and PEAR dependencies both inside horde and external.
For composer, pear dependencies on parts of horde get translated. External dependencies get included as pear unless they are defined in a conversion list in the components tool's config.
See below for composer-only dependencies.
dependencies: top level structure for several optional keys
dependencies: required: multilevel list of mandatory dependencies (php, pear, ext) - The key and all sub keys are optional
dependencies: required: php: optional key. The value should be a version constraint string
dependencies: required: pear: optional key. This is a list of channel/package keys and version constraint values. For pecl extensions, there may be additional sub keys instead of a version string
dependencies: required: ext: optional key. This is a list of php binary extensions (hash, pdo, ...) as keys and version constraint strings as values.
dependencies: optional: multilevel list of optional, suggested collaborators (pear, ext) - The key and all sub keys are optional
dependencies: required: pear: optional key. This is a list of channel/package keys and version constraint values. For pecl extensions, there may be
dependencies: required: php: ^5.3 || ^7 pear: pear.horde.org/Horde_Date: ^2 pear.horde.org/Horde_Exception: ^2 pear.horde.org/Horde_Support: ^2 pear.horde.org/Horde_Util: ^2 optional: pear: pear.horde.org/Horde_Autoloader: ^2 pear.horde.org/Horde_Cache: ^2 pear.horde.org/Horde_Log: ^2 pear.horde.org/Horde_Test: ^2.1 ext: mysql: '*' mysqli: '*' oci8: '*' PDO: '*'
optional top level key "autoload", inspired by corresponding composer.yml structure
It hints how autoloaders should expect to find php classes from the package.
autoload: psr-0: list of "Class_Prefix" : "dir"
autoload: psr-4: list of "\\Prefix" : "dir"
autoload: classmap: list of directories to recursively scan for php files containing classes
autoload: classmap: ['lib/']
The default if absent would be equivalent to psr-0: "Horde_Foo": /Lib
components version: https://github.com/maintaina-com/components/commit/3ffe6013081287bb02260e2d55291f98b93f6e15
It is now possible in horde.yml to define dependencies for the composer.json file which are not derived from pear dependencies.
This allows unbundling composer libraries like sabre dav from wrapping horde libraries like horde/dav.
New libraries which do not intend to support pear installations at all could easily just define their dependencies here
dependencies: required: php: ^5.4.1 || ^7 composer: sabre/dav: ~2.0.0
By default, the composer.json writer will treat all executable files living directly under package/bin as vendor binaries.
This can be overridden:
commands: optional: List of paths relative to package root which should be offered as vendor binaries. If you provide commands, no automatic search in bin/ will happen.
nocommands: optional: List of paths relative to package root which should not be offered as vendor binaries. nocommands wins over commands list or implicitly found bin/
nocommands: - 'bin/horde-bootstrap'