[v9,07/13] testsuite: Set ISAR_PREFETCH_BASE_APT by default

Message ID 20260820133934.383231-8-akarpovich@ilbers.de
State Under Review
Headers show
Series Improving base-apt usage | expand

Commit Message

Aliaksei Karpovich Aug. 20, 2026, 1:29 p.m. UTC
From: Uladzimir Bely <ubely@ilbers.de>

This makes Isar use `base-apt` repo in different way. Any package
installation is done from `base-apt` repo which is prepopulated
from external mirrors.

This behaviour is disabled by default for downstreams. To enable it,
set the variable to "1", like isar does in local.conf.sample.

In order to be able to run CI in old mode, allow CI read the option
from the environment. Also, adjust some tests (like repro one) to
make them work with ISAR_PREFETCH_BASE_APT set.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta-test/conf/local.conf.sample | 3 +++
 testsuite/cibase.py              | 4 ++++
 testsuite/cibuilder.py           | 7 +++++++
 3 files changed, 14 insertions(+)

Comments

Felix Moessbauer Aug. 20, 2026, 2:01 p.m. UTC | #1
On Thu, 2026-08-20 at 15:29 +0200, Aliaksei Karpovich wrote:
> From: Uladzimir Bely <ubely@ilbers.de>
> 
> This makes Isar use `base-apt` repo in different way. Any package
> installation is done from `base-apt` repo which is prepopulated
> from external mirrors.
> 
> This behaviour is disabled by default for downstreams. To enable it,
> set the variable to "1", like isar does in local.conf.sample.
> 
> In order to be able to run CI in old mode, allow CI read the option
> from the environment. Also, adjust some tests (like repro one) to
> make them work with ISAR_PREFETCH_BASE_APT set.
> 
> Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
> ---
>  meta-test/conf/local.conf.sample | 3 +++
>  testsuite/cibase.py              | 4 ++++
>  testsuite/cibuilder.py           | 7 +++++++
>  3 files changed, 14 insertions(+)
> 
> diff --git a/meta-test/conf/local.conf.sample b/meta-test/conf/local.conf.sample
> index 2dbe28f1..74ee90b1 100644
> --- a/meta-test/conf/local.conf.sample
> +++ b/meta-test/conf/local.conf.sample
> @@ -27,6 +27,9 @@ BB_DISKMON_DIRS = "\
>  MIRRORS ?= "git?://salsa\.debian\.org/debian/.* git://github.com/ilbers/BASENAME"
>  MIRRORS += "https?://cdn\.kernel\.org/.* https://mirrors.edge.kernel.org/PATH"
>  
> +# Use new base-apt behaviour
> +ISAR_PREFETCH_BASE_APT ?= "1"
> +
>  # Users and groups
>  USERS += "root"
>  USER_root[password] ??= "$6$rounds=10000$RXeWrnFmkY$DtuS/OmsAS2cCEDo0BF5qQsizIrq6jPgXnwv3PHqREJeKd1sXdHX/ayQtuQWVDHe0KIO0/sVH8dvQm1KthF0d/"
> diff --git a/testsuite/cibase.py b/testsuite/cibase.py
> index 033b3b19..835593df 100755
> --- a/testsuite/cibase.py
> +++ b/testsuite/cibase.py
> @@ -81,10 +81,14 @@ class CIBaseTest(CIBuilder):
>              self.fail("GPG import failed")
>  
>          try:
> +            self.move_in_build_dir('tmp', 'tmp_before_repro')
>              self.bitbake(targets, **kwargs)
>  
>              repro_type = 'signed' if signed else 'unsigned'
>              self.move_in_build_dir('tmp', f"tmp_middle_repro_{repro_type}")
> +
> +            os.makedirs(f"{self.build_dir}/tmp/deploy/")
> +            self.move_in_build_dir(f"tmp_middle_repro_{repro_type}/deploy/base-apt", 'tmp/deploy/base-apt')
>              self.configure(
>                  targets=targets,
>                  gpg_pub_key=gpg_pub_key if signed else None,
> diff --git a/testsuite/cibuilder.py b/testsuite/cibuilder.py
> index 1d415084..ca75f2e1 100755
> --- a/testsuite/cibuilder.py
> +++ b/testsuite/cibuilder.py
> @@ -174,6 +174,10 @@ class CIBuilder(Test):
>          fail_on_cleanup = os.getenv('ISAR_FAIL_ON_CLEANUP')
>  
>          strlines = None if lines is None else '\\n'.join(lines)
> +
> +        # get prefetch base apt mode from environment
> +        prefetch_base_apt = os.getenv('ISAR_PREFETCH_BASE_APT')

Why from the environment and not from an avocado parameter as the other
params (like rootless, sstate)?

> +
>          self.log.info(
>              f"===================================================\n"
>              f"Configuring build_dir {self.build_dir}\n"
> @@ -197,6 +201,7 @@ class CIBuilder(Test):
>              f"  generate_sbom = {generate_sbom}\n"
>              f"  rootless = {rootless}\n"
>              f"  lines = {strlines}\n"
> +            f"  prefetch_base_apt = {prefetch_base_apt}\n"
>              f"==================================================="
>          )
>  
> @@ -305,6 +310,8 @@ class CIBuilder(Test):
>                  f.write('ISAR_ROOTLESS = "1"\n')
>              if lines is not None:
>                  f.writelines((line + '\n' if not line.endswith('\n') else line) for line in lines)
> +            if prefetch_base_apt == "0":
> +                f.write('ISAR_PREFETCH_BASE_APT = "0"\n')

Shouldn't it be the other way round? Just set this variable to 1 if
enabled?

Felix

>  
>          # include ci_build.conf in local.conf
>          with open(self.build_dir + '/conf/local.conf', 'r+') as f:
> --
> 2.43.0
> 
> --
> You received this message because you are subscribed to the Google Groups "isar-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com.
> To view this discussion visit https://groups.google.com/d/msgid/isar-users/20260820133934.383231-8-akarpovich%40ilbers.de.

Patch

diff --git a/meta-test/conf/local.conf.sample b/meta-test/conf/local.conf.sample
index 2dbe28f1..74ee90b1 100644
--- a/meta-test/conf/local.conf.sample
+++ b/meta-test/conf/local.conf.sample
@@ -27,6 +27,9 @@  BB_DISKMON_DIRS = "\
 MIRRORS ?= "git?://salsa\.debian\.org/debian/.* git://github.com/ilbers/BASENAME"
 MIRRORS += "https?://cdn\.kernel\.org/.* https://mirrors.edge.kernel.org/PATH"
 
+# Use new base-apt behaviour
+ISAR_PREFETCH_BASE_APT ?= "1"
+
 # Users and groups
 USERS += "root"
 USER_root[password] ??= "$6$rounds=10000$RXeWrnFmkY$DtuS/OmsAS2cCEDo0BF5qQsizIrq6jPgXnwv3PHqREJeKd1sXdHX/ayQtuQWVDHe0KIO0/sVH8dvQm1KthF0d/"
diff --git a/testsuite/cibase.py b/testsuite/cibase.py
index 033b3b19..835593df 100755
--- a/testsuite/cibase.py
+++ b/testsuite/cibase.py
@@ -81,10 +81,14 @@  class CIBaseTest(CIBuilder):
             self.fail("GPG import failed")
 
         try:
+            self.move_in_build_dir('tmp', 'tmp_before_repro')
             self.bitbake(targets, **kwargs)
 
             repro_type = 'signed' if signed else 'unsigned'
             self.move_in_build_dir('tmp', f"tmp_middle_repro_{repro_type}")
+
+            os.makedirs(f"{self.build_dir}/tmp/deploy/")
+            self.move_in_build_dir(f"tmp_middle_repro_{repro_type}/deploy/base-apt", 'tmp/deploy/base-apt')
             self.configure(
                 targets=targets,
                 gpg_pub_key=gpg_pub_key if signed else None,
diff --git a/testsuite/cibuilder.py b/testsuite/cibuilder.py
index 1d415084..ca75f2e1 100755
--- a/testsuite/cibuilder.py
+++ b/testsuite/cibuilder.py
@@ -174,6 +174,10 @@  class CIBuilder(Test):
         fail_on_cleanup = os.getenv('ISAR_FAIL_ON_CLEANUP')
 
         strlines = None if lines is None else '\\n'.join(lines)
+
+        # get prefetch base apt mode from environment
+        prefetch_base_apt = os.getenv('ISAR_PREFETCH_BASE_APT')
+
         self.log.info(
             f"===================================================\n"
             f"Configuring build_dir {self.build_dir}\n"
@@ -197,6 +201,7 @@  class CIBuilder(Test):
             f"  generate_sbom = {generate_sbom}\n"
             f"  rootless = {rootless}\n"
             f"  lines = {strlines}\n"
+            f"  prefetch_base_apt = {prefetch_base_apt}\n"
             f"==================================================="
         )
 
@@ -305,6 +310,8 @@  class CIBuilder(Test):
                 f.write('ISAR_ROOTLESS = "1"\n')
             if lines is not None:
                 f.writelines((line + '\n' if not line.endswith('\n') else line) for line in lines)
+            if prefetch_base_apt == "0":
+                f.write('ISAR_PREFETCH_BASE_APT = "0"\n')
 
         # include ci_build.conf in local.conf
         with open(self.build_dir + '/conf/local.conf', 'r+') as f: