From 4ae9a77e566aa87c18dfcd45cd5d2f4d7955753f Mon Sep 17 00:00:00 2001 From: Alex Lowe Date: Tue, 21 Apr 2026 16:38:50 -0400 Subject: [PATCH 1/2] feat!(Lifecycle): use craft-application's new plugin groups Breaking change: We're extending the MINIMAL plugin group rather than the DEFAULT plugin group so that we can pick upstream plugins as needed, ensuring they work with imagecraft. --- imagecraft/application.py | 6 ------ imagecraft/services/lifecycle.py | 12 +++++++++++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/imagecraft/application.py b/imagecraft/application.py index 04a5d022..2ccf2559 100644 --- a/imagecraft/application.py +++ b/imagecraft/application.py @@ -17,10 +17,8 @@ """Main Imagecraft Application.""" from craft_application import Application, AppMetadata -from craft_parts.plugins.plugins import PluginType from typing_extensions import override -from imagecraft import plugins from imagecraft.models import project APP_METADATA = AppMetadata( @@ -35,10 +33,6 @@ class Imagecraft(Application): """Imagecraft application definition.""" - @override - def _get_app_plugins(self) -> dict[str, PluginType]: - return plugins.get_app_plugins() - @override def _enable_craft_parts_features(self) -> None: # pylint: disable=import-outside-toplevel diff --git a/imagecraft/services/lifecycle.py b/imagecraft/services/lifecycle.py index 953b9be9..a7eb9d7e 100644 --- a/imagecraft/services/lifecycle.py +++ b/imagecraft/services/lifecycle.py @@ -20,20 +20,30 @@ from pathlib import Path from typing import cast +import craft_platforms from craft_application import LifecycleService from craft_cli import CraftError from craft_parts import Action, callbacks from craft_parts.executor.errors import EnvironmentChangedError from craft_parts.infos import ProjectInfo +from craft_parts.plugins import Plugin +from craft_parts.plugins.plugins import PluginGroup from typing_extensions import override -from imagecraft import models +from imagecraft import models, plugins from imagecraft.services.image import ImageService class ImagecraftLifecycleService(LifecycleService): """Imagecraft-specific lifecycle service.""" + @staticmethod + @override + def get_plugin_group( + build_info: craft_platforms.BuildInfo, + ) -> dict[str, type[Plugin]] | None: + return {**PluginGroup.MINIMAL.value, **plugins.get_app_plugins()} + @override def setup(self) -> None: """Initialize the LifecycleManager with previously-set arguments.""" From a6cfbd6e6727fef193ac9325330663c5be21e63c Mon Sep 17 00:00:00 2001 From: Alex Lowe Date: Tue, 21 Apr 2026 16:54:46 -0400 Subject: [PATCH 2/2] fix: pyright complaint --- imagecraft/services/lifecycle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imagecraft/services/lifecycle.py b/imagecraft/services/lifecycle.py index a7eb9d7e..df0cd743 100644 --- a/imagecraft/services/lifecycle.py +++ b/imagecraft/services/lifecycle.py @@ -42,7 +42,7 @@ class ImagecraftLifecycleService(LifecycleService): def get_plugin_group( build_info: craft_platforms.BuildInfo, ) -> dict[str, type[Plugin]] | None: - return {**PluginGroup.MINIMAL.value, **plugins.get_app_plugins()} + return {**PluginGroup.MINIMAL.value, **plugins.get_app_plugins()} # pyright: ignore[reportUnknownMemberType] @override def setup(self) -> None: