[PATCH v2 02/11] CI: Freeze setuptools package version for avocado compatibility

0 views
Skip to first unread message

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:36 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
Avocado with currently the latest LTS version we use (103.0) is not
compatible with python3-setuptools package > 81.0.0 already available
in some distros.
Fix it by forcing installation of the latest compatible setuptools
package version in CI environment.

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
scripts/ci_build.sh | 1 +
1 file changed, 1 insertion(+)

diff --git a/scripts/ci_build.sh b/scripts/ci_build.sh
index 690dadd4..241ff8c8 100755
--- a/scripts/ci_build.sh
+++ b/scripts/ci_build.sh
@@ -22,6 +22,7 @@ if ! command -v avocado > /dev/null; then
virtualenv --python python3 /tmp/avocado_venv
# shellcheck source=/dev/null
source /tmp/avocado_venv/bin/activate
+ pip install setuptools==81.0.0
pip install avocado-framework==103.0
pip install avocado-framework-plugin-varianter-yaml-to-mux==103.0
fi
--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:36 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
After trying to add Debian Forky and Ubuntu Resolute targets and cover them
under CI it turns out there are some issues in both Isar and testsuite need to
be fixed to make those targets work. This patchset accomulates target updates,
fixes needed and also includes some test coverage cleanups which includes
placing Debian Trixie RISCV64 QEMU target under CI testing.

Known issues:
ARM64 target of Ubuntu Resolute was moved to UEFI and startvm test case is
currently not working, so it is covered under KFAIL until it will be fixed.

Anton Mikanovich (11):
grub: Remove obsolete efi_uga module for new distros
CI: Freeze setuptools package version for avocado compatibility
CI: Fix errors reporting during startvm
meta: Add base distro overrides
linux-kernel: Reverse linux-libc-dev package arch selection logic
trixie: Split missing drivers hook recipes
CI: Move trixie targets to generic test cases
CI: Run startvm for all qemu targets
meta: Add Ubuntu 26.04 (Resolute Raccoon) support
testsuite: Cover Debian Trixie RISCV64 QEMU target with CI
testsuite: Cover Debian Forky with CI

kas/distro/Kconfig | 10 +-
kas/distro/ubuntu-resolute.yaml | 9 +
kas/machine/Kconfig | 4 +
meta-isar/conf/distro/ubuntu-common.inc | 6 +-
.../conf/distro/ubuntu-resolute-ports.list | 6 +
meta-isar/conf/distro/ubuntu-resolute.conf | 14 +
meta-isar/conf/distro/ubuntu-resolute.list | 6 +
meta-isar/conf/machine/qemuarm64.conf | 8 +-
meta-isar/conf/machine/qemuriscv64.conf | 3 +-
meta-isar/conf/mc.conf | 5 +
.../conf/multiconfig/bananapi-trixie.conf | 7 +-
.../conf/multiconfig/nanopi-neo-trixie.conf | 8 +-
.../conf/multiconfig/qemuamd64-forky.conf | 7 +
.../conf/multiconfig/qemuamd64-resolute.conf | 7 +
.../conf/multiconfig/qemuarm-trixie.conf | 3 +-
.../conf/multiconfig/qemuarm64-forky.conf | 7 +
.../conf/multiconfig/qemuarm64-resolute.conf | 7 +
.../multiconfig/qemuriscv64-resolute.conf | 7 +
...hook_0.1.bb => initramfs-missing-hook.inc} | 6 +-
.../initramfs-sunxi-mmc-hook_0.2.bb | 8 +
.../initramfs-virtio-blk-hook_0.2.bb | 8 +
meta/classes-recipe/linux-kernel.bbclass | 8 +-
meta/conf/bitbake.conf | 2 +-
.../wic/plugins/source/bootimg-efi-isar.py | 17 +-
.../plugins/source/isoimage-isohybrid-isar.py | 23 +-
scripts/ci_build.sh | 1 +
testsuite/cibuilder.py | 40 ++-
testsuite/citest.py | 261 +++++++++++++++---
testsuite/data/targets.yml | 10 +
testsuite/start_vm.py | 5 +-
30 files changed, 428 insertions(+), 85 deletions(-)
create mode 100644 kas/distro/ubuntu-resolute.yaml
create mode 100644 meta-isar/conf/distro/ubuntu-resolute-ports.list
create mode 100644 meta-isar/conf/distro/ubuntu-resolute.conf
create mode 100644 meta-isar/conf/distro/ubuntu-resolute.list
create mode 100644 meta-isar/conf/multiconfig/qemuamd64-forky.conf
create mode 100644 meta-isar/conf/multiconfig/qemuamd64-resolute.conf
create mode 100644 meta-isar/conf/multiconfig/qemuarm64-forky.conf
create mode 100644 meta-isar/conf/multiconfig/qemuarm64-resolute.conf
create mode 100644 meta-isar/conf/multiconfig/qemuriscv64-resolute.conf
rename meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/{initramfs-trixie-armhf-hook_0.1.bb => initramfs-missing-hook.inc} (92%)
create mode 100644 meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-sunxi-mmc-hook_0.2.bb
create mode 100644 meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-virtio-blk-hook_0.2.bb

--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:36 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
It was deprecated and then completely removed starting from Debian
Forky and Ubuntu Resolute.
Module efi_gop.mod can be used instead.

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
.../wic/plugins/source/bootimg-efi-isar.py | 17 ++++++++++++--
.../plugins/source/isoimage-isohybrid-isar.py | 23 +++++++++++++++++--
2 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py b/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
index 6bc78d42..a2592986 100644
--- a/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
+++ b/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
@@ -450,11 +450,22 @@ class BootimgEFIPlugin(SourcePlugin):
if not distro:
raise WicError("Couldn't find target distro")

+ # Module efi_uga is deprecated
+ efi_uga_list = [
+ "buster",
+ "bullseye",
+ "bookworm",
+ "trixie",
+ "focal",
+ "jammy",
+ "noble",
+ ]
+
if distro_arch == "amd64":
grub_target = 'x86_64-efi'
grub_image = "bootx64.efi"
grub_modules = "multiboot iorw ata "
- if "sid" not in distro:
+ if any(name in distro for name in efi_uga_list):
grub_modules += "efi_uga "
if distro.startswith("ubuntu") and \
os.path.exists('/usr/lib/grub/x86_64-efi/linuxefi.mod'):
@@ -462,7 +473,9 @@ class BootimgEFIPlugin(SourcePlugin):
elif distro_arch == "i386":
grub_target = 'i386-efi'
grub_image = "bootia32.efi"
- grub_modules = "multiboot efi_uga iorw ata "
+ grub_modules = "multiboot iorw ata "
+ if any(name in distro for name in efi_uga_list):
+ grub_modules += "efi_uga "
elif distro_arch == "arm64":
grub_target = 'arm64-efi'
grub_image = "bootaa64.efi"
diff --git a/meta/scripts/lib/wic/plugins/source/isoimage-isohybrid-isar.py b/meta/scripts/lib/wic/plugins/source/isoimage-isohybrid-isar.py
index 0ed61fff..6aa58870 100644
--- a/meta/scripts/lib/wic/plugins/source/isoimage-isohybrid-isar.py
+++ b/meta/scripts/lib/wic/plugins/source/isoimage-isohybrid-isar.py
@@ -370,11 +370,28 @@ class IsoImagePlugin(SourcePlugin):
if not target_arch:
raise WicError("Coludn't find target architecture")

+ distro = get_bitbake_var("DISTRO")
+ if not distro:
+ raise WicError("Couldn't find target distro")
+
+ # Module efi_uga is deprecated
+ efi_uga_list = [
+ "buster",
+ "bullseye",
+ "bookworm",
+ "trixie",
+ "focal",
+ "jammy",
+ "noble",
+ ]
+
if re.match("x86_64", target_arch):
grub_target = "x86_64-efi"
grub_src_image = "grub-efi-bootx64.efi"
grub_dest_image = "bootx64.efi"
- grub_modules = "multiboot efi_uga iorw ata "
+ grub_modules = "multiboot iorw ata "
+ if any(name in distro for name in efi_uga_list):
+ grub_modules += "efi_uga "
if get_bitbake_var("DISTRO").startswith("ubuntu") and \
os.path.exists('/usr/lib/grub/x86_64-efi/linuxefi.mod'):
grub_modules += "linuxefi "
@@ -382,7 +399,9 @@ class IsoImagePlugin(SourcePlugin):
grub_target = "i386-efi"
grub_src_image = "grub-efi-bootia32.efi"
grub_dest_image = "bootia32.efi"
- grub_modules = "multiboot efi_uga iorw ata "
+ grub_modules = "multiboot iorw ata "
+ if any(name in distro for name in efi_uga_list):
+ grub_modules += "efi_uga "
else:
raise WicError("grub-efi is incompatible with target %s" %
target_arch)
--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:37 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
Test case failure should be triggered by self.fail() API.
It helps to prepare much more correct log output.
So rebuild error handling of startvm related functions.

This also fixes KFAIL coverage for startvm test cases.

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
testsuite/cibuilder.py | 40 +++++++++++++++++++++++++---------------
1 file changed, 25 insertions(+), 15 deletions(-)

diff --git a/testsuite/cibuilder.py b/testsuite/cibuilder.py
index f9cca0c7..fca2f2ed 100755
--- a/testsuite/cibuilder.py
+++ b/testsuite/cibuilder.py
@@ -602,7 +602,7 @@ class CIBuilder(Test):
stderr=subprocess.PIPE,
universal_newlines=True,
)
- self.log.info("Started VM with pid %s" % (p1.pid))
+ self.log.info("Starting VM with pid %s" % (p1.pid))

return p1, cmdline, boot_log, need_sb_cleanup

@@ -634,8 +634,10 @@ class CIBuilder(Test):
if p1.poll() is not None:
break

- self.log.error("Didn't get login prompt")
- return 1
+ rc = 1
+ if time.time() > timeout:
+ rc = 2
+ return rc

def vm_parse_output(self, boot_log, multiconfig, skip_modulecheck):
# the printk of recipes-kernel/example-module
@@ -665,13 +667,10 @@ class CIBuilder(Test):
if module_output in data or skip_modulecheck:
if resize_output and resize_output not in data:
rc = 1
- self.log.error("No resize output while expected")
else:
rc = 2
- self.log.error("No example module output while expected")
if ordering_cycle in data:
rc = 3
- self.log.error("Systemd services ordering cycle detected")
return rc

def vm_dump_dict(self, vm):
@@ -680,16 +679,19 @@ class CIBuilder(Test):
f.close()

def vm_turn_off(self, vm):
- pid = self.vm_dict[vm][0]
- os.kill(pid, signal.SIGKILL)
+ try:
+ pid = self.vm_dict[vm][0]
+ os.kill(pid, signal.SIGKILL)

- if self.vm_dict[vm][3]:
- start_vm.sb_cleanup()
+ if self.vm_dict[vm][3]:
+ start_vm.sb_cleanup()

- del self.vm_dict[vm]
- self.vm_dump_dict(vm)
+ del self.vm_dict[vm]
+ self.vm_dump_dict(vm)

- self.log.info("Stopped VM with pid %s" % (pid))
+ self.log.info("Stopped VM with pid %s" % (pid))
+ except ProcessLookupError:
+ self.log.error("Can't stop VM %s" % vm)

