← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~jugmac00/lpcraft:add-support-for-conda-channels into lpcraft:main

 

Jürgen Gmach has proposed merging ~jugmac00/lpcraft:add-support-for-conda-channels into lpcraft:main.

Commit message:
Add support for Conda channels

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~jugmac00/lpcraft/+git/lpcraft/+merge/424380
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~jugmac00/lpcraft:add-support-for-conda-channels into lpcraft:main.
diff --git a/lpcraft/commands/run.py b/lpcraft/commands/run.py
index 4a0ab82..1ff0e49 100644
--- a/lpcraft/commands/run.py
+++ b/lpcraft/commands/run.py
@@ -311,6 +311,7 @@ def _run_job(
     output: Optional[Path],
     apt_replacement_repositories: Optional[List[str]] = None,
     env_from_cli: Optional[List[str]] = None,
+    plugin_settings: Optional[List[str]] = None,
 ) -> None:
     """Run a single job."""
     # XXX jugmac00 2022-04-27: we should create a configuration object to be
@@ -318,7 +319,7 @@ def _run_job(
     host_architecture = get_host_architecture()
     if host_architecture not in job.architectures:
         return
-    pm = get_plugin_manager(job)
+    pm = get_plugin_manager(job, plugin_settings)
     pre_run_command = _resolve_runtime_value(
         pm,
         job,
@@ -461,6 +462,9 @@ def run(args: Namespace) -> int:
                                 args, "apt_replace_repositories", None
                             ),
                             env_from_cli=getattr(args, "set_env", None),
+                            plugin_settings=getattr(
+                                args, "plugin_setting", None
+                            ),
                         )
                 except CommandError as e:
                     if len(stage) == 1:
@@ -516,6 +520,7 @@ def run_one(args: Namespace) -> int:
                 args, "apt_replace_repositories", None
             ),
             env_from_cli=getattr(args, "set_env", None),
+            plugin_settings=getattr(args, "plugin_setting", None),
         )
     finally:
         should_clean_environment = getattr(args, "clean", False)
diff --git a/lpcraft/main.py b/lpcraft/main.py
index c9af819..3cef45d 100644
--- a/lpcraft/main.py
+++ b/lpcraft/main.py
@@ -107,6 +107,11 @@ def main(argv: Optional[List[str]] = None) -> int:
         action="append",
         help="Set an environment variable.",
     )
+    parser_run.add_argument(
+        "--plugin-setting",
+        action="append",
+        help="Add additional plugin setting.",
+    )
     parser_run.set_defaults(func=run)
 
     parser_run_one = subparsers.add_parser(
@@ -149,6 +154,11 @@ def main(argv: Optional[List[str]] = None) -> int:
         action="append",
         help="Set an environment variable.",
     )
+    parser_run_one.add_argument(
+        "--plugin-setting",
+        action="append",
+        help="Add additional plugin setting.",
+    )
     parser_run_one.set_defaults(func=run_one)
 
     parser_version = subparsers.add_parser(
diff --git a/lpcraft/plugin/manager.py b/lpcraft/plugin/manager.py
index f6dfdd3..3661ee3 100644
--- a/lpcraft/plugin/manager.py
+++ b/lpcraft/plugin/manager.py
@@ -1,3 +1,5 @@
+from typing import List
+
 import pluggy
 
 from lpcraft.config import Job
@@ -6,7 +8,12 @@ from lpcraft.plugin.lib import InternalPlugins
 from lpcraft.plugins import PLUGINS
 
 
-def get_plugin_manager(job: Job) -> pluggy.PluginManager:
+def convert_config_list_to_dict(list_: List):
+    # XXX jugmac00 2022-06-10: move
+    return dict(pair.split("=", maxsplit=1) for pair in list_)
+
+
+def get_plugin_manager(job: Job, plugin_settings) -> pluggy.PluginManager:
     pm = pluggy.PluginManager(NAME)
     pm.add_hookspecs(hookspecs)
 
@@ -15,6 +22,9 @@ def get_plugin_manager(job: Job) -> pluggy.PluginManager:
 
     # register builtin plugins
     if job.plugin:
-        pm.register(PLUGINS[job.plugin](job))
+        if plugin_settings is not None:
+            plugin_settings = convert_config_list_to_dict(plugin_settings)
+
+        pm.register(PLUGINS[job.plugin](job, plugin_settings))
 
     return pm
diff --git a/lpcraft/plugins/plugins.py b/lpcraft/plugins/plugins.py
index 0797fba..57a18ea 100644
--- a/lpcraft/plugins/plugins.py
+++ b/lpcraft/plugins/plugins.py
@@ -43,8 +43,9 @@ class BasePlugin:
     class Config(BaseConfig):
         pass
 
-    def __init__(self, config: Job) -> None:
+    def __init__(self, config: Job, plugin_settings=None) -> None:
         self.config = config
+        self.additional_settings = plugin_settings
 
     def get_plugin_config(self) -> BaseConfig:
         """Return the properly typecast plugin configuration."""
@@ -167,6 +168,12 @@ class MiniCondaPlugin(BasePlugin):
             conda_channels.extend(plugin_config.conda_channels)
         for channel in set(self.DEFAULT_CONDA_CHANNELS) - set(conda_channels):
             conda_channels.append(channel)
+        if self.additional_settings:
+            soss_channel = self.additional_settings.get(
+                "miniconda_conda_channel"
+            )
+            if soss_channel is not None:
+                conda_channels.append(soss_channel)
         return conda_channels
 
     @hookimpl  # type: ignore

References