Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]

2.2 Release Information

2.2.1 Introduction

This section documents the <releases/> tag that can be part of a component to provide information about releases made for the respective component.

Alternatively to being embedded in a component metainfo file, the data may also be split into a dedicated XML file to be updated separately.

2.2.2 Locations

Release data may be present directly in a component metainfo file, but also optionally be split out into an external metadata file.

If the releases XML is part of a metainfo file, it is embedded into it following the semantics described in the document.

If the releases XML is external, the metainfo file must contain a <releases/> tag with the type property set to external as described for component XML. The data described in this section is placed in a separate XML file with releases being its root node. The file must be installed as /usr/share/metainfo/releases/%{cid}.releases.xml, where cid is the component ID of the component the release information belongs to.

2.2.3 Example data

Release information may look like this:

<releases>
  <release version="1.2" date="2014-04-12" urgency="high">
    <description>
      <p>This stable release fixes bugs.</p>
    </description>

    <url>https://example.org/releases/version-1.2.html</url>

    <issues>
      <issue url="https://example.com/bugzilla/12345">bz#12345</issue>
      <issue type="cve">CVE-2019-123456</issue>
    </issues>

    <artifacts>
      <artifact type="binary" platform="x86_64-linux-gnu">
        <location>https://example.com/mytarball.bin.tar.xz</location>
        <checksum type="sha256">....</checksum>
        <checksum type="blake2b">....</checksum>
        <size type="download">12345678</size>
        <size type="installed">42424242</size>
      </artifact>
      <artifact type="binary" platform="x86_64-windows-msvc">
        <location>https://example.com/mytarball.bin.exe</location>
      </artifact>
      <artifact type="source">
        <location>https://example.com/mytarball.tar.xz</location>
        <checksum type="sha256">....</checksum>
      </artifact>
    </artifacts>
  </release>
  <release version="1.1" type="development" date="2013-10-20" />
  <release version="1.0" date="2012-08-26" />
</releases>

2.2.4 Releases tag specification

The <releases> tag contains <release/> children which contain metadata about individual releases of a component. Each release of the software component should ideally have a <release/> tag describing it, but at least one release child is recommended to be present for the current release of the software. The release children must be sorted in a latest-to-oldest order to simplify reading the metadata file.

A release tag can have the properties version, date and timestamp. The date property can have any time in ISO 8601 (https://en.wikipedia.org/wiki/ISO_8601) format as its value and should be present for every release. At least day-level granularity is required, which means that the ISO 8601 string must contain at least a full date (e.g. 2020-08-12). The timestamp tag contains the release time in the form of a UNIX epoch. This tag should not be used in metainfo files in newly written metadata, but will still be parsed in case it is present. The timestamp property is mainly used in generated distro-metadata. In case both release-time tags are present, the timestamp tag will take precedence over date.

The algorithm used for comparing release version numbers is described at Section 4.1, “Version Comparison Algorithm”.

A release tag may also have a date_eol property that denotes the date when the release stops to receive support from the software developers (end-of-life). Its value can be any complete date or time in ISO 8601 (https://en.wikipedia.org/wiki/ISO_8601).

Optionally, the <release/> tag may also have an urgency property, having one of the following values:

  • low

  • medium

  • high

  • critical

The urgency defines how important it is to install the new release as an update. This is especially important for type=firmware components. If no urgency is defined, a medium urgency is implicitly assumed. The urgency defines how the update will be presented to the user, and sometimes if it will be installed automatically and immediately, or delayed.

A release tag may have a type property to classify releases with one of the following values:

  • stable

  • development

By default, if no release type is defined, stable is assumed. A software displaying a listing of releases should only show stable releases and discard any development release if the current version is itself stable. It can show all versions when development versions of the software are also distributed.

The release itself may have the following children:

<description/> 

A description tag contains a brief description of what is new in the release. The description tag is structured as described in <description/>.

<url/> 

The url tag must point to a web location containing additional information (usually detailed release notes) about this particular release. The url tag may have a type property with details as the only currently allowed value. If the type is missing, a URL type of details is implicitly assumed.

<issues/> 

The issues tag contains issue children defining issues resolved by this release. It is used most commonly to mention CVE (https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures) IDs,

The value of an issue tag must be the bug number, ticket name, or CVE ID and is typically displayed to the user, but may also in case of CVE IDs be read by machines. The content of an issue element is not translatable, but can be a string appropriate for the project's bug tracker. If the element's value is a CVE ID, the type property of the issue tag must be set to cve. If the type property is missing, an issue type of generic is assumed. The url property can be used to provide a web URL to a details page on the respective issue. It is required for all issue types, except for the cve type, where it is optional.

<artifacts/> 

The artifacts child tag contains information about downloadable release artifacts. It itself contains the artifacts as artifact children. Each artifact tag must have a type property with the value of either binary or source to indicate whether the artifact is the releases' source-code or a binary distribution.

In case of a binary type, an optional platform property may also be set, containing a platform triplet (also known as normalized GNU triplet), such as x86_64-linux-gnu. Refer to Debian multiarch tuples (https://wiki.debian.org/Multiarch/Tuples#Used_solution) for more information on normalized GNU triplets, and AppStream's platforms.yml (https://github.com/ximion/appstream/blob/master/data/platforms.yml) for the triplet parts AppStream currently recognizes. Note that AppStream only supports strictly three-part triplets in the form of arch-oskernel-osenvironment. Parts of the triplets which do not apply can be replaced with any.

Binary artifacts may also have a bundle property to indicate the bundling system the binary distribution is made for. Refer to the bundle types in <bundle/> for a list of possible values. Each artifact can have a number of children:

location

Each artifact must have a location child, denoting the web location (HTTP or HTTPS) where it can be downloaded from. Multiple location tags are allowed to make it possible to have mirror options to download the same artifact from.

checksum

At least one checksum child must be present to contain the checksum of the released artifact. The <checksum/> tag has a type attribute, containing the name of the hash function that was used to create it. Currently aupported values (and hash sums) are: sha1, sha256, blake2b and blake2s. For most purposes (on 64-bit machines), using BLAKE2b (https://blake2.net) via the b2sum utility from GNU Coreutils is a good choice.

size

One or multiple size tags may also be present, which define the installed and download size of this component release artifact. The size type is defined via a type property on the size tag, and may assume the value download or installed. The size itself is set as the value and must be given in bytes.

filename

An artifact may have a filename child, containing a non-absolute filename that the artifact may be stored under. The file name is only a naming hint and applications are not required to follow it when downloading the file. If no filename tag is present, a file name may be generated from the artifact location URL. This tag must only appear once.