Mount(json, "/work/config.json", ro=True),
Mount(context.root, "/buildroot"),
Mount(context.artifacts, "/work/artifacts"),
- Mount(context.repository, "/work/packages"),
+ Mount(context.packages, "/work/packages"),
*context.config.distribution.package_manager(context.config).mounts(context),
],
options=["--dir", "/work/src", "--chdir", "/work/src"],
Mount(context.install_dir, "/work/dest"),
Mount(context.staging, "/work/out"),
Mount(context.artifacts, "/work/artifacts"),
- Mount(context.repository, "/work/packages"),
+ Mount(context.packages, "/work/packages"),
*(
[Mount(context.config.build_dir, "/work/build")]
if context.config.build_dir
),
)
- if context.want_local_repo() and context.config.output_format != OutputFormat.none:
- with complete_step("Rebuilding local package repository"):
- context.config.distribution.createrepo(context)
-
def run_postinst_scripts(context: Context) -> None:
if not context.config.postinst_scripts:
Mount(context.root, "/buildroot"),
Mount(context.staging, "/work/out"),
Mount(context.artifacts, "/work/artifacts"),
- Mount(context.repository, "/work/packages"),
+ Mount(context.packages, "/work/packages"),
*context.config.distribution.package_manager(context.config).mounts(context),
],
options=["--dir", "/work/src", "--chdir", "/work/src"],
Mount(context.root, "/buildroot"),
Mount(context.staging, "/work/out"),
Mount(context.artifacts, "/work/artifacts"),
- Mount(context.repository, "/work/packages"),
+ Mount(context.packages, "/work/packages"),
*context.config.distribution.package_manager(context.config).mounts(context),
],
options=["--dir", "/work/src", "--chdir", "/work/src"],
install_tree(context.config, tree.source, context.pkgmngr, target=tree.target, preserve=False)
-def install_package_directories(context: Context) -> None:
- if not context.config.package_directories:
+def install_package_directories(context: Context, directories: Sequence[Path]) -> None:
+ directories = [d for d in directories if any(d.iterdir())]
+
+ if not directories:
return
with complete_step("Copying in extra packages…"):
- for d in context.config.package_directories:
+ for d in directories:
for p in itertools.chain(*(d.glob(glob) for glob in PACKAGE_GLOBS)):
shutil.copy(p, context.repository, follow_symlinks=True)
- if context.want_local_repo():
- with complete_step("Building local package repository"):
- context.config.distribution.createrepo(context)
-
def install_extra_trees(context: Context) -> None:
if not context.config.extra_trees:
"--acl", str(config.acl),
*(f"--package={package}" for package in config.initrd_packages),
*(f"--volatile-package={package}" for package in config.initrd_volatile_packages),
- *(["--package-directory", str(package_dir)] if package_dir else []),
+ *(f"--package-directory={d}" for d in config.package_directories),
+ *(f"--volatile-package-directory={d}" for d in config.volatile_package_directories),
+ *([f"--volatile-package-directory={package_dir}"] if package_dir else []),
"--output", "initrd",
*(["--image-id", config.image_id] if config.image_id else []),
*(["--image-version", config.image_version] if config.image_version else []),
context.config,
resources=context.resources,
output_dir=context.workspace,
- package_dir=context.repository,
+ package_dir=context.packages,
)
assert config.output_dir
sandbox=sandbox,
)
+@contextlib.contextmanager
+def createrepo(context: Context) -> Iterator[None]:
+ st = context.repository.stat()
+ try:
+ yield
+ finally:
+ if context.repository.stat().st_mtime_ns != st.st_mtime_ns:
+ with complete_step("Rebuilding local package repository"):
+ context.config.distribution.createrepo(context)
+
def build_image(context: Context) -> None:
manifest = Manifest(context) if context.config.manifest_format else None
copy_repository_metadata(context)
context.config.distribution.setup(context)
- install_package_directories(context)
+ with createrepo(context):
+ install_package_directories(context, context.config.package_directories)
if not cached:
install_skeleton_trees(context)
rmtree(context.root)
return
+ with createrepo(context):
+ install_package_directories(context, context.config.volatile_package_directories)
+ install_package_directories(context, [context.packages])
+
install_volatile_packages(context)
install_build_dest(context)
install_extra_trees(context)