<!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='test-manual-understand-autobuilder'>

<title>Understanding the Yocto Project Autobuilder</title>
    <section>
        <title>Execution Flow within the Autobuilder</title>
        <para>The "a-full" and "a-quick" targets are the usual entry points into the Autobuilder and
            it makes sense to follow the process through the system starting there. This is best
            visualised from the Autobuilder Console view (<link linkend=""
                >https://autobuilder.yoctoproject.org/typhoon/#/console</link>). </para>
        <para>Each item along the top of that view represents some "target build" and these targets
            are all run in parallel. The 'full' build will trigger the majority of them, the "quick"
            build will trigger some subset of them. The Autobuilder effectively runs whichever
            configuration is defined for each of those targets on a seperate buildbot worker. To
            understand the configuration, you need to look at the entry on
                <filename>config.json</filename> file within the
                <filename>yocto-autobuilder-helper</filename> repository. The targets are defined in
            the ‘overrides' section, a quick example could be qemux86-64 which looks
            like:<literallayout class="monospaced">
     "qemux86-64" : {
         "MACHINE" : "qemux86-64",
         "TEMPLATE" : "arch-qemu",
         "step1" : {
             "extravars" : [
                  "IMAGE_FSTYPES_append = ' wic wic.bmap'"
             ]
         }
     },
                    </literallayout>And
            to expand that, you need the "arch-qemu" entry from the "templates" section, which looks
            like:<literallayout class="monospaced">
     "arch-qemu" : {
         "BUILDINFO" : true,
         "BUILDHISTORY" : true,
         "step1" : {
             "BBTARGETS" : "core-image-sato core-image-sato-dev core-image-sato-sdk core-image-minimal core-image-minimal-dev core-image-sato:do_populate_sdk",
             "SANITYTARGETS" : "core-image-minimal:do_testimage core-image-sato:do_testimage core-image-sato-sdk:do_testimage core-image-sato:do_testsdk"
         },
         "step2" : {
             "SDKMACHINE" : "x86_64",
             "BBTARGETS" : "core-image-sato:do_populate_sdk core-image-minimal:do_populate_sdk_ext core-image-sato:do_populate_sdk_ext",
             "SANITYTARGETS" : "core-image-sato:do_testsdk core-image-minimal:do_testsdkext core-image-sato:do_testsdkext"
         },
         "step3" : {
             "BUILDHISTORY" : false,
             "EXTRACMDS" : ["${SCRIPTSDIR}/checkvnc; DISPLAY=:1 oe-selftest ${HELPERSTMACHTARGS} -j 15"],
             "ADDLAYER" : ["${BUILDDIR}/../meta-selftest"]
         }
     },
                    </literallayout>Combining
            these two entries you can see that "qemux86-64" is a three step build where the
                <filename>bitbake BBTARGETS</filename> would be run, then <filename>bitbake
                SANITYTARGETS</filename> for each step; all for
                <filename>MACHINE="qemx86-64"</filename> but with differing SDKMACHINE settings. In
            step 1 an extra variable is added to the <filename>auto.conf</filename> file to enable
            wic image generation.</para>
        <para>While not every detail of this is covered here, you can see how the templating
            mechanism allows quite complex configurations to be built up yet allows duplication and
            repetition to be kept to a minimum.</para>
        <para>The different build targets are designed to allow for parallelisation, so different
            machines are usually built in parallel, operations using the same machine and metadata
            are built sequentially, with the aim of trying to optimise build efficiency as much as
            possible.</para>
        <para>The <filename>config.json</filename> file is processed by the scripts in the Helper
            repository in the <filename>scripts</filename> directory. The following  section details
            how this works.</para>
    </section>

    <section id='test-autobuilder-target-exec-overview'>
        <title>Autobuilder Target Execution Overview</title>

        <para>For each given target in a build, the Autobuilder executes several steps. These are
            configured in <filename>yocto-autobuilder2/builders.py</filename> and roughly consist
            of: <orderedlist>
                <listitem id='test-list-tgt-exec-clobberdir'>
                    <para><emphasis>Run <filename>clobberdir</filename></emphasis></para>
                    <para>This cleans out any previous build. Old builds are left around to allow
                        easier debugging of failed builds. For additional information, see <link
                            linkend="test-clobberdir"><filename>clobberdir</filename></link>.</para>
                </listitem>
                <listitem>
                    <para><emphasis>Obtain yocto-autobuilder-helper</emphasis></para>
                    <para>This step clones the <filename>yocto-autobuilder-helper</filename> git
                        repository. This is necessary to prevent the requirement to maintain all the
                        release or project-specific code within Buildbot. The branch chosen matches
                        the release being built so we can support older releases and still make
                        changes in newer ones.</para>
                </listitem>
                <listitem>
                    <para><emphasis>Write layerinfo.json</emphasis></para>
                    <para>This transfers data in the Buildbot UI when the build was configured to
                        the Helper.</para>
                </listitem>
                <listitem>
                    <para><emphasis>Call scripts/shared-repo-unpack</emphasis></para>
                    <para>This is a call into the Helper scripts to set up a checkout of all the
                        pieces this build might need. It might clone the BitBake repository and the
                        OpenEmbedded-Core repository. It may clone the Poky repository, as well as
                        additional layers. It will use the data from the
                            <filename>layerinfo.json</filename> file to help understand the
                        configuration. It will also use a local cache of repositories to speed up
                        the clone checkouts. For additional information, see <link
                            linkend="test-autobuilder-clone-cache">Autobuilder Clone
                        Cache</link>.</para>
                    <para>This step has two possible modes of operation. If the build is part of a
                        parent build, its possible that all the repositories needed may already be
                        available, ready in a pre-prepared directory. An "a-quick" or "a-full" build
                        would prepare this before starting the other sub-target builds. This is done
                        for two reasons:<itemizedlist>
                            <listitem>
                                <para>the upstream may change during a build, for example, from a
                                    forced push and this ensures we have matching content for the
                                    whole build</para>
                            </listitem>
                            <listitem>
                                <para>if 15 Workers all tried to pull the same data from the same
                                    repos, we can hit resource limits on upstream servers as they
                                    can think they are under some kind of network attack</para>
                            </listitem>
                        </itemizedlist>This pre-prepared directory is shared among the Workers over
                        NFS. If the build is an individual build and there is no "shared" directory
                        available, it would clone from the cache and the upstreams as necessary.
                        This is considered the fallback mode.</para>
                </listitem>
                <listitem>
                    <para><emphasis>Call scripts/run-config</emphasis></para>
                    <para>This is another call into the Helper scripts where its expected that the
                        main functionality of this target will be executed.</para>
                </listitem>
            </orderedlist></para>
    </section>
    <section id='test-autobuilder-tech'>
        <title>Autobuilder Technology</title>
        <para>The Autobuilder has Yocto Project-specific functionality to allow builds to operate
            with increased efficiency and speed.</para>
        <section id='test-clobberdir'>
            <title>clobberdir</title>
            <para>When deleting files, the Autobuilder uses <filename>clobberdir</filename>, which
                is a special script that moves files to a special location, rather than deleting
                them. Files in this location are deleted by an <filename>rm</filename> command,
                which is run under <filename>ionice -c 3</filename>. For example, the deletion only
                happens when there is idle IO capacity on the Worker. The Autobuilder Worker Janitor
                runs this deletion. See <link linkend="test-autobuilder-worker-janitor">Autobuilder
                    Worker Janitor</link>.</para>
        </section>
        <section id='test-autobuilder-clone-cache'>
            <title>Autobuilder Clone Cache</title>
            <para>Cloning repositories from scratch each time they are required was slow on the
                Autobuilder. We therefore have a stash of commonly used repositories pre-cloned on
                the Workers. Data is fetched from these during clones first, then "topped up" with
                later revisions from any upstream when necesary. The cache is maintained by the
                Autobuilder Worker Janitor. See <link linkend="test-autobuilder-worker-janitor"
                    >Autobuilder Worker Janitor</link>.</para>
        </section>
        <section id='test-autobuilder-worker-janitor'>
            <title>Autobuilder Worker Janitor</title>
            <para>This is a process running on each Worker that performs two basic operations,
                including background file deletion at IO idle (see <link
                    linkend="test-list-tgt-exec-clobberdir">Target Execution: clobberdir</link>) and
                maintainenance of a cache of cloned repositories to improve the speed the system can
                checkout repositories.</para>
        </section>
        <section id='test-shared-dl-dir'>
            <title>Shared DL_DIR</title>
            <para>The Workers are all connected over NFS which allows DL_DIR to be shared between
                them. This reduces network accesses from the system and allows the build to be sped
                up. Usage of the directory within the build system is designed to be able to be
                shared over NFS.</para>
        </section>
        <section id='test-shared-sstate-cache'>
            <title>Shared SSTATE_DIR</title>
            <para>The Workers are all connected over NFS which allows the
                    <filename>sstate</filename> directory to be shared between them. This means once
                a Worker has built an artefact, all the others can benefit from it. Usage of the
                directory within the directory is designed for sharing over NFS.</para>
        </section>
        <section id='test-resulttool'>
            <title>Resulttool</title>
            <para>All of the different tests run as part of the build generate output into
                    <filename>testresults.json</filename> files. This allows us to determine which
                tests ran in a given build and their status. Additional information, such as failure
                logs or the time taken to run the tests, may also be included.</para>
            <para>Resulttool is part of OpenEmbedded-Core and is used to manipulate these json
                results files. It has the ability to merge files together, display reports of the
                test results and compare different result files.</para>
            <para>For details, see <link linkend=""
                    >https://wiki.yoctoproject.org/wiki/Resulttool</link>.</para>
        </section>
    </section>
    <section id='test-run-config-tgt-execution'>
        <title>run-config Target Execution</title>
        <para>The <filename>scripts/run-config</filename> execution is where most of the work within
            the Autobuilder happens. It runs through a number of steps; the first are general setup
            steps that are run once and include:<orderedlist>
                <listitem>
                    <para>Set up any <filename>buildtools-tarball</filename> if configured.</para>
                </listitem>
                <listitem>
                    <para>Call "buildhistory-init" if buildhistory is configured.</para>
                </listitem>
            </orderedlist></para>
        <para>For each step that is configured in <filename>config.json</filename>, it will perform
            the following:</para>
        <para>
            <remark>## WRITER's question: What does "logging in as stepXa" and others refer to
                below? ##</remark>
            <orderedlist>
                <listitem id="test-run-config-add-layers-step">
                    <para dir="ltr">Add any layers that are specified using the
                            <filename>bitbake-layers add-layer</filename> command (logging as
                        stepXa)</para>
                </listitem>
                <listitem>
                    <para dir="ltr">Call the <filename>scripts/setup-config</filename> script to
                        generate the necessary <filename>auto.conf</filename> configuration file for
                        the build</para>
                </listitem>
                <listitem>
                    <para dir="ltr">Run the <filename>bitbake BBTARGETS</filename> command (logging
                        as stepXb)</para>
                </listitem>
                <listitem>
                    <para dir="ltr">Run the <filename>bitbake SANITYTARGETS</filename> command
                        (logging as stepXc)</para>
                </listitem>
                <listitem>
                    <para dir="ltr">Run the <filename>EXTRACMDS</filename> command, which are run
                        within the BitBake build environment (logging as stepXd)</para>
                </listitem>
                <listitem>
                    <para dir="ltr">Run the <filename>EXTRAPLAINCMDS</filename> command(s), which
                        are run outside the BitBake build environment (logging as stepXd)</para>
                </listitem>
                <listitem>
                    <para dir="ltr">Remove any layers added in <link
                            linkend="test-run-config-add-layers-step">step 1</link> using the
                            <filename>bitbake-layers remove-layer</filename> command (logging as
                        stepXa)</para>
                </listitem>
            </orderedlist>
        </para>
        <para>Once the execution steps above complete, <filename>run-config</filename> executes a
            set of post-build steps, including:<orderedlist>
                <listitem>
                    <para dir="ltr">Call <filename>scripts/publish-artifacts</filename> to collect
                        any output which is to be saved from the build.</para>
                </listitem>
                <listitem>
                    <para dir="ltr">Call <filename>scripts/collect-results</filename> to collect any
                        test results to be saved from the build.</para>
                </listitem>
                <listitem>
                    <para dir="ltr">Call <filename>scripts/upload-error-reports</filename> to send
                        any error reports generated to the remote server.</para>
                </listitem>
                <listitem>
                    <para dir="ltr">Cleanup the build directory using <link
                            linkend="test-clobberdir"><filename>clobberdir</filename></link> if the
                        build was successful, else rename it to "build-renamed" for potential future
                        debugging.</para>
                </listitem>
            </orderedlist></para>
    </section>
    <section id='test-deploying-yp-autobuilder'>
        <title>Deploying Yocto Autobuilder</title>
        <para>The most up to date information about how to setup and deploy your own Autbuilder can
            be found in README.md in the <filename>yocto-autobuilder2</filename> repository.</para>
        <para>We hope that people can use the <filename>yocto-autobuilder2</filename> code directly
            but it is inevitable that users will end up needing to heavily customise the
                <filename>yocto-autobuilder-helper</filename> repository, particularly the
                <filename>config.json</filename> file as they will want to define their own test
            matrix.</para>
        <para>The Autobuilder supports wo customization options: <itemizedlist>
                <listitem>
                    <para>variable substitution</para>
                </listitem>
                <listitem>
                    <para>overlaying configuration files</para>
                </listitem>
            </itemizedlist>The standard <filename>config.json</filename> minimally attempts to allow
            substitution of the paths. The Helper script repository includes a
                <filename>local-example.json</filename> file to show how you could override these
            from a separate configuration file. Pass the following into the environment of the
            Autobuilder:<literallayout class="monospaced">
     $ ABHELPER_JSON="config.json local-example.json"
                    </literallayout>As
            another example, you could also pass the following into the
            environment:<literallayout class="monospaced">
     $ ABHELPER_JSON="config.json <replaceable>/some/location/</replaceable>local.json"
                    </literallayout>One
            issue users often run into is validation of the <filename>config.json</filename> files.
            A tip for minimizing issues from invalid json files is to use a Git
                <filename>pre-commit-hook.sh</filename> script to verify the JSON file before
            committing it. Create a symbolic link as
            follows:<literallayout class="monospaced">
     $ ln -s ../../scripts/pre-commit-hook.sh .git/hooks/pre-commit
                    </literallayout></para>
    </section>








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