From: Tom Rini Date: Wed, 13 Nov 2024 18:05:00 +0000 (-0600) Subject: Merge patch series "labgrid: Provide an integration with Labgrid" X-Git-Url: http://git.dujemihanovic.xyz/%22http:/www.sics.se/static/%7B%7B?a=commitdiff_plain;h=8573ea4105829b9a915b23f56d1577b3f09ed918;p=u-boot.git Merge patch series "labgrid: Provide an integration with Labgrid" Simon Glass says: Labgrid provides access to a hardware lab in an automated way. It is possible to boot U-Boot on boards in the lab without physically touching them. It relies on relays, USB UARTs and SD muxes, among other things. By way of background, about 4 years ago I wrong a thing called Labman[1] which allowed my lab of about 30 devices to be operated remotely, using tbot for the console and build integration. While it worked OK and I used it for many bisects, I didn't take it any further. It turns out that there was already an existing program, called Labgrid, which I did not know about at time (thank you Tom for telling me). It is more rounded than Labman and has a number of advantages: - does not need udev rules, mostly - has several existing users who rely on it - supports multiple machines exporting their devices It lacks a 'lab check' feature and a few other things, but these can be remedied. On and off over the past several weeks I have been experimenting with Labgrid. I have managed to create an initial U-Boot integration (this series) by adding various features to Labgrid[2] and the U-Boot test hooks. I hope that this might inspire others to set up boards and run tests automatically, rather than relying on infrequent, manual test. Perhaps it may even be possible to have a number of labs available. Included in the integration are a number of simple scripts which make it easy to connect to boards and run tests: ub-int Build and boot on a target, starting an interactive session ub-cli Build and boot on a target, ensure U-Boot starts and provide an interactive session from there ub-smoke Smoke test U-Boot to check that it boots to a prompt on a target ub-bisect Bisect a git tree to locate a failure on a particular target ub-pyt Run U-Boot pytests on a target Some of these help to provide the same tbot[4] workflow which I have relied on for several years, albeit much simpler versions. The goal here is to create some sort of script which can collect patches from the mailing list, apply them and test them on a selection of boards. I suspect that script already exists, so please let me know what you suggest. I hope you find this interesting and take a look! [1] https://github.com/sjg20/u-boot/tree/lab6a [2] https://github.com/labgrid-project/labgrid/pull/1411 [3] https://github.com/sjg20/uboot-test-hooks/tree/labgrid [4] https://tbot.tools/index.html Link: https://lore.kernel.org/r/20241112141326.643128-1-sjg@chromium.org [trini: Move the sjg-lab job to prior to world build, to fix pipeline status] Signed-off-by: Tom Rini --- 8573ea4105829b9a915b23f56d1577b3f09ed918 diff --cc .gitlab-ci.yml index 0aeda53bc2,1443a52fc9..2164ad79a7 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@@ -16,7 -17,8 +17,8 @@@ image: ${MIRROR_DOCKER}/trini/u-boot-gi stages: - testsuites - test.py - - world build + - sjg-lab + - world build .buildman_and_testpy_template: &buildman_and_testpy_dfn stage: test.py @@@ -521,3 -523,156 +523,158 @@@ coreboot test.py TEST_PY_TEST_SPEC: "not sleep" TEST_PY_ID: "--id qemu" <<: *buildman_and_testpy_dfn + + .lab_template: &lab_dfn + stage: sjg-lab + rules: + - if: $SJG_LAB == "1" + when: always - - when: manual ++ - if: $SJG_LAB != "1" ++ when: manual ++ allow_failure: true + tags: [ 'lab' ] + script: + - if [[ -z "${SJG_LAB}" ]]; then + exit 0; + fi + # Environment: + # SRC - source tree + # OUT - output directory for builds + - export SRC="$(pwd)" + - export OUT="${SRC}/build/${BOARD}" + - export PATH=$PATH:~/bin + - export PATH=$PATH:/vid/software/devel/ubtest/u-boot-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" + - ${SRC}/test/py/test.py --role ${ROLE} --build-dir "${OUT}" + --capture=tee-sys -k "not bootstd" || ret=$? + - U_BOOT_BOARD_IDENTITY="${ROLE}" u-boot-test-release || true + - if [[ $ret -ne 0 ]]; then + exit $ret; + fi + artifacts: + when: always + paths: + - "build/${BOARD}/test-log.html" + - "build/${BOARD}/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 + + samus: + variables: + ROLE: samus + <<: *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: + variables: + ROLE: pine64 + <<: *lab_dfn + + c4: + variables: + ROLE: c4 + <<: *lab_dfn + + rpi4: + variables: + ROLE: rpi4 + <<: *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