diff --git a/docs/how-to/code/install-slice/rockcraft.yaml b/docs/how-to/code/install-slice/rockcraft.yaml index 805995bda..c4b0a8755 100644 --- a/docs/how-to/code/install-slice/rockcraft.yaml +++ b/docs/how-to/code/install-slice/rockcraft.yaml @@ -14,5 +14,7 @@ parts: plugin: nil source: chisel-releases/ source-type: local + build-snaps: + - "chisel/latest/candidate" override-build: chisel cut --release ./ --root ${CRAFT_PART_INSTALL} openssl_bins diff --git a/rockcraft/services/lifecycle.py b/rockcraft/services/lifecycle.py index 10639f877..aba1b5ec0 100644 --- a/rockcraft/services/lifecycle.py +++ b/rockcraft/services/lifecycle.py @@ -45,14 +45,25 @@ def setup(self) -> None: # This inner import is necessary to resolve a cyclic import from rockcraft.services import RockcraftServiceFactory + # this will be removed once part_has_slices is added to craft-parts + def part_has_slices(data: dict[str, Any]) -> bool: + stage_packages = data.get("stage-packages", []) + return any(name for name in stage_packages if "_" in name) + # Configure extra args to the LifecycleManager project = cast(Project, self._project) project_vars = {"version": project.version} + parts = project.parts services = cast(RockcraftServiceFactory, self._services) image_service = services.image image_info = image_service.obtain_image() + needs_chisel = any(part for part in parts if part_has_slices(parts[part])) + if needs_chisel: + self._manager_kwargs.update( + extra_build_snaps=["chisel/latest/candidate"], + ) self._manager_kwargs.update( base_layer_dir=image_info.base_layer_dir, base_layer_hash=image_info.base_digest, diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index ab4bb2256..8fd404395 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -115,12 +115,3 @@ parts: - libbtrfs-dev - libdevmapper-dev - pkg-config - - chisel: - plugin: nil - stage-snaps: - - chisel/latest/candidate - organize: - bin/chisel: libexec/rockcraft/chisel - stage: - - libexec/rockcraft/chisel