QEMU comes with its own OpenSBI. For running RISC-V virtual machine
using one of qemu-riscv64_smode_defconfig or
qemu-riscv64_smode_acpi_defconfig is the natural choice.
Add the riscv64 smode configurations to the test scope.
Series-to: concept
Cover-letter:
CI: Tidy up riscv targets
There are some smode options for the QEMU builds, along with some
associated hooks.
This eries pulls these in from upstream, since the previous attempt has
broken qemu-riscv64
END
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
(cherry picked from 703efbb1a5)
Signed-off-by: Simon Glass <simon.glass@canonical.com>
1018 lines
28 KiB
YAML
1018 lines
28 KiB
YAML
# SPDX-License-Identifier: GPL-2.0+
|
|
|
|
include:
|
|
- local: '.gitlab-ci-release.yml'
|
|
|
|
workflow:
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "push"
|
|
when: always
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
when: always
|
|
- when: never
|
|
|
|
variables:
|
|
DEFAULT_TAG: ""
|
|
MIRROR_DOCKER: docker.io
|
|
SUITES: "1"
|
|
PYTEST: "1"
|
|
TEST_SPEC: ""
|
|
WORLD: "1"
|
|
SJG_LAB: ""
|
|
PLATFORM: linux/amd64,linux/arm64
|
|
GIT_CLONE_PATH: $CI_BUILDS_DIR/$CI_RUNNER_ID/$CI_CONCURRENT_ID/u-boot
|
|
|
|
default:
|
|
tags:
|
|
- ${DEFAULT_TAG}
|
|
# Grab our configured image. The source for this is found
|
|
# in the u-boot tree at tools/docker/Dockerfile
|
|
image: ${MIRROR_DOCKER}/sjg20/u-boot-gitlab-ci-runner:jammy-20250404-24Oct2025p1
|
|
services:
|
|
- name: container-$(CI_JOB_ID)
|
|
command: ["--rm"]
|
|
|
|
# We run some tests in different order, to catch some failures quicker.
|
|
stages:
|
|
- test_suites
|
|
- test.py
|
|
- sjg-lab
|
|
- world_build
|
|
- version_bump
|
|
- release
|
|
|
|
.buildman_and_testpy_template: &buildman_and_testpy_dfn
|
|
stage: test.py
|
|
retry: 2 # QEMU may be too slow, etc.
|
|
# Note: These tests require device-mapper access for LUKS encryption tests.
|
|
# The GitLab runner must be configured with:
|
|
# - privileged = true in /etc/gitlab-runner/config.toml
|
|
# OR passwordless sudo for: modprobe, cryptsetup, dd
|
|
needs: [ "Run binman, buildman, dtoc, hwids_to_dtsi, Kconfig, patman and pickman suites" ]
|
|
rules:
|
|
# Skip if MR description contains [skip-pytest]
|
|
- if: $CI_MERGE_REQUEST_DESCRIPTION =~ /\[skip-pytest\]/
|
|
when: never
|
|
- if: $PYTEST == "1"
|
|
when: always
|
|
- if: $PYTEST == $CI_JOB_NAME
|
|
when: always
|
|
- if: $PYTEST == $TEST_PY_BD
|
|
when: always
|
|
- when: never
|
|
before_script:
|
|
- git config --global --add safe.directory "${CI_PROJECT_DIR}"
|
|
# qemu_arm64_lwip_defconfig is the same as qemu_arm64 but with NET_LWIP enabled.
|
|
# The test config and the boardenv file from qemu_arm64 can be re-used so create symlinks
|
|
- ln -s conf.qemu_arm64_na test/hooks/bin/travis-ci/conf.qemu_arm64_lwip_na
|
|
- ln -s u_boot_boardenv_qemu_arm64_na.py test/hooks/py/travis-ci/u_boot_boardenv_qemu_arm64_lwip_na.py
|
|
- ln -s travis-ci test/hooks/bin/`hostname`
|
|
- ln -s travis-ci test/hooks/py/`hostname`
|
|
- if [[ "${TEST_PY_BD}" == "qemu-riscv32_spl" ]]; then
|
|
wget -O - https://github.com/riscv-software-src/opensbi/releases/download/v1.3.1/opensbi-1.3.1-rv-bin.tar.xz | tar -C /tmp -xJ;
|
|
export OPENSBI=/tmp/opensbi-1.3.1-rv-bin/share/opensbi/ilp32/generic/firmware/fw_dynamic.bin;
|
|
fi
|
|
- if [[ "${TEST_PY_BD}" == "qemu-riscv64_spl" ]] || [[ "${TEST_PY_BD}" == "sifive_unleashed" ]]; then
|
|
wget -O - https://github.com/riscv-software-src/opensbi/releases/download/v1.3.1/opensbi-1.3.1-rv-bin.tar.xz | tar -C /tmp -xJ;
|
|
export OPENSBI=/tmp/opensbi-1.3.1-rv-bin/share/opensbi/lp64/generic/firmware/fw_dynamic.bin;
|
|
fi
|
|
- if [[ "${TEST_PY_BD}" == "qemu-arm-sbsa" ]]; then
|
|
wget -O /tmp/bl1.bin https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/latest/tf-a/bl1.bin;
|
|
wget -O /tmp/fip.bin https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/latest/tf-a/fip.bin;
|
|
export BINMAN_INDIRS=/tmp;
|
|
fi
|
|
# Prepare python environment
|
|
- python3 -m venv /tmp/venv;
|
|
. /tmp/venv/bin/activate;
|
|
pip install -r test/py/requirements.txt -r tools/binman/requirements.txt
|
|
-r tools/buildman/requirements.txt -r tools/u_boot_pylib/requirements.txt
|
|
|
|
after_script:
|
|
- cp -v /tmp/${TEST_PY_BD}/*.{html,css,xml} .
|
|
- rm -rf /tmp/venv
|
|
script:
|
|
# If we've been asked to use clang only do one configuration.
|
|
- export UBOOT_TRAVIS_BUILD_DIR=/tmp/${TEST_PY_BD}
|
|
- echo BUILD_ENV ${BUILD_ENV}
|
|
- if [ -n "${BUILD_ENV}" ]; then
|
|
export ${BUILD_ENV};
|
|
fi
|
|
- tools/buildman/buildman -o ${UBOOT_TRAVIS_BUILD_DIR} -w -E -W -e
|
|
--board ${TEST_PY_BD} ${OVERRIDE}
|
|
- cp /opt/grub/grub_x86.efi $UBOOT_TRAVIS_BUILD_DIR/
|
|
- cp /opt/grub/grub_x64.efi $UBOOT_TRAVIS_BUILD_DIR/
|
|
- cp /opt/grub/grubriscv64.efi $UBOOT_TRAVIS_BUILD_DIR/grub_riscv64.efi
|
|
- cp /opt/grub/grubaa64.efi $UBOOT_TRAVIS_BUILD_DIR/grub_arm64.efi
|
|
- cp /opt/grub/grubarm.efi $UBOOT_TRAVIS_BUILD_DIR/grub_arm.efi
|
|
# create sdcard / spi-nor images for sifive unleashed using genimage
|
|
- if [[ "${TEST_PY_BD}" == "sifive_unleashed" ]]; then
|
|
mkdir -p root;
|
|
cp ${UBOOT_TRAVIS_BUILD_DIR}/spl/u-boot-spl.bin .;
|
|
cp ${UBOOT_TRAVIS_BUILD_DIR}/u-boot.itb .;
|
|
rm -rf tmp;
|
|
genimage --inputpath . --config board/sifive/unleashed/genimage_sdcard.cfg;
|
|
cp images/sdcard.img ${UBOOT_TRAVIS_BUILD_DIR}/;
|
|
rm -rf tmp;
|
|
genimage --inputpath . --config board/sifive/unleashed/genimage_spi-nor.cfg;
|
|
cp images/spi-nor.img ${UBOOT_TRAVIS_BUILD_DIR}/;
|
|
fi
|
|
- if [[ "${TEST_PY_BD}" == "coreboot" ]]; then
|
|
cp /opt/coreboot/coreboot.rom ${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom;
|
|
/opt/coreboot/cbfstool ${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom remove -n fallback/payload;
|
|
/opt/coreboot/cbfstool ${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom add-flat-binary -f ${UBOOT_TRAVIS_BUILD_DIR}/u-boot.bin -n fallback/payload -c LZMA -l 0x1110000 -e 0x1110000;
|
|
fi
|
|
# If we have TF-A binaries, we need to use them.
|
|
- if [[ -d /opt/tf-a/"${TEST_PY_BD}" ]]; then
|
|
cp /opt/tf-a/"${TEST_PY_BD}"/fip.bin /opt/tf-a/"${TEST_PY_BD}"/bl1.bin /tmp/;
|
|
export fip=/tmp/fip.bin;
|
|
export bl1=/tmp/bl1.bin;
|
|
export PATH=/opt/Base_RevC_AEMvA_pkg/models/Linux64_GCC-9.3:${PATH};
|
|
fi
|
|
- if [[ -n "${TEST_SPEC}" ]]; then
|
|
SPEC="${TEST_SPEC}";
|
|
echo 'Using provided test spec ${TEST_SPEC}"';
|
|
else
|
|
SPEC="${TEST_PY_TEST_SPEC}";
|
|
fi
|
|
# "${var:+"-k $var"}" expands to "" if $var is empty, "-k $var" if not
|
|
- export PATH=/opt/qemu/bin:test/hooks/bin:${PATH};
|
|
export PYTHONPATH=test/hooks/py/travis-ci;
|
|
./test/py/test.py -ra --bd ${TEST_PY_BD} ${TEST_PY_ID} ${TEST_PY_EXTRA}
|
|
${SPEC:+"-k ${SPEC}"}
|
|
--build-dir "$UBOOT_TRAVIS_BUILD_DIR"
|
|
--junitxml=/tmp/${TEST_PY_BD}/results.xml
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- "*.html"
|
|
- "*.css"
|
|
- results.xml
|
|
reports:
|
|
junit: results.xml
|
|
expire_in: 1 week
|
|
|
|
.world_build:
|
|
stage: world_build
|
|
dependencies: []
|
|
rules:
|
|
# Skip if MR description contains [skip-world]
|
|
- if: $CI_MERGE_REQUEST_DESCRIPTION =~ /\[skip-world\]/
|
|
when: never
|
|
- if: $WORLD == "1"
|
|
when: always
|
|
- when: never
|
|
|
|
build all 32bit ARM platforms:
|
|
extends: .world_build
|
|
dependencies: []
|
|
tags:
|
|
- single
|
|
script:
|
|
# Prepare python environment
|
|
- python3 -m venv /tmp/venv;
|
|
. /tmp/venv/bin/activate;
|
|
pip install -r tools/binman/requirements.txt
|
|
-r tools/buildman/requirements.txt
|
|
- ret=0;
|
|
git config --global --add safe.directory "${CI_PROJECT_DIR}";
|
|
./tools/buildman/buildman -o /tmp -PEWM arm -x aarch64 || ret=$?;
|
|
if [[ $ret -ne 0 ]]; then
|
|
./tools/buildman/buildman -o /tmp -seP;
|
|
exit $ret;
|
|
fi;
|
|
|
|
build all 64bit ARM platforms:
|
|
extends: .world_build
|
|
dependencies: []
|
|
tags:
|
|
- single
|
|
script:
|
|
# Prepare python environment
|
|
- python3 -m venv /tmp/venv;
|
|
. /tmp/venv/bin/activate;
|
|
pip install -r tools/binman/requirements.txt
|
|
-r tools/buildman/requirements.txt
|
|
- ret=0;
|
|
git config --global --add safe.directory "${CI_PROJECT_DIR}";
|
|
pip install -r tools/buildman/requirements.txt;
|
|
./tools/buildman/buildman -o /tmp -PEWM aarch64 || ret=$?;
|
|
if [[ $ret -ne 0 ]]; then
|
|
./tools/buildman/buildman -o /tmp -seP;
|
|
exit $ret;
|
|
fi;
|
|
|
|
build all PowerPC platforms:
|
|
extends: .world_build
|
|
dependencies: []
|
|
tags:
|
|
- single
|
|
script:
|
|
# Prepare python environment
|
|
- python3 -m venv /tmp/venv;
|
|
. /tmp/venv/bin/activate;
|
|
pip install -r tools/binman/requirements.txt
|
|
-r tools/buildman/requirements.txt
|
|
- ret=0;
|
|
git config --global --add safe.directory "${CI_PROJECT_DIR}";
|
|
./tools/buildman/buildman -o /tmp -P -E -W powerpc || ret=$?;
|
|
if [[ $ret -ne 0 ]]; then
|
|
./tools/buildman/buildman -o /tmp -seP;
|
|
exit $ret;
|
|
fi;
|
|
|
|
# We exclude xtensa here due to not being able to build on aarch64
|
|
# hosts but covering all platforms in the pytest section.
|
|
build all other platforms:
|
|
extends: .world_build
|
|
dependencies: []
|
|
tags:
|
|
- single
|
|
script:
|
|
# Prepare python environment
|
|
- python3 -m venv /tmp/venv;
|
|
. /tmp/venv/bin/activate;
|
|
pip install -r tools/binman/requirements.txt
|
|
-r tools/buildman/requirements.txt
|
|
- ret=0;
|
|
git config --global --add safe.directory "${CI_PROJECT_DIR}";
|
|
./tools/buildman/buildman -o /tmp -PEWM -x arm,powerpc,xtensa || ret=$?;
|
|
if [[ $ret -ne 0 ]]; then
|
|
./tools/buildman/buildman -o /tmp -seP;
|
|
exit $ret;
|
|
fi;
|
|
|
|
.test_suites:
|
|
stage: test_suites
|
|
rules:
|
|
# Skip if MR description contains [skip-suites]
|
|
- if: $CI_MERGE_REQUEST_DESCRIPTION =~ /\[skip-suites\]/
|
|
when: never
|
|
- if: $SUITES == "1"
|
|
when: always
|
|
- when: never
|
|
|
|
check for new CONFIG symbols outside Kconfig:
|
|
extends: .test_suites
|
|
script:
|
|
- git config --global --add safe.directory "${CI_PROJECT_DIR}"
|
|
# If grep succeeds and finds a match the test fails as we should
|
|
# have no matches.
|
|
- git grep -E '^#[[:blank:]]*(define|undef)[[:blank:]]*CONFIG_'
|
|
:^doc/ :^arch/arm/dts/ :^scripts/kconfig/lkc.h
|
|
:^include/linux/kconfig.h :^tools/ :^dts/upstream/
|
|
:^lib/mbedtls/external :^lib/mbedtls/mbedtls_def_config.h &&
|
|
exit 1 || exit 0
|
|
|
|
# build documentation
|
|
docs:
|
|
extends: .test_suites
|
|
script:
|
|
- python3 -m venv /tmp/venvhtml
|
|
- . /tmp/venvhtml/bin/activate
|
|
- pip install -r doc/sphinx/requirements.txt -r test/py/requirements.txt
|
|
- make htmldocs KDOC_WERROR=1
|
|
- make infodocs
|
|
|
|
# ensure all configs have MAINTAINERS entries
|
|
Check for configs without MAINTAINERS entry:
|
|
extends: .test_suites
|
|
script:
|
|
- ./tools/buildman/buildman --maintainer-check
|
|
|
|
# Ensure host tools build
|
|
Build tools-only and envtools:
|
|
extends: .test_suites
|
|
tags:
|
|
- single
|
|
script:
|
|
- make tools-only_config tools-only -j$(nproc);
|
|
make mrproper;
|
|
make tools-only_config envtools -j$(nproc)
|
|
|
|
Run binman, buildman, dtoc, hwids_to_dtsi, Kconfig, patman and pickman suites:
|
|
extends: .test_suites
|
|
script:
|
|
- git config --global user.name "GitLab CI Runner";
|
|
git config --global user.email trini@konsulko.com;
|
|
git config --global --add safe.directory "${CI_PROJECT_DIR}";
|
|
export USER=gitlab;
|
|
python3 -m venv /tmp/venv;
|
|
. /tmp/venv/bin/activate;
|
|
pip install -r test/py/requirements.txt -r tools/binman/requirements.txt
|
|
-r tools/buildman/requirements.txt -r tools/patman/requirements.txt
|
|
-r tools/pickman/requirements.txt -r tools/u_boot_pylib/requirements.txt;
|
|
export UBOOT_TRAVIS_BUILD_DIR=/tmp/tools-only;
|
|
export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt";
|
|
export PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}";
|
|
set +e;
|
|
./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w
|
|
--board tools-only;
|
|
set -e;
|
|
export TOOLPATH="--toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools --toolpath /opt/coreboot";
|
|
./tools/binman/binman ${TOOLPATH} tool -f missing;
|
|
./tools/binman/binman ${TOOLPATH} test;
|
|
./tools/binman/binman ${TOOLPATH} test -T;
|
|
./tools/buildman/buildman -t;
|
|
./tools/dtoc/dtoc -t;
|
|
./tools/patman/patman test;
|
|
./tools/pickman/pickman test;
|
|
./tools/pickman/pickman test -T;
|
|
./tools/buildman/buildman --coverage;
|
|
python3 ./test/scripts/test_hwids_to_dtsi.py;
|
|
python3 -m pytest ./test/scripts/test_release_version.py;
|
|
make testconfig
|
|
|
|
# Check for any pylint regressions
|
|
Run pylint:
|
|
extends: .test_suites
|
|
tags:
|
|
- single
|
|
script:
|
|
- git config --global --add safe.directory "${CI_PROJECT_DIR}"
|
|
- python3 -m venv /tmp/venv
|
|
- . /tmp/venv/bin/activate
|
|
- pip install -r test/py/requirements.txt -r tools/binman/requirements.txt
|
|
-r tools/buildman/requirements.txt -r tools/patman/requirements.txt
|
|
-r tools/u_boot_pylib/requirements.txt asteval pylint==3.3.4 pyopenssl
|
|
- export PATH=${PATH}:~/.local/bin
|
|
- echo "[MASTER]" >> .pylintrc
|
|
- echo "load-plugins=pylint.extensions.docparams" >> .pylintrc
|
|
- export UBOOT_TRAVIS_BUILD_DIR=/tmp/tools-only
|
|
- set +e
|
|
- ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w
|
|
--board tools-only
|
|
- set -e
|
|
- pylint --version
|
|
- export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"
|
|
- make pylint_err
|
|
|
|
# Check for pre-schema driver model tags
|
|
Check for pre-schema tags:
|
|
extends: .test_suites
|
|
script:
|
|
- git config --global --add safe.directory "${CI_PROJECT_DIR}";
|
|
# If grep succeeds and finds a match the test fails as we should
|
|
# have no matches.
|
|
- git grep u-boot,dm- -- '*.dts*' && exit 1 || exit 0
|
|
|
|
# Check we can package the Python tools
|
|
Check packing of Python tools:
|
|
extends: .test_suites
|
|
script:
|
|
- make pip
|
|
|
|
Examples:
|
|
extends: .test_suites
|
|
script:
|
|
- git config --global user.name "GitLab CI Runner";
|
|
git config --global user.email trini@konsulko.com;
|
|
git config --global --add safe.directory "${CI_PROJECT_DIR}";
|
|
export USER=gitlab;
|
|
export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox;
|
|
set +e;
|
|
./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w
|
|
--board sandbox;
|
|
set -e;
|
|
- echo "Building C examples";
|
|
cd examples/ulib;
|
|
make UBOOT_BUILD=${UBOOT_TRAVIS_BUILD_DIR} srctree=../..
|
|
- echo "Running C static";
|
|
./demo_static
|
|
- echo "Running C dynamic";
|
|
LD_LIBRARY_PATH=${UBOOT_TRAVIS_BUILD_DIR} ./demo
|
|
- echo "Building Rust examples";
|
|
cd ../rust;
|
|
make UBOOT_BUILD=${UBOOT_TRAVIS_BUILD_DIR} srctree=../..
|
|
- echo "Running Rust static";
|
|
./demo_static
|
|
- echo "Running Rust dynamic";
|
|
LD_LIBRARY_PATH=${UBOOT_TRAVIS_BUILD_DIR} ./demo
|
|
|
|
# Template for running the 'make check' tools
|
|
.python_check_template:
|
|
stage: test.py
|
|
rules:
|
|
# Skip if MR description contains [skip-pytest]
|
|
- if: $CI_MERGE_REQUEST_DESCRIPTION =~ /\[skip-pytest\]/
|
|
when: never
|
|
- if: $PYTEST == "1"
|
|
when: always
|
|
- if: $PYTEST == $CI_JOB_NAME
|
|
when: always
|
|
- if: $PYTEST == $TEST_PY_BD
|
|
when: always
|
|
- when: never
|
|
before_script:
|
|
- git config --global user.name "GitLab CI Runner";
|
|
git config --global user.email trini@konsulko.com;
|
|
git config --global --add safe.directory "${CI_PROJECT_DIR}";
|
|
export USER=gitlab;
|
|
python3 -m venv /tmp/venv;
|
|
. /tmp/venv/bin/activate;
|
|
pip install -r test/py/requirements.txt -r tools/binman/requirements.txt
|
|
-r tools/buildman/requirements.txt -r tools/patman/requirements.txt
|
|
-r tools/u_boot_pylib/requirements.txt;
|
|
export UBOOT_TRAVIS_BUILD_DIR=/tmp/tools-only;
|
|
export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt";
|
|
export PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}";
|
|
# Set environment variables
|
|
- export TOOLPATH="--toolpath ${pwd}/build-sandbox/tools --toolpath /opt/coreboot"
|
|
- export PATH=/opt/qemu/bin:${PATH}
|
|
|
|
Check make check:
|
|
extends: .python_check_template
|
|
script:
|
|
- make check
|
|
|
|
Check make qcheck:
|
|
extends: .python_check_template
|
|
script:
|
|
- make qcheck
|
|
|
|
Check make tcheck:
|
|
extends: .python_check_template
|
|
script:
|
|
- make tcheck
|
|
|
|
# This currently fails, so disable it
|
|
#Check make pcheck:
|
|
# extends: .python_check_template
|
|
# script:
|
|
# - make pcheck
|
|
|
|
# Test sandbox with test.py
|
|
sandbox test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox"
|
|
TEST_PY_EXTRA: "--timing"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sandbox with clang test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox"
|
|
OVERRIDE: "-O clang-18"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sandbox64 test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox64"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sandbox64 with clang test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox64"
|
|
OVERRIDE: "-O clang-18"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sandbox64_lwip test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox64_lwip"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sandbox_spl test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox_spl"
|
|
TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sandbox_noinst_test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox_noinst"
|
|
TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sandbox_noinst with LOAD_FIT_FULL test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox_noinst"
|
|
TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl"
|
|
OVERRIDE: "-a CONFIG_SPL_LOAD_FIT_FULL=y"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sandbox_vpl test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox_vpl"
|
|
TEST_PY_TEST_SPEC: "vpl or test_spl"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
# Enable tracing and disable LTO, to ensure functions are not elided
|
|
sandbox trace_test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox"
|
|
BUILD_ENV: "FTRACE=1 NO_LTO=1"
|
|
TEST_PY_TEST_SPEC: "trace"
|
|
OVERRIDE: "-a CONFIG_TRACE=y -a CONFIG_TRACE_EARLY=y -a CONFIG_TRACE_EARLY_SIZE=0x01000000 -a CONFIG_TRACE_BUFFER_SIZE=0x02000000 -a ~CONFIG_BACKTRACE"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
evb-ast2500 test.py:
|
|
variables:
|
|
TEST_PY_BD: "evb-ast2500"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sandbox_flattree test.py:
|
|
variables:
|
|
TEST_PY_BD: "sandbox_flattree"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
vexpress_ca9x4 test.py:
|
|
variables:
|
|
TEST_PY_BD: "vexpress_ca9x4"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
integratorcp_cm926ejs test.py:
|
|
variables:
|
|
TEST_PY_BD: "integratorcp_cm926ejs"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_arm test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu_arm"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_arm64 test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu_arm64"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_arm64_lwip test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu_arm64_lwip"
|
|
TEST_PY_TEST_SPEC: "test_net_dhcp or test_net_ping or test_net_tftpboot"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_arm_sbsa test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-arm-sbsa"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_arm spl_test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu_arm_spl"
|
|
TEST_PY_TEST_SPEC: "test_passage"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_arm64 spl_test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu_arm64_spl"
|
|
TEST_PY_TEST_SPEC: "test_passage"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_m68k test.py:
|
|
variables:
|
|
TEST_PY_BD: "M5208EVBE"
|
|
TEST_PY_ID: "--id qemu"
|
|
TEST_PY_TEST_SPEC: "not sleep and not efi"
|
|
OVERRIDE: "-a CONFIG_M68K_QEMU=y -a ~CONFIG_MCFTMR"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_malta test.py:
|
|
variables:
|
|
TEST_PY_BD: "malta"
|
|
TEST_PY_TEST_SPEC: "not sleep and not efi"
|
|
TEST_PY_ID: "--id qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_maltael test.py:
|
|
variables:
|
|
TEST_PY_BD: "maltael"
|
|
TEST_PY_TEST_SPEC: "not sleep and not efi"
|
|
TEST_PY_ID: "--id qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_malta64 test.py:
|
|
variables:
|
|
TEST_PY_BD: "malta64"
|
|
TEST_PY_TEST_SPEC: "not sleep and not efi"
|
|
TEST_PY_ID: "--id qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu_malta64el test.py:
|
|
variables:
|
|
TEST_PY_BD: "malta64el"
|
|
TEST_PY_TEST_SPEC: "not sleep and not efi"
|
|
TEST_PY_ID: "--id qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu-ppce500 test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-ppce500"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu-riscv32 test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-riscv32"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu-riscv64 test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-riscv64"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu-riscv32_spl test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-riscv32_spl"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu-riscv64_spl test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-riscv64_spl"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu-riscv64_smode test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-riscv64_smode"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu-riscv64_smode_acpi test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-riscv64_smode_acpi"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu-x86 test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-x86"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu-x86_64 test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-x86_64"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
qemu-xtensa-dc233c test.py:
|
|
variables:
|
|
TEST_PY_BD: "qemu-xtensa-dc233c"
|
|
TEST_PY_TEST_SPEC: "not sleep and not efi"
|
|
tags:
|
|
- all
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
r2dplus_i82557c test.py:
|
|
variables:
|
|
TEST_PY_BD: "r2dplus"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id i82557c_qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
r2dplus_pcnet test.py:
|
|
variables:
|
|
TEST_PY_BD: "r2dplus"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id pcnet_qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
r2dplus_rtl8139 test.py:
|
|
variables:
|
|
TEST_PY_BD: "r2dplus"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id rtl8139_qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
r2dplus_tulip test.py:
|
|
variables:
|
|
TEST_PY_BD: "r2dplus"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id tulip_qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sifive_unleashed_sdcard test.py:
|
|
variables:
|
|
TEST_PY_BD: "sifive_unleashed"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id sdcard_qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
sifive_unleashed_spi-nor test.py:
|
|
variables:
|
|
TEST_PY_BD: "sifive_unleashed"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id spi-nor_qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
vexpress_fvp test.py:
|
|
variables:
|
|
TEST_PY_BD: "vexpress_fvp"
|
|
TEST_PY_TEST_SPEC: "not sleep and not hostfs"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
vexpress_fvp_bloblist test.py:
|
|
variables:
|
|
TEST_PY_BD: "vexpress_fvp_bloblist"
|
|
TEST_PY_TEST_SPEC: "not sleep and not hostfs"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
xilinx_zynq_virt test.py:
|
|
variables:
|
|
TEST_PY_BD: "xilinx_zynq_virt"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
xilinx_versal_virt test.py:
|
|
variables:
|
|
TEST_PY_BD: "xilinx_versal_virt"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id qemu"
|
|
OVERRIDE: "-a ~CONFIG_USB_DWC3"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
xtfpga test.py:
|
|
variables:
|
|
TEST_PY_BD: "xtfpga"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id qemu"
|
|
tags:
|
|
- all
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
coreboot test.py:
|
|
variables:
|
|
TEST_PY_BD: "coreboot"
|
|
TEST_PY_TEST_SPEC: "not sleep"
|
|
TEST_PY_ID: "--id qemu"
|
|
<<: *buildman_and_testpy_dfn
|
|
|
|
.lab_template: &lab_dfn
|
|
stage: sjg-lab
|
|
needs: []
|
|
rules:
|
|
# Skip if MR description contains [skip-sjg]
|
|
- if: $CI_MERGE_REQUEST_DESCRIPTION =~ /\[skip-sjg\]/
|
|
when: never
|
|
- if: $SJG_LAB == $ROLE || $SJG_LAB == "1"
|
|
when: always
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
when: always
|
|
- if: $SJG_LAB != "" && $SJG_LAB != "1" && $SJG_LAB != $ROLE
|
|
when: never
|
|
- if: $SJG_LAB == ""
|
|
when: manual
|
|
allow_failure: true
|
|
dependencies: []
|
|
tags: [ 'lab' ]
|
|
script:
|
|
# Environment:
|
|
# SRC - source tree
|
|
# OUT - output directory for builds
|
|
- export SRC="$(pwd)"
|
|
- export OUT="${SRC}/build/${ROLE}"
|
|
- export OUT_EXTRA="${SRC}/build/${ROLE}_extra"
|
|
- export PATH=$PATH:~/bin
|
|
- export PATH=$PATH:test/hooks/bin
|
|
|
|
# Load it on the device
|
|
- ret=0
|
|
- echo "role ${ROLE}"
|
|
- export strategy="-s uboot -e off"
|
|
- export USE_LABGRID_SJG=1
|
|
# export verbose="-v"
|
|
- export vars=
|
|
- if [[ -n "${ADJUST}" ]]; then
|
|
vars="-V build-adjust ${ADJUST}";
|
|
fi
|
|
- ${SRC}/test/py/test.py --role ${ROLE} --build-dir "${OUT}"
|
|
--build-dir-extra ${OUT_EXTRA} --capture=tee-sys
|
|
-k "not bootstd ${TEST_PY_TEST_SPEC}" || ret=$?
|
|
- U_BOOT_BOARD_IDENTITY="${ROLE}" u-boot-test-release || true
|
|
- if [[ $ret -ne 0 ]]; then
|
|
exit $ret;
|
|
fi
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- "build/${ROLE}/test-log.html"
|
|
- "build/${ROLE}/multiplexed_log.css"
|
|
expire_in: 1 week
|
|
|
|
rpi3:
|
|
variables:
|
|
ROLE: rpi3
|
|
<<: *lab_dfn
|
|
|
|
opi_pc:
|
|
variables:
|
|
ROLE: opi_pc
|
|
<<: *lab_dfn
|
|
|
|
pcduino3_nano:
|
|
variables:
|
|
ROLE: pcduino3_nano
|
|
<<: *lab_dfn
|
|
|
|
link:
|
|
variables:
|
|
ROLE: link
|
|
<<: *lab_dfn
|
|
|
|
jerry:
|
|
variables:
|
|
ROLE: jerry
|
|
<<: *lab_dfn
|
|
|
|
minnowmax:
|
|
variables:
|
|
ROLE: minnowmax
|
|
<<: *lab_dfn
|
|
|
|
opi_pc2:
|
|
variables:
|
|
ROLE: opi_pc2
|
|
<<: *lab_dfn
|
|
|
|
bpi:
|
|
variables:
|
|
ROLE: bpi
|
|
<<: *lab_dfn
|
|
|
|
rpi2:
|
|
variables:
|
|
ROLE: rpi2
|
|
<<: *lab_dfn
|
|
|
|
bob:
|
|
variables:
|
|
ROLE: bob
|
|
<<: *lab_dfn
|
|
|
|
ff3399:
|
|
variables:
|
|
ROLE: ff3399
|
|
<<: *lab_dfn
|
|
|
|
coral:
|
|
variables:
|
|
ROLE: coral
|
|
<<: *lab_dfn
|
|
|
|
rpi3z:
|
|
variables:
|
|
ROLE: rpi3z
|
|
<<: *lab_dfn
|
|
|
|
bbb:
|
|
variables:
|
|
ROLE: bbb
|
|
<<: *lab_dfn
|
|
|
|
kevin:
|
|
variables:
|
|
ROLE: kevin
|
|
<<: *lab_dfn
|
|
|
|
# pine64+
|
|
pine64:
|
|
variables:
|
|
ROLE: pine64
|
|
<<: *lab_dfn
|
|
|
|
# c4 needs binman supported added, so signing works
|
|
#c4:
|
|
# variables:
|
|
# ROLE: c4
|
|
# <<: *lab_dfn
|
|
|
|
rpi4:
|
|
variables:
|
|
ROLE: rpi4
|
|
ADJUST: SPI:CMD_SPI:TPM:DM_SPI:SOFT_SPI:CMD_TPM:TPM2_TIS_SPI
|
|
<<: *lab_dfn
|
|
|
|
rpi0:
|
|
variables:
|
|
ROLE: rpi0
|
|
<<: *lab_dfn
|
|
|
|
snow:
|
|
variables:
|
|
ROLE: snow
|
|
<<: *lab_dfn
|
|
|
|
pcduino3:
|
|
variables:
|
|
ROLE: pcduino3
|
|
<<: *lab_dfn
|
|
|
|
nyan-big:
|
|
variables:
|
|
ROLE: nyan-big
|
|
<<: *lab_dfn
|
|
|
|
rpi:
|
|
variables:
|
|
ROLE: rpi
|
|
<<: *lab_dfn
|
|
|
|
# StarFive VisionFive 2
|
|
vf2:
|
|
variables:
|
|
ROLE: vf2
|
|
<<: *lab_dfn
|
|
|
|
colibrimx8:
|
|
variables:
|
|
ROLE: colibrimx8
|
|
<<: *lab_dfn
|
|
|
|
rockpro64:
|
|
variables:
|
|
ROLE: rockpro64
|
|
<<: *lab_dfn
|
|
|
|
rock3a:
|
|
variables:
|
|
ROLE: rock3a
|
|
<<: *lab_dfn
|
|
|
|
rock5b:
|
|
variables:
|
|
ROLE: rock5b
|
|
<<: *lab_dfn
|
|
|
|
rpi5:
|
|
variables:
|
|
ROLE: rpi5
|
|
<<: *lab_dfn
|
|
|
|
qemu-x86_64:
|
|
variables:
|
|
ROLE: qemu-x86_64
|
|
TEST_PY_TEST_SPEC: "and not sleep"
|
|
<<: *lab_dfn
|
|
|
|
# NVIDIA Jetson TK1
|
|
tk1:
|
|
variables:
|
|
ROLE: tk1
|
|
<<: *lab_dfn
|
|
|
|
# Firefly-RK3399 board running the rk3399-generic build
|
|
vbe:
|
|
variables:
|
|
ROLE: vbe
|
|
<<: *lab_dfn
|
|
|
|
play:
|
|
variables:
|
|
ROLE: play
|
|
<<: *lab_dfn
|
|
|
|
efi-aarch64:
|
|
variables:
|
|
ROLE: efi-aarch64
|
|
TEST_PY_TEST_SPEC: "and not sleep"
|
|
<<: *lab_dfn
|
|
|
|
trigger_snap_builds:
|
|
stage: release
|
|
variables:
|
|
GIT_DEPTH: 0 # Need full history for GitHub push
|
|
rules:
|
|
- if: $CI_COMMIT_BRANCH == "master"
|
|
before_script:
|
|
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )'
|
|
- mkdir -p ~/.ssh
|
|
- echo "$LAUNCHPAD_SSH_KEY" | sed 's/\\n/\n/g' > ~/.ssh/id_rsa
|
|
- chmod 600 ~/.ssh/id_rsa
|
|
- ssh-keyscan git.launchpad.net >> ~/.ssh/known_hosts
|
|
- ssh-keyscan github.com >> ~/.ssh/known_hosts
|
|
- eval "$(ssh-agent -s)"
|
|
- ssh-add ~/.ssh/id_rsa
|
|
- git config --global user.name "GitLab CI"
|
|
- git config --global user.email "admin@u-boot.org"
|
|
script:
|
|
- |
|
|
echo "Triggering snap builds for latest U-Boot changes..."
|
|
git clone --depth=1 git+ssh://sjg1@git.launchpad.net/~sjg1/u-boot/+git/u-boot-concept-qemu /tmp/qemu-snap
|
|
cd /tmp/qemu-snap
|
|
git commit --allow-empty -m "Trigger build: U-Boot updated to $CI_COMMIT_SHORT_SHA"
|
|
git push origin master
|
|
cd /tmp
|
|
git clone --depth=1 git+ssh://sjg1@git.launchpad.net/~sjg1/u-boot/+git/u-boot-concept-efi /tmp/efi-snap
|
|
cd /tmp/efi-snap
|
|
git commit --allow-empty -m "Trigger build: U-Boot updated to $CI_COMMIT_SHORT_SHA"
|
|
git push origin master
|
|
echo "Snap build triggers completed"
|
|
|
|
echo "Pushing to GitHub u-boot-concept for ReadTheDocs..."
|
|
git config --global --add safe.directory $CI_PROJECT_DIR
|
|
cd $CI_PROJECT_DIR
|
|
git remote add github git@github.com:sjg20/u-boot-concept.git || true
|
|
git push github HEAD:master --force
|
|
echo "GitHub push completed"
|