The .horde.yml file format
Basic format
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
TODO: beautify
Meta data head
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
Example:
---
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: jan@horde.org
active: true
role: lead
-
name: Mike Naberezny
user: mnaberez
email: mike@naberezny.com
active: false
role: lead
-
name: Chuck Hagenbuch
user: chuck
email: chuck@horde.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
PHP and Pear Dependencies
This covers PHP itself, php binary modules and PEAR dependencies both inside horde and external.
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: '*'
dev:
composer:
horde/test: '*'
Additions for transitioning to composer based installs
optional top level key "autoload", inspired by corresponding composer.yml structure
autoload:
classmap: ['lib/']
The default if absent would be autosensing.
If the directory has a /lib/ dir, it will derive a PSR-0 rule from the package name.
"autoload": {
"psr-0": {
"Horde_Http": "lib/"
},
"psr-4": {
"Horde\\Http\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Horde\\Http\\Test\\": "test/"
}
}
Composer native dependency definitions
Example: https://github.com/maintaina-com/Dav/commit/71dd9714a8d49c28b5cfe1b0bcd089eb6fa93226
dependencies:
required:
php: ^5.4.1 || ^7
composer:
sabre/dav: ~2.0.0
Composer vendor-bin
By default, the composer.json writer will treat all executable files living directly under package/bin as vendor binaries.
nocommands:
- 'bin/horde-bootstrap'
- 'bin/foobar'
Conflicts
The conflicts: block in .horde.yml is optional. It is literally transformed into a "conflict:" block in composer.json. There are no "composer:" or "pear:" sub keys. This is different from requires: or optional: blocks.
conflicts:
horde/base: <= 5.9.9
horde/horde: <= 5.9.9
conflicts blocks are sometimes necessary to prevent versions from coexisting when constraints of already released packages were too liberal.
Provides
The provides: block in .horde.yml is optional. It is literally transformed into a "provide:" block in composer.json. There are no "composer:" or "pear:" sub keys. This is different from requires: or optional: blocks.
provides:
horde/base: 6.1.1
horde/user-management-api-implementation: 1.0
This is useful if multiple packages provide a capability as packages can depend on these capabilities as if they were packages. It is also useful if one package changes name or is the successor to another package. Think ingo is the successor to forwards and vacation modules, imp 6 is the successor to dimp and mimp. Both turba and hermes may provide an addressbook/customer API.