def vm_start(
self,
@@ -758,7 +760,10 @@ class CIBuilder(Test):
rc = self.vm_wait_boot(p1, timeout)
if rc != 0:
self.vm_turn_off(vm)
- self.fail("Failed to boot qemu machine")
+ if rc == 2:
+ self.fail("Didn't get login prompt")
+ else:
+ self.fail("Failed to boot qemu machine")

if cmd is not None or script is not None:
self.ssh_user = 'ci'
@@ -794,7 +799,12 @@ class CIBuilder(Test):
if rc != 0:
if not keep:
self.vm_turn_off(vm)
- self.fail("Failed to parse output")
+ if rc == 1:
+ self.fail("No resize output while expected")
+ elif rc == 2:
+ self.fail("No example module output while expected")
+ else:
+ self.fail("Failed to parse output")

if not keep:
self.vm_turn_off(vm)
--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:37 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
Some distro related differences should be applied to the all Debian
or Ubuntu (or any other) distro versions. To avoid mentioning all
available distro version add more global override.

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
meta/conf/bitbake.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 6db10eb3..cedbb82c 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -69,7 +69,7 @@ KERNEL_FILE ?= "${@ 'vmlinux' if d.getVar('DISTRO_ARCH') in ['mipsel', 'riscv64'

MACHINEOVERRIDES ?= "${MACHINE}"
DISTROOVERRIDES ?= "${DISTRO}"
-OVERRIDES = "${PACKAGE_ARCH}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${BASE_DISTRO_CODENAME}:forcevariable"
+OVERRIDES = "${PACKAGE_ARCH}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${BASE_DISTRO_CODENAME}:${BASE_DISTRO}:forcevariable"
FILESOVERRIDES = "${PACKAGE_ARCH}:${MACHINE}"

# Setting default QEMU_ARCH variables for different DISTRO_ARCH:
--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:38 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
Because missing driver is different for different machines, recipe
metadata is also different. It results in running several instances of
the recipe build in the same workdir for multiconfig setup.

Split it into 2 separate recipes with different names (and workdirs).

Fixes: f4cbcd7b ("trixie: Workaround with missing drivers in initramfs")

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
meta-isar/conf/multiconfig/bananapi-trixie.conf | 7 +++++--
meta-isar/conf/multiconfig/nanopi-neo-trixie.conf | 8 ++++++--
meta-isar/conf/multiconfig/qemuarm-trixie.conf | 3 ++-
...rixie-armhf-hook_0.1.bb => initramfs-missing-hook.inc} | 6 +++---
.../initramfs-sunxi-mmc-hook_0.2.bb | 8 ++++++++
.../initramfs-virtio-blk-hook_0.2.bb | 8 ++++++++
6 files changed, 32 insertions(+), 8 deletions(-)
rename meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/{initramfs-trixie-armhf-hook_0.1.bb => initramfs-missing-hook.inc} (92%)
create mode 100644 meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-sunxi-mmc-hook_0.2.bb
create mode 100644 meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-virtio-blk-hook_0.2.bb

diff --git a/meta-isar/conf/multiconfig/bananapi-trixie.conf b/meta-isar/conf/multiconfig/bananapi-trixie.conf
index c2a9c667..400900b6 100644
--- a/meta-isar/conf/multiconfig/bananapi-trixie.conf
+++ b/meta-isar/conf/multiconfig/bananapi-trixie.conf
@@ -1,7 +1,10 @@
# This software is a part of Isar.
-# Copyright (C) 2025 ilbers GmbH
+# Copyright (C) 2025-2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT

MACHINE ?= "bananapi"
DISTRO ?= "debian-trixie"

-IMAGE_INSTALL += "initramfs-trixie-armhf-hook"
+# Workaround for missing drivers
+IMAGE_INSTALL += "initramfs-sunxi-mmc-hook"
diff --git a/meta-isar/conf/multiconfig/nanopi-neo-trixie.conf b/meta-isar/conf/multiconfig/nanopi-neo-trixie.conf
index ee53e68d..e283c635 100644
--- a/meta-isar/conf/multiconfig/nanopi-neo-trixie.conf
+++ b/meta-isar/conf/multiconfig/nanopi-neo-trixie.conf
@@ -1,7 +1,11 @@
-# This software is a part of ISAR.
+# This software is a part of Isar.
# Copyright (C) 2025 Siemens AG
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT

MACHINE ?= "nanopi-neo"
DISTRO ?= "debian-trixie"

-IMAGE_INSTALL += "initramfs-trixie-armhf-hook"
+# Workaround for missing drivers
+IMAGE_INSTALL += "initramfs-sunxi-mmc-hook"
diff --git a/meta-isar/conf/multiconfig/qemuarm-trixie.conf b/meta-isar/conf/multiconfig/qemuarm-trixie.conf
index 5ec903a5..ba93774c 100644
--- a/meta-isar/conf/multiconfig/qemuarm-trixie.conf
+++ b/meta-isar/conf/multiconfig/qemuarm-trixie.conf
@@ -6,4 +6,5 @@
MACHINE ?= "qemuarm"
DISTRO ?= "debian-trixie"

-IMAGE_INSTALL += "initramfs-trixie-armhf-hook"
+# Workaround for missing drivers
+IMAGE_INSTALL += "initramfs-virtio-blk-hook"
diff --git a/meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-trixie-armhf-hook_0.1.bb b/meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-missing-hook.inc
similarity index 92%
rename from meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-trixie-armhf-hook_0.1.bb
rename to meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-missing-hook.inc
index b0e4e697..2b15f1ee 100644
--- a/meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-trixie-armhf-hook_0.1.bb
+++ b/meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-missing-hook.inc
@@ -58,6 +58,6 @@ inherit initramfs-hook
# initramfs-tools.
# -----------------------------------------------------------------------------

-HOOK_ADD_MODULES:append:qemuarm:debian-trixie = "virtio-blk"
-HOOK_ADD_MODULES:append:bananapi:debian-trixie = "sunxi_mmc"
-HOOK_ADD_MODULES:append:nanopi-neo:debian-trixie = "sunxi_mmc"
+MISSING_DRIVER ?= ""
+
+HOOK_ADD_MODULES:append = "${MISSING_DRIVER}"
diff --git a/meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-sunxi-mmc-hook_0.2.bb b/meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-sunxi-mmc-hook_0.2.bb
new file mode 100644
index 00000000..afcc2cca
--- /dev/null
+++ b/meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-sunxi-mmc-hook_0.2.bb
@@ -0,0 +1,8 @@
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+require initramfs-missing-hook.inc
+
+MISSING_DRIVER = "sunxi_mmc"
diff --git a/meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-virtio-blk-hook_0.2.bb b/meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-virtio-blk-hook_0.2.bb
new file mode 100644
index 00000000..1d6d48f1
--- /dev/null
+++ b/meta-isar/recipes-initramfs/initramfs-trixie-armhf-hook/initramfs-virtio-blk-hook_0.2.bb
@@ -0,0 +1,8 @@
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+require initramfs-missing-hook.inc
+
+MISSING_DRIVER = "virtio_blk"
--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:38 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
It looks like "all" package architecture of linux-libc-dev is a new
standard for Debian, while "any" is left only for older distro
versions.
Ubuntu still use separate packages for any distro even for the most
recent distros, so keep it to "any" for it.

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
meta/classes-recipe/linux-kernel.bbclass | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/meta/classes-recipe/linux-kernel.bbclass b/meta/classes-recipe/linux-kernel.bbclass
index fffdf12c..09323e57 100644
--- a/meta/classes-recipe/linux-kernel.bbclass
+++ b/meta/classes-recipe/linux-kernel.bbclass
@@ -38,8 +38,12 @@ KERNEL_DEBIAN_DEPENDS ?= "initramfs-tools | linux-initramfs-tool | dracut, \

KERNEL_HEADERS_DEBIAN_DEPENDS ?= ""

-KERNEL_LIBC_DEV_ARCH_ALL = "0"
-KERNEL_LIBC_DEV_ARCH_ALL:trixie = "1"
+KERNEL_LIBC_DEV_ARCH_ALL = "1"
+KERNEL_LIBC_DEV_ARCH_ALL:buster = "0"
+KERNEL_LIBC_DEV_ARCH_ALL:bullseye = "0"
+KERNEL_LIBC_DEV_ARCH_ALL:bookworm = "0"
+KERNEL_LIBC_DEV_ARCH_ALL:ubuntu = "0"
+
KERNEL_LIBC_DEV_DEPLOY ?= "0"

# Settings that may be changed on a per distro, machine or layer basis
--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:38 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
Debian Trixie is stable and no more covered with KFAIL, so no need in
test case separation.

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
testsuite/citest.py | 102 +++++++++++++++++++-------------------------
1 file changed, 45 insertions(+), 57 deletions(-)

diff --git a/testsuite/citest.py b/testsuite/citest.py
index 250c01c6..c46d4ca6 100644
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -258,6 +258,8 @@ class CrossTest(CIBaseTest):
'mc:qemuarm-buster:isar-image-ci',
'mc:qemuarm-bullseye:isar-image-ci',
'mc:qemuarm-bookworm:isar-image-ci',
+ 'mc:qemuamd64-trixie:isar-image-base',
+ 'mc:qemuarm64-trixie:isar-image-base',
'mc:qemuarm64-focal:isar-image-base',
'mc:nanopi-neo-efi-bookworm:isar-image-base',
]
@@ -361,24 +363,6 @@ class CrossTest(CIBaseTest):
script='test_systemd_unit.sh getty.target 10',
)

- def test_cross_debsrc(self):
- targets = [
- 'mc:qemuarm64-bookworm:isar-image-ci',
- ]
-
- self.init()
- # only build a single custom package to speedup test
- self.perform_build_test(targets, debsrc_cache=True, image_install='cowsay')
-
- def test_cross_trixie(self):
- targets = [
- 'mc:qemuamd64-trixie:isar-image-base',
- 'mc:qemuarm64-trixie:isar-image-base',
- ]
-
- self.init()
- self.perform_build_test(targets, cross=False)
-
def test_run_amd64_trixie(self):
"""
:avocado: tags=startvm
@@ -393,6 +377,15 @@ class CrossTest(CIBaseTest):
self.init()
self.vm_start('arm64', 'trixie')

+ def test_cross_debsrc(self):
+ targets = [
+ 'mc:qemuarm64-bookworm:isar-image-ci',
+ ]
+
+ self.init()
+ # only build a single custom package to speedup test
+ self.perform_build_test(targets, debsrc_cache=True, image_install='cowsay')
+
def test_cross_kselftest(self):
targets = [
'mc:qemuarm-buster:kselftest',
@@ -783,6 +776,10 @@ class NoCrossTest(CIBaseTest):
'mc:qemuamd64-iso-bookworm:isar-image-ci',
'mc:qemui386-bookworm:isar-image-base',
'mc:qemumipsel-bookworm:isar-image-ci',
+ 'mc:qemuamd64-trixie:isar-image-base',
+ 'mc:qemuarm64-trixie:isar-image-base',
+ 'mc:qemuarm-trixie:isar-image-base',
+ 'mc:qemuriscv64-trixie:isar-image-base',
'mc:hikey-bookworm:isar-image-base',
'mc:hikey-trixie:isar-image-base',
'mc:beagleplay-bookworm:isar-image-base',
@@ -968,6 +965,34 @@ class NoCrossTest(CIBaseTest):
script='test_kernel_module.sh example_module',
)

+ def test_run_arm_trixie(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('arm', 'trixie')
+
+ def test_run_arm64_trixie(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('arm64', 'trixie')
+
+ def test_run_amd64_trixie(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('amd64', 'trixie')
+
+ def test_run_riscv64_trixie(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('riscv64', 'trixie')
+
def test_run_amd64_bookworm_iso_base(self):
"""
:avocado: tags=startvm
@@ -1022,51 +1047,14 @@ class NoCrossTest(CIBaseTest):
self.init()
self.perform_build_test(targets, cross=False, debsrc_cache=True)

- def test_nocross_trixie(self):
- targets = [
- 'mc:qemuamd64-trixie:isar-image-base',
- 'mc:qemuarm64-trixie:isar-image-base',
- 'mc:qemuarm-trixie:isar-image-base',
- 'mc:qemuriscv64-trixie:isar-image-base',
- ]
-
- self.init()
- self.perform_build_test(targets, cross=False)
-
+ def test_nocross_riscv_trixie(self):
targets = [
'mc:sifive-fu540-trixie:isar-image-base',
'mc:starfive-visionfive2-trixie:isar-image-base',
]

- self.perform_build_test(targets, cross=False)
-
- def test_run_arm_trixie(self):
- """
- :avocado: tags=startvm
- """
- self.init()
- self.vm_start('arm', 'trixie')
-
- def test_run_arm64_trixie(self):
- """
- :avocado: tags=startvm
- """
- self.init()
- self.vm_start('arm64', 'trixie')
-
- def test_run_amd64_trixie(self):
- """
- :avocado: tags=startvm
- """
- self.init()
- self.vm_start('amd64', 'trixie')
-
- def test_run_riscv64_trixie(self):
- """
- :avocado: tags=startvm
- """
self.init()
- self.vm_start('riscv64', 'trixie')
+ self.perform_build_test(targets, cross=False)

def test_nocross_sid(self):
targets = [
--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:39 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
Startvm tests are now fast enough to run them for every targets built.

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
testsuite/citest.py | 76 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)

diff --git a/testsuite/citest.py b/testsuite/citest.py
index c46d4ca6..ff2f9ba4 100644
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -377,6 +377,13 @@ class CrossTest(CIBaseTest):
self.init()
self.vm_start('arm64', 'trixie')

+ def test_run_arm64_focal(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('arm64', 'focal')
+
def test_cross_debsrc(self):
targets = [
'mc:qemuarm64-bookworm:isar-image-ci',
@@ -800,6 +807,13 @@ class NoCrossTest(CIBaseTest):
self.init()
self.vm_start('arm', 'bullseye')

+ def test_run_arm64_bullseye(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('arm64', 'bullseye')
+
def test_run_arm_buster_base(self):
"""
:avocado: tags=startvm
@@ -871,6 +885,13 @@ class NoCrossTest(CIBaseTest):
self.init()
self.vm_start('i386', 'buster')

+ def test_run_i386_bullseye(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('i386', 'bullseye')
+
def test_run_amd64_buster_base(self):
"""
:avocado: tags=startvm
@@ -933,6 +954,13 @@ class NoCrossTest(CIBaseTest):
self.init()
self.vm_start('i386', 'bookworm')

+ def test_run_mipsel_bullseye(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('mipsel', 'bullseye')
+
def test_run_mipsel_bookworm_base(self):
"""
:avocado: tags=startvm
@@ -993,6 +1021,34 @@ class NoCrossTest(CIBaseTest):
self.init()
self.vm_start('riscv64', 'trixie')

+ def test_run_arm64_noble(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('arm64', 'noble')
+
+ def test_run_amd64_noble(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('amd64', 'noble')
+
+ def test_run_amd64_jammy(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('amd64', 'jammy')
+
+ def test_run_arm64_jammy(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('arm64', 'jammy')
+
def test_run_amd64_bookworm_iso_base(self):
"""
:avocado: tags=startvm
@@ -1068,6 +1124,26 @@ class NoCrossTest(CIBaseTest):
except exceptions.TestFail:
self.cancel('KFAIL')

+ def test_run_amd64_sid(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ try:
+ self.vm_start('amd64', 'sid')
+ except exceptions.TestFail:
+ self.cancel('KFAIL')
+
+ def test_run_arm64_sid(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ try:
+ self.vm_start('arm64', 'sid')
+ except exceptions.TestFail:
+ self.cancel('KFAIL')
+

class ContainerImageTest(CIBaseTest):

--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:40 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
Create AMD64, ARM64 and RISCV64 configurations and put them under fast
CI testsuite.

Test cases for the RISCV64 are covered with KFAIL since stability of
this architecture on Ubuntu is not known yet.

Startvm test case for ARM64 is currently broken because of moving this
target to UEFI, so mark it as TODO and cover with KFAIL for now.

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
kas/distro/Kconfig | 10 ++-
kas/distro/ubuntu-resolute.yaml | 9 +++
kas/machine/Kconfig | 4 ++
meta-isar/conf/distro/ubuntu-common.inc | 6 +-
.../conf/distro/ubuntu-resolute-ports.list | 6 ++
meta-isar/conf/distro/ubuntu-resolute.conf | 14 ++++
meta-isar/conf/distro/ubuntu-resolute.list | 6 ++
meta-isar/conf/machine/qemuarm64.conf | 8 +--
meta-isar/conf/machine/qemuriscv64.conf | 3 +-
meta-isar/conf/mc.conf | 3 +
.../conf/multiconfig/qemuamd64-resolute.conf | 7 ++
.../conf/multiconfig/qemuarm64-resolute.conf | 7 ++
.../multiconfig/qemuriscv64-resolute.conf | 7 ++
testsuite/citest.py | 64 ++++++++++++++++++-
testsuite/data/targets.yml | 6 ++
testsuite/start_vm.py | 5 +-
16 files changed, 155 insertions(+), 10 deletions(-)
create mode 100644 kas/distro/ubuntu-resolute.yaml
create mode 100644 meta-isar/conf/distro/ubuntu-resolute-ports.list
create mode 100644 meta-isar/conf/distro/ubuntu-resolute.conf
create mode 100644 meta-isar/conf/distro/ubuntu-resolute.list
create mode 100644 meta-isar/conf/multiconfig/qemuamd64-resolute.conf
create mode 100644 meta-isar/conf/multiconfig/qemuarm64-resolute.conf
create mode 100644 meta-isar/conf/multiconfig/qemuriscv64-resolute.conf

diff --git a/kas/distro/Kconfig b/kas/distro/Kconfig
index e819ab70..9dadc52e 100644
--- a/kas/distro/Kconfig
+++ b/kas/distro/Kconfig
@@ -1,5 +1,5 @@
# This software is a part of Isar.
-# Copyright (C) 2023-2024 ilbers GmbH
+# Copyright (C) 2023-2026 ilbers GmbH
#
# SPDX-License-Identifier: MIT
#
@@ -44,6 +44,9 @@ config CODENAME_JAMMY
config CODENAME_NOBLE
bool

+config CODENAME_RESOLUTE
+ bool
+
choice
prompt "Distro selection"
default DEBIAN_TRIXIE
@@ -92,6 +95,10 @@ config UBUNTU_NOBLE
bool "Ubuntu 24.04 (Noble)"
depends on (DISTRO_UBUNTU && CODENAME_NOBLE) || ANY_MACHINE_DISTRO

+config UBUNTU_RESOLUTE
+ bool "Ubuntu 26.04 (Resolute)"
+ depends on (DISTRO_UBUNTU && CODENAME_RESOLUTE) || ANY_MACHINE_DISTRO
+
endchoice

config ANY_MACHINE_DISTRO
@@ -114,5 +121,6 @@ config KAS_INCLUDE_DISTRO
default "kas/distro/ubuntu-focal.yaml" if UBUNTU_FOCAL
default "kas/distro/ubuntu-jammy.yaml" if UBUNTU_JAMMY
default "kas/distro/ubuntu-noble.yaml" if UBUNTU_NOBLE
+ default "kas/distro/ubuntu-resolute.yaml" if UBUNTU_RESOLUTE

endmenu
diff --git a/kas/distro/ubuntu-resolute.yaml b/kas/distro/ubuntu-resolute.yaml
new file mode 100644
index 00000000..fb643862
--- /dev/null
+++ b/kas/distro/ubuntu-resolute.yaml
@@ -0,0 +1,9 @@
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+header:
+ version: 14
+
+distro: ubuntu-resolute
diff --git a/kas/machine/Kconfig b/kas/machine/Kconfig
index 6151716a..04881a4b 100644
--- a/kas/machine/Kconfig
+++ b/kas/machine/Kconfig
@@ -123,6 +123,7 @@ config MACHINE_QEMU_AMD64
select CODENAME_FOCAL
select CODENAME_JAMMY
select CODENAME_NOBLE
+ select CODENAME_RESOLUTE
select ARCH_AMD64

config MACHINE_QEMU_ARM
@@ -145,6 +146,7 @@ config MACHINE_QEMU_ARM64
select CODENAME_FOCAL
select CODENAME_JAMMY
select CODENAME_NOBLE
+ select CODENAME_RESOLUTE
select ARCH_ARM64

config MACHINE_QEMU_I386
@@ -167,6 +169,8 @@ config MACHINE_QEMU_RISCV64
select DISTRO_DEBIAN
select CODENAME_TRIXIE
select CODENAME_SID
+ select DISTRO_UBUNTU
+ select CODENAME_RESOLUTE
select ARCH_RISCV64

config MACHINE_RPI_ARM_V7
diff --git a/meta-isar/conf/distro/ubuntu-common.inc b/meta-isar/conf/distro/ubuntu-common.inc
index 8b9964c8..1ee9bb84 100644
--- a/meta-isar/conf/distro/ubuntu-common.inc
+++ b/meta-isar/conf/distro/ubuntu-common.inc
@@ -1,5 +1,6 @@
-#
+# This software is a part of Isar.
# Copyright (c) Siemens AG, 2018-2023
+# Copyright (C) 2023-2024 ilbers GmbH
#
# SPDX-License-Identifier: MIT

@@ -12,6 +13,9 @@ HOST_BASE_DISTRO = "${BASE_DISTRO}"
DISTRO_APT_SOURCES:arm64 ?= "conf/distro/${BASE_DISTRO}-${BASE_DISTRO_CODENAME}-ports.list"
HOST_DISTRO_APT_SOURCES:arm64 ?= "conf/distro/${HOST_DISTRO}.list conf/distro/${HOST_DISTRO}-ports.list"

+DISTRO_APT_SOURCES:riscv64 ?= "conf/distro/${BASE_DISTRO}-${BASE_DISTRO_CODENAME}-ports.list"
+HOST_DISTRO_APT_SOURCES:riscv64 ?= "conf/distro/${HOST_DISTRO}.list conf/distro/${HOST_DISTRO}-ports.list"
+
BOOTSTRAP_KEY = "file://${LAYERDIR_isar}/conf/distro/ubuntu.public.key;sha256sum=36a38199a4bf4eae1e7f574891f7dfcb79b91b87a33a499383265e1224b5e989"
DISTRO_BOOTSTRAP_KEYS += "${BOOTSTRAP_KEY}"
HOST_DISTRO_BOOTSTRAP_KEYS += "${BOOTSTRAP_KEY}"
diff --git a/meta-isar/conf/distro/ubuntu-resolute-ports.list b/meta-isar/conf/distro/ubuntu-resolute-ports.list
new file mode 100644
index 00000000..239cafe6
--- /dev/null
+++ b/meta-isar/conf/distro/ubuntu-resolute-ports.list
@@ -0,0 +1,6 @@
+deb [arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute main restricted universe multiverse
+deb-src [arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute main restricted universe multiverse
+deb [arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute-updates main restricted universe multiverse
+deb-src [arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute-updates main restricted universe multiverse
+deb [arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute-security main restricted universe multiverse
+deb-src [arch=armhf,arm64,riscv64] http://ports.ubuntu.com/ubuntu-ports resolute-security main restricted universe multiverse
diff --git a/meta-isar/conf/distro/ubuntu-resolute.conf b/meta-isar/conf/distro/ubuntu-resolute.conf
new file mode 100644
index 00000000..141f438f
--- /dev/null
+++ b/meta-isar/conf/distro/ubuntu-resolute.conf
@@ -0,0 +1,14 @@
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+require conf/distro/ubuntu-common.inc
+
+BASE_DISTRO_CODENAME = "resolute"
+
+DISTRO_GCC = "15"
+
+DEBIAN_COMPAT = "13"
+
+DEBIAN_STANDARDS_VERSION ?= "4.7.4"
diff --git a/meta-isar/conf/distro/ubuntu-resolute.list b/meta-isar/conf/distro/ubuntu-resolute.list
new file mode 100644
index 00000000..65dcc81e
--- /dev/null
+++ b/meta-isar/conf/distro/ubuntu-resolute.list
@@ -0,0 +1,6 @@
+deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute main restricted universe multiverse
+deb-src [arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute main restricted universe multiverse
+deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute-updates main restricted universe multiverse
+deb-src [arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute-updates main restricted universe multiverse
+deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute-security main restricted universe multiverse
+deb-src [arch=amd64,i386] http://archive.ubuntu.com/ubuntu resolute-security main restricted universe multiverse
diff --git a/meta-isar/conf/machine/qemuarm64.conf b/meta-isar/conf/machine/qemuarm64.conf
index 0cc7457c..4b76e5c1 100644
--- a/meta-isar/conf/machine/qemuarm64.conf
+++ b/meta-isar/conf/machine/qemuarm64.conf
@@ -1,12 +1,12 @@
# This software is a part of Isar.
-# Copyright (C) 2015-2017 ilbers GmbH
+# Copyright (C) 2015-2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT

DISTRO_ARCH ?= "arm64"

KERNEL_NAME ?= "arm64"
-KERNEL_NAME:ubuntu-focal ?= "generic"
-KERNEL_NAME:ubuntu-jammy ?= "generic"
-KERNEL_NAME:ubuntu-noble ?= "generic"
+KERNEL_NAME:ubuntu ?= "generic"

IMAGE_FSTYPES ?= "ext4"
ROOTFS_EXTRA ?= "128"
diff --git a/meta-isar/conf/machine/qemuriscv64.conf b/meta-isar/conf/machine/qemuriscv64.conf
index f2a32b8e..a2a5de9b 100644
--- a/meta-isar/conf/machine/qemuriscv64.conf
+++ b/meta-isar/conf/machine/qemuriscv64.conf
@@ -1,5 +1,5 @@
# This software is a part of Isar.
-# Copyright (C) 2015-2017 ilbers GmbH
+# Copyright (C) 2015-2026 ilbers GmbH
# Copyright (c) Siemens AG, 2020
#
# SPDX-License-Identifier: MIT
@@ -7,6 +7,7 @@
DISTRO_ARCH ?= "riscv64"

KERNEL_NAME ?= "riscv64"
+KERNEL_NAME:ubuntu ?= "generic"

IMAGE_FSTYPES ?= "ext4"
ROOTFS_EXTRA ?= "128"
diff --git a/meta-isar/conf/mc.conf b/meta-isar/conf/mc.conf
index 6c7d7840..6f9ac7df 100644
--- a/meta-isar/conf/mc.conf
+++ b/meta-isar/conf/mc.conf
@@ -72,9 +72,12 @@ BBMULTICONFIG = " \
qemuarm64-focal \
qemuarm64-jammy \
qemuarm64-noble \
+ qemuarm64-resolute \
qemuamd64-focal \
qemuamd64-jammy \
qemuamd64-noble \
+ qemuamd64-resolute \
qemuamd64-sid \
qemuarm64-sid \
+ qemuriscv64-resolute \
"
diff --git a/meta-isar/conf/multiconfig/qemuamd64-resolute.conf b/meta-isar/conf/multiconfig/qemuamd64-resolute.conf
new file mode 100644
index 00000000..8c997f89
--- /dev/null
+++ b/meta-isar/conf/multiconfig/qemuamd64-resolute.conf
@@ -0,0 +1,7 @@
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+MACHINE ?= "qemuamd64"
+DISTRO ?= "ubuntu-resolute"
diff --git a/meta-isar/conf/multiconfig/qemuarm64-resolute.conf b/meta-isar/conf/multiconfig/qemuarm64-resolute.conf
new file mode 100644
index 00000000..cdb25642
--- /dev/null
+++ b/meta-isar/conf/multiconfig/qemuarm64-resolute.conf
@@ -0,0 +1,7 @@
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+MACHINE ?= "qemuarm64"
+DISTRO ?= "ubuntu-resolute"
diff --git a/meta-isar/conf/multiconfig/qemuriscv64-resolute.conf b/meta-isar/conf/multiconfig/qemuriscv64-resolute.conf
new file mode 100644
index 00000000..4f2c6b9e
--- /dev/null
+++ b/meta-isar/conf/multiconfig/qemuriscv64-resolute.conf
@@ -0,0 +1,7 @@
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+MACHINE ?= "qemuriscv64"
+DISTRO ?= "ubuntu-resolute"
diff --git a/testsuite/citest.py b/testsuite/citest.py
index ff2f9ba4..5975b2cc 100644
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
#
# This software is a part of Isar.
-# Copyright (C) 2022-2025 ilbers GmbH
+# Copyright (C) 2022-2026 ilbers GmbH
# Copyright (C) 2022-2025 Siemens AG
#
# SPDX-License-Identifier: MIT
@@ -262,6 +262,8 @@ class CrossTest(CIBaseTest):
'mc:qemuarm64-trixie:isar-image-base',
'mc:qemuarm64-focal:isar-image-base',
'mc:nanopi-neo-efi-bookworm:isar-image-base',
+ 'mc:qemuarm64-resolute:isar-image-base',
+ 'mc:qemuamd64-resolute:isar-image-base',
]

self.init()
@@ -384,6 +386,42 @@ class CrossTest(CIBaseTest):
self.init()
self.vm_start('arm64', 'focal')

+ # TODO: broken because of moving to UEFI
+ def test_run_arm64_resolute(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ try:
+ self.vm_start('arm64', 'resolute')
+ except exceptions.TestFail:
+ self.cancel('KFAIL')
+
+ def test_run_amd64_resolute(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ self.vm_start('amd64', 'resolute')
+
+ def test_cross_debsrc(self):
+ targets = [
+ 'mc:qemuarm64-bookworm:isar-image-ci',
+ ]
+
+ self.init()
+ # only build a single custom package to speedup test
+ self.perform_build_test(targets, debsrc_cache=True, image_install='cowsay')
+
+ def test_cross_trixie(self):
+ targets = [
+ 'mc:qemuamd64-trixie:isar-image-base',
+ 'mc:qemuarm64-trixie:isar-image-base',
+ ]
+
+ self.init()
+ self.perform_build_test(targets, cross=False)
+
def test_cross_debsrc(self):
targets = [
'mc:qemuarm64-bookworm:isar-image-ci',
@@ -430,6 +468,30 @@ class CrossTest(CIBaseTest):
self.perform_build_test(targets, lines=lines,
image_install=image_install)

+ def test_cross_riscv64(self):
+ """
+ :avocado: tags=riscv64
+ """
+ targets = [
+ 'mc:qemuriscv64-resolute:isar-image-ci',
+ ]
+
+ self.init()
+ try:
+ self.perform_build_test(targets)
+ except exceptions.TestFail:
+ self.cancel('KFAIL')
+
+ def test_run_riscv64_resolute(self):
+ """
+ :avocado: tags=startvm,riscv64
+ """
+ self.init()
+ try:
+ self.vm_start('riscv64', 'resolute', image='isar-image-ci')
+ except exceptions.TestFail:
+ self.cancel('KFAIL')
+
def test_cross_mira_trixie(self):
targets = [
'mc:phyboard-mira-trixie:isar-image-base',
diff --git a/testsuite/data/targets.yml b/testsuite/data/targets.yml
index e7b112d9..f480d034 100644
--- a/testsuite/data/targets.yml
+++ b/testsuite/data/targets.yml
@@ -127,16 +127,22 @@ a: !mux
name: qemuarm64-jammy
qemuarm64-noble:
name: qemuarm64-noble
+ qemuarm64-resolute:
+ name: qemuarm64-resolute
qemuamd64-focal:
name: qemuamd64-focal
qemuamd64-jammy:
name: qemuamd64-jammy
qemuamd64-noble:
name: qemuamd64-noble
+ qemuamd64-resolute:
+ name: qemuamd64-resolute
qemuamd64-sid:
name: qemuamd64-sid
qemuarm64-sid:
name: qemuarm64-sid
+ qemuriscv64-resolute:
+ name: qemuriscv64-resolute
b: !mux
base:
image: isar-image-base
diff --git a/testsuite/start_vm.py b/testsuite/start_vm.py
index 8e28f11b..15d5ed5c 100755
--- a/testsuite/start_vm.py
+++ b/testsuite/start_vm.py
@@ -48,7 +48,7 @@ def format_qemu_cmdline(
extra_args = ''

image_type = image_fstypes.split()[0]
- base = 'ubuntu' if distro in ['jammy', 'focal', 'noble'] else 'debian'
+ base = 'ubuntu' if distro in ['jammy', 'focal', 'noble', 'resolute'] else 'debian'

rootfs_image = f"{image}-{base}-{distro}-qemu{arch}.{image_type}"

@@ -148,7 +148,7 @@ def start_qemu(arch, build, distro, image, out, pid, enforce_pcbios):

def parse_args():
parser = argparse.ArgumentParser()
- arch_names = ['arm', 'arm64', 'amd64', 'amd64-sb', 'amd64-cip', 'amd64-iso', 'i386', 'mipsel']
+ arch_names = ['arm', 'arm64', 'amd64', 'amd64-sb', 'amd64-cip', 'amd64-iso', 'i386', 'mipsel', 'riscv64']
distro_names = [
'buster',
'bullseye',
@@ -157,6 +157,7 @@ def parse_args():
'focal',
'jammy',
'noble',
+ 'resolute',
]
parser.add_argument(
'-a',
--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:40 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
Add multiconfigs and cover them in fast CI (with KFAIL because this
distro is in testing state).

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
meta-isar/conf/mc.conf | 2 ++
.../conf/multiconfig/qemuamd64-forky.conf | 7 ++++
.../conf/multiconfig/qemuarm64-forky.conf | 7 ++++
testsuite/citest.py | 32 +++++++++++++++++++
testsuite/data/targets.yml | 4 +++
5 files changed, 52 insertions(+)
create mode 100644 meta-isar/conf/multiconfig/qemuamd64-forky.conf
create mode 100644 meta-isar/conf/multiconfig/qemuarm64-forky.conf

diff --git a/meta-isar/conf/mc.conf b/meta-isar/conf/mc.conf
index 6f9ac7df..72ebceaf 100644
--- a/meta-isar/conf/mc.conf
+++ b/meta-isar/conf/mc.conf
@@ -16,6 +16,7 @@ BBMULTICONFIG = " \
qemuarm64-bullseye \
qemuarm64-bookworm \
qemuarm64-trixie \
+ qemuarm64-forky \
qemui386-buster \
qemui386-bullseye \
qemui386-bookworm \
@@ -26,6 +27,7 @@ BBMULTICONFIG = " \
qemuamd64-cip-bookworm \
qemuamd64-iso-bookworm \
qemuamd64-trixie \
+ qemuamd64-forky \
container-amd64-buster \
container-amd64-bullseye \
container-amd64-bookworm \
diff --git a/meta-isar/conf/multiconfig/qemuamd64-forky.conf b/meta-isar/conf/multiconfig/qemuamd64-forky.conf
new file mode 100644
index 00000000..5088433e
--- /dev/null
+++ b/meta-isar/conf/multiconfig/qemuamd64-forky.conf
@@ -0,0 +1,7 @@
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+MACHINE ?= "qemuamd64"
+DISTRO ?= "debian-forky"
diff --git a/meta-isar/conf/multiconfig/qemuarm64-forky.conf b/meta-isar/conf/multiconfig/qemuarm64-forky.conf
new file mode 100644
index 00000000..46f73fa9
--- /dev/null
+++ b/meta-isar/conf/multiconfig/qemuarm64-forky.conf
@@ -0,0 +1,7 @@
+# This software is a part of Isar.
+# Copyright (C) 2026 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+MACHINE ?= "qemuarm64"
+DISTRO ?= "debian-forky"
diff --git a/testsuite/citest.py b/testsuite/citest.py
index bed3e55d..1facc8c2 100644
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -503,6 +503,38 @@ class CrossTest(CIBaseTest):
except exceptions.TestFail:
self.cancel('KFAIL')

+ def test_cross_forky(self):
+ targets = [
+ 'mc:qemuamd64-forky:isar-image-ci',
+ 'mc:qemuarm64-forky:isar-image-ci',
+ ]
+
+ self.init()
+ try:
+ self.perform_build_test(targets)
+ except exceptions.TestFail:
+ self.cancel('KFAIL')
+
+ def test_run_amd64_forky(self):
+ """
+ :avocado: tags=startvm
+ """
+ self.init()
+ try:
+ self.vm_start('amd64', 'forky', image='isar-image-ci')
+ except exceptions.TestFail:
+ self.cancel('KFAIL')
+
+ def test_run_arm64_forky(self):
+ """
+ :avocado: tags=startvm,riscv64
+ """
+ self.init()
+ try:
+ self.vm_start('arm64', 'forky', image='isar-image-ci')
+ except exceptions.TestFail:
+ self.cancel('KFAIL')
+
def test_cross_mira_trixie(self):
targets = [
'mc:phyboard-mira-trixie:isar-image-base',
diff --git a/testsuite/data/targets.yml b/testsuite/data/targets.yml
index f480d034..64380620 100644
--- a/testsuite/data/targets.yml
+++ b/testsuite/data/targets.yml
@@ -15,6 +15,8 @@ a: !mux
name: qemuarm64-bookworm
qemuarm64-trixie:
name: qemuarm64-trixie
+ qemuarm64-forky:
+ name: qemuarm64-forky
qemui386-buster:
name: qemui386-buster
qemui386-bullseye:
@@ -35,6 +37,8 @@ a: !mux
name: qemuamd64-iso-bookworm
qemuamd64-trixie:
name: qemuamd64-trixie
+ qemuamd64-forky:
+ name: qemuamd64-forky
container-amd64-buster:
name: container-amd64-buster
container-amd64-bullseye:
--
2.34.1

Anton Mikanovich

unread,
Jun 29, 2026, 5:46:41 AM (21 hours ago) Jun 29
to isar-...@googlegroups.com, Anton Mikanovich
It was already added before but was not tested, so add it under fast CI
testsuite.

Since stability of RISCV64 targets is not proofed, don't mark complete
CI as failed if those tests fail.

Signed-off-by: Anton Mikanovich <ami...@ilbers.de>
---
testsuite/citest.py | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/testsuite/citest.py b/testsuite/citest.py
index 5975b2cc..bed3e55d 100644
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -473,6 +473,7 @@ class CrossTest(CIBaseTest):
:avocado: tags=riscv64
"""
targets = [
+ 'mc:qemuriscv64-trixie:isar-image-ci',
'mc:qemuriscv64-resolute:isar-image-ci',
]

@@ -482,6 +483,16 @@ class CrossTest(CIBaseTest):
except exceptions.TestFail:
self.cancel('KFAIL')

+ def test_run_riscv64_trixie(self):
+ """
+ :avocado: tags=startvm,riscv64
+ """
+ self.init()
+ try:
+ self.vm_start('riscv64', 'trixie', image='isar-image-ci')
+ except exceptions.TestFail:
+ self.cancel('KFAIL')
+
def test_run_riscv64_resolute(self):
"""
:avocado: tags=startvm,riscv64
--
2.34.1

Reply all
Reply to author
Forward
0 new messages