launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #28582
[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