Example of a validation job

Below is the shell code that can be used as a build step in Jenkins in a job responsible for validating edge snap of Checkbox.

#!/bin/bash
set -e
set -x

cat > job.yaml <<EOF
    job_queue: dearest-team
    global_timeout: 3600
    output_timeout: 1800
    provision_data:
      distro: core22-latest
    test_data:
      test_cmds: |
            #!/bin/bash

            # the machine running this script is the test controller
            # it runs on any device that consumes the jobs on given queue name, for instance "dearest-team"
            # the controller has a 1:1 relationship with the DUT (device under test)
            # to run anything on the DUT, the controller ssh's into the DUT and runs the commands there
            # and then in the end runs checkbox to run the actual testing session
            # the checkbox run is a typical remote session where the machine running this script is the
            # Checkbox Controller and the DUT is the Checkbox Agent

            set -x
            set -e

            # prepare Controller Machine
            sudo add-apt-repository ppa:checkbox-dev/ppa -y
            sudo apt-get -qq update
            sudo DEBIAN_FRONTEND=noninteractive apt-get -qq install -y python-cheetah git checkbox-ng

            # get the tools necessary to prepare the target device for testing
            git clone -b snap-update-tools https://github.com/kissiel/hwcert-jenkins-tools.git
            export PATH=$PATH:hwcert-jenkins-tools/scriptlets

            # install checkbox
            _run_retry sudo snap install checkbox22 --no-wait --channel=latest/edge
            wait_for_snap_complete
            # Let's list all the installed snaps for future debugging ease
            _run snap list

            _run_retry sudo snap install --devmode --channel=uc22/edge checkbox

            # run the canary test plan
            PYTHONUNBUFFERED=1 checkbox-cli remote \$DEVICE_IP hwcert-jenkins-tools/snap-update-tools/canary.launcher
            EXITCODE=\$?
EOF

JOB_ID=$(testflinger submit -q job.yaml)
echo "JOB_ID: $JOB_ID"
echo "$JOB_ID" > JOB_ID
testflinger poll $JOB_ID

TEST_STATUS=$(testflinger results $JOB_ID |jq -r .test_status)

echo "Test exit status: $TEST_STATUS"
exit $EXITCODE