<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
<!--SPDX-License-Identifier: CC-BY-2.0-UK-->

<chapter id='ref-release-process'>
<title>Yocto Project Releases and the Stable Release Process</title>

<para>
    The Yocto Project release process is predictable and consists of both
    major and minor (point) releases.
    This brief chapter provides information on how releases are named, their
    life cycle, and their stability.
</para>

<section id='major-and-minor-release-cadence'>
    <title>Major and Minor Release Cadence</title>

    <para>
        The Yocto Project delivers major releases (e.g. &DISTRO;) using a six
        month cadence roughly timed each April and October of the year.
        Following are examples of some major YP releases with their codenames
        also shown.
        See the
        "<link linkend='major-release-codenames'>Major Release Codenames</link>"
        section for information on codenames used with major releases.
        <literallayout class='monospaced'>
    2.2 (Morty)
    2.1 (Krogoth)
    2.0 (Jethro)
        </literallayout>
        While the cadence is never perfect, this timescale facilitates
        regular releases that have strong QA cycles while not overwhelming
        users with too many new releases.
        The cadence is predictable and avoids many major holidays in various
        geographies.
    </para>

    <para>
        The Yocto project delivers minor (point) releases on an unscheduled
        basis and are usually driven by the accumulation of enough significant
        fixes or enhancements to the associated major release.
        Following are some example past point releases:
        <literallayout class='monospaced'>
    2.1.1
    2.1.2
    2.2.1
        </literallayout>
        The point release indicates a point in the major release branch where
        a full QA cycle and release process validates the content of the new
        branch.
        <note>
            Realize that there can be patches merged onto the stable release
            branches as and when they become available.
        </note>
    </para>
</section>

<section id='major-release-codenames'>
    <title>Major Release Codenames</title>

    <para>
        Each major release receives a codename that identifies the release in
        the
        <ulink url='&YOCTO_DOCS_OM_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>.
        The concept is that branches of
        <link linkend='metadata'>Metadata</link>
        with the same codename are likely to be compatible and thus
        work together.
        <note>
            Codenames are associated with major releases because a Yocto
            Project release number (e.g. &DISTRO;) could conflict with
            a given layer or company versioning scheme.
            Codenames are unique, interesting, and easily identifiable.
        </note>
        Releases are given a nominal release version as well but the codename
        is used in repositories for this reason.
        You can find information on Yocto Project releases and codenames at
        <ulink url='https://wiki.yoctoproject.org/wiki/Releases'></ulink>.
    </para>
</section>

<section id='stable-release-process'>
    <title>Stable Release Process</title>

    <para>
        Once released, the release enters the stable release process at which
        time a person is assigned as the maintainer for that stable release.
        This maintainer monitors activity for the release by investigating
        and handling nominated patches and backport activity.
        Only fixes and enhancements that have first been applied on the
        "master" branch (i.e. the current, in-development branch) are
        considered for backporting to a stable release.
        <note>
            The current Yocto Project policy regarding backporting is to
            consider bug fixes and security fixes only.
            Policy dictates that features are not backported to a stable
            release.
            This policy means generic recipe version upgrades are unlikely to
            be accepted for backporting.
            The exception to this policy occurs when a strong reason exists
            such as the fix happens to also be the preferred upstream approach.
        </note>
    </para>

    <para>
        Stable release branches have strong maintenance for about a year after
        their initial release.
        Should significant issues be found for any release regardless of its
        age, fixes could be backported to older releases.
        For issues that are not backported given an older release,
        Community LTS trees and branches exist where
        community members share patches for older releases.
        However, these types of patches do not go through the same release
        process as do point releases.
        You can find more information about stable branch maintenance at
        <ulink url='https://wiki.yoctoproject.org/wiki/Stable_branch_maintenance'></ulink>.
    </para>
</section>

<section id='testing-and-quality-assurance'>
    <title>Testing and Quality Assurance</title>

    <para>
        Part of the Yocto Project development and release process is quality
        assurance through the execution of test strategies.
        Test strategies provide the Yocto Project team a way to ensure a
        release is validated.
        Additionally, because the test strategies are visible to you as a
        developer, you can validate your projects.
        This section overviews the available test infrastructure used in the
        Yocto Project.
        For information on how to run available tests on your projects, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>

    <para>
        The QA/testing infrastructure is woven into the project to the point
        where core developers take some of it for granted.
        The infrastructure consists of the following pieces:
        <itemizedlist>
            <listitem><para>
                <filename>bitbake-selftest</filename>:
                A standalone command that runs unit tests on key pieces of
                BitBake and its fetchers.
                </para></listitem>
            <listitem><para>
                <link linkend='ref-classes-sanity'><filename>sanity.bbclass</filename></link>:
                This automatically included class checks the build environment
                for missing tools (e.g. <filename>gcc</filename>) or common
                misconfigurations such as
                <link linkend='var-MACHINE'><filename>MACHINE</filename></link>
                set incorrectly.
                </para></listitem>
            <listitem><para>
                <link linkend='ref-classes-insane'><filename>insane.bbclass</filename></link>:
                This class checks the generated output from builds for sanity.
                For example, if building for an ARM target, did the build
                produce ARM binaries.
                If, for example, the build produced PPC binaries then there
                is a problem.
                </para></listitem>
            <listitem><para>
                <link linkend='ref-classes-testimage*'><filename>testimage.bbclass</filename></link>:
                This class performs runtime testing of images after they are
                built.
                The tests are usually used with
                <ulink url='&YOCTO_DOCS_DEV_URL;#dev-manual-qemu'>QEMU</ulink>
                to boot the images and check the combined runtime result
                boot operation and functions.
                However, the test can also use the IP address of a machine to
                test.
                </para></listitem>
            <listitem><para>
                <ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'><filename>ptest</filename></ulink>:
                Runs tests against packages produced during the build for a
                given piece of software.
                The test allows the packages to be be run within a target
                image.
                </para></listitem>
            <listitem><para>
                <filename>oe-selftest</filename>:
                Tests combination BitBake invocations.
                These tests operate outside the OpenEmbedded build system
                itself.
                The <filename>oe-selftest</filename> can run all tests by
                default or can run selected tests or test suites.
                <note>
                    Running <filename>oe-selftest</filename> requires
                    host packages beyond the "Essential" grouping.
                    See the
                    "<link linkend='required-packages-for-the-build-host'>Required Packages for the Build Host</link>"
                    section for more information.
                </note>
                </para></listitem>
        </itemizedlist>
    </para>

    <para>
        Originally, much of this testing was done manually.
        However, significant effort has been made to automate the tests so
        that more people can use them and the Yocto Project development team
        can run them faster and more efficiently.
    </para>

    <para>
        The Yocto Project's main Autobuilder
        (<filename>autobuilder.yoctoproject.org</filename>) publicly tests
        each Yocto Project release's code in the
        <link linkend='oe-core'>OE-Core</link>, Poky, and BitBake
        repositories.
        The testing occurs for both the current state of the
        "master" branch and also for submitted patches.
        Testing for submitted patches usually occurs in the
        "ross/mut" branch in the <filename>poky-contrib</filename> repository
        (i.e. the master-under-test branch) or in the "master-next" branch
        in the <filename>poky</filename> repository.
        <note>
            You can find all these branches in the Yocto Project
            <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>.
        </note>
        Testing within these public branches ensures in a publicly visible way
        that all of the main supposed architectures and recipes in OE-Core
        successfully build and behave properly.
    </para>

    <para>
        Various features such as <filename>multilib</filename>, sub
        architectures (e.g. <filename>x32</filename>,
        <filename>poky-tiny</filename>, <filename>musl</filename>,
        <filename>no-x11</filename> and and so forth),
        <filename>bitbake-selftest</filename>, and
        <filename>oe-selftest</filename> are tested as part of
        the QA process of a release.
        Complete testing and validation for a release takes the Autobuilder
        workers several hours.
        <note>
            The Autobuilder workers are non-homogeneous, which means regular
            testing across a variety of Linux distributions occurs.
            The Autobuilder is limited to only testing QEMU-based setups and
            not real hardware.
        </note>
    </para>

    <para>
        Finally, in addition to the Autobuilder's tests, the Yocto Project
        QA team also performs testing on a variety of platforms, which includes
        actual hardware, to ensure expected results.
    </para>
</section>

</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
