pypeline-runner 1.25.0__tar.gz → 1.26.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/PKG-INFO +1 -1
  2. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/pyproject.toml +1 -1
  3. pypeline_runner-1.26.0/src/pypeline/__init__.py +1 -0
  4. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/steps/west_install.py +18 -8
  5. pypeline_runner-1.25.0/src/pypeline/__init__.py +0 -1
  6. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/LICENSE +0 -0
  7. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/README.md +0 -0
  8. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/__run.py +0 -0
  9. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/bootstrap/__init__.py +0 -0
  10. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/bootstrap/run.py +0 -0
  11. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/domain/__init__.py +0 -0
  12. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/domain/artifacts.py +0 -0
  13. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/domain/config.py +0 -0
  14. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/domain/execution_context.py +0 -0
  15. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/domain/pipeline.py +0 -0
  16. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/domain/project_slurper.py +0 -0
  17. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/inputs_parser.py +0 -0
  18. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/kickstart/__init__.py +0 -0
  19. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/kickstart/create.py +0 -0
  20. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/kickstart/templates/project/.gitignore +0 -0
  21. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/kickstart/templates/project/pypeline.ps1 +0 -0
  22. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/kickstart/templates/project/pypeline.yaml +0 -0
  23. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/kickstart/templates/project/pyproject.toml +0 -0
  24. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/kickstart/templates/project/steps/my_step.py +0 -0
  25. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/kickstart/templates/project/west.yaml +0 -0
  26. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/main.py +0 -0
  27. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/py.typed +0 -0
  28. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/pypeline.py +0 -0
  29. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/steps/__init__.py +0 -0
  30. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/steps/create_venv.py +0 -0
  31. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/steps/env_setup_script.py +0 -0
  32. {pypeline_runner-1.25.0 → pypeline_runner-1.26.0}/src/pypeline/steps/scoop_install.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pypeline-runner
3
- Version: 1.25.0
3
+ Version: 1.26.0
4
4
  Summary: Configure and execute pipelines with Python (similar to GitHub workflows or Jenkins pipelines).
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pypeline-runner"
3
- version = "1.25.0"
3
+ version = "1.26.0"
4
4
  description = "Configure and execute pipelines with Python (similar to GitHub workflows or Jenkins pipelines)."
5
5
  authors = ["cuinixam <me@cuinixam.com>"]
6
6
  license = "MIT"
@@ -0,0 +1 @@
1
+ __version__ = "1.26.0"
@@ -3,7 +3,7 @@ import json
3
3
  import traceback
4
4
  from dataclasses import dataclass, field
5
5
  from pathlib import Path
6
- from typing import Any, Optional
6
+ from typing import Any, Generic, Optional, TypeVar
7
7
 
8
8
  import yaml
9
9
  from mashumaro.config import BaseConfig
@@ -130,15 +130,22 @@ class WestInstallConfig(DataClassJSONMixin):
130
130
  workspace_dir: Optional[str] = None
131
131
 
132
132
 
133
- class WestInstall(PipelineStep[ExecutionContext]):
134
- def __init__(self, execution_context: ExecutionContext, group_name: str, config: Optional[dict[str, Any]] = None) -> None:
133
+ TContext = TypeVar("TContext", bound=ExecutionContext)
134
+
135
+
136
+ class WestInstall(PipelineStep[TContext], Generic[TContext]):
137
+ def __init__(self, execution_context: TContext, group_name: str, config: Optional[dict[str, Any]] = None) -> None:
135
138
  super().__init__(execution_context, group_name, config)
136
139
  self.logger = logger.bind()
137
140
  self.install_result = WestInstallResult()
138
141
  self.user_config = WestInstallConfig.from_dict(config) if config else WestInstallConfig()
139
142
 
140
143
  self._west_workspace_dir = self._resolve_workspace_dir()
141
- self._manifests = self._collect_manifests()
144
+ self._manifest_files = self._collect_manifests()
145
+
146
+ @property
147
+ def _manifests(self) -> list[WestManifest]:
148
+ return [mf.manifest for mf in self._manifest_files]
142
149
 
143
150
  def _resolve_workspace_dir(self) -> Path:
144
151
  """Resolve workspace directory from data registry (priority) or config."""
@@ -194,7 +201,10 @@ class WestInstall(PipelineStep[ExecutionContext]):
194
201
  return {"workspace_dir": self.user_config.workspace_dir}
195
202
  return None
196
203
 
197
- def _merge_manifests(self, manifests: list[WestManifest]) -> WestManifest:
204
+ def _merge_manifests(self) -> WestManifest:
205
+ return self._do_merge_manifests(self._manifests)
206
+
207
+ def _do_merge_manifests(self, manifests: list[WestManifest]) -> WestManifest:
198
208
  """Merge multiple manifests, preserving order. First occurrence wins."""
199
209
  merged = WestManifest()
200
210
  for manifest in manifests:
@@ -255,7 +265,7 @@ class WestInstall(PipelineStep[ExecutionContext]):
255
265
  self.logger.debug(f"Run {self.get_name()} step. Output dir: {self.output_dir}")
256
266
 
257
267
  try:
258
- merged_manifest = self._merge_manifests([mf.manifest for mf in self._manifests])
268
+ merged_manifest = self._merge_manifests()
259
269
  self._write_west_manifest_file(merged_manifest)
260
270
 
261
271
  if not merged_manifest.projects:
@@ -289,7 +299,7 @@ class WestInstall(PipelineStep[ExecutionContext]):
289
299
 
290
300
  def get_inputs(self) -> list[Path]:
291
301
  inputs: list[Path] = []
292
- for manifest_file in self._manifests:
302
+ for manifest_file in self._manifest_files:
293
303
  if manifest_file.file and manifest_file.file.exists():
294
304
  inputs.append(manifest_file.file)
295
305
  return inputs
@@ -298,7 +308,7 @@ class WestInstall(PipelineStep[ExecutionContext]):
298
308
  outputs: list[Path] = [self._output_manifest_file, self._install_result_file]
299
309
  if self.install_result.installed_dirs:
300
310
  outputs.extend(self.install_result.installed_dirs)
301
- elif self._manifests:
311
+ elif self._manifest_files:
302
312
  outputs.append(self._west_workspace_dir)
303
313
  return outputs
304
314
 
@@ -1 +0,0 @@
1
- __version__ = "1.25.0"