diff --git a/osbuild/formats/v1.py b/osbuild/formats/v1.py index e30e9f5a..d0b1de86 100644 --- a/osbuild/formats/v1.py +++ b/osbuild/formats/v1.py @@ -1,6 +1,6 @@ # Version 1 of the manifest description -from typing import Dict, List, Optional, Tuple +from typing import Dict, Optional, Tuple from osbuild.meta import Index, ValidationResult from ..inputs import Input from ..pipeline import Manifest, Pipeline, detect_host_runner @@ -44,25 +44,25 @@ def describe(manifest: Manifest, *, with_id=False) -> Dict: return description -def load_build(description: Dict, index: Index, result: List[Pipeline]): +def load_build(description: Dict, index: Index, manifest: Manifest): pipeline = description.get("pipeline") if pipeline: - build_pipeline = load_pipeline(pipeline, index, result) + build_pipeline = load_pipeline(pipeline, index, manifest) else: build_pipeline = None return build_pipeline, description["runner"] -def load_pipeline(description: Dict, index: Index, result: List[Pipeline]) -> Pipeline: +def load_pipeline(description: Dict, index: Index, manifest: Manifest) -> Pipeline: build = description.get("build") if build: - build_pipeline, runner = load_build(build, index, result) + build_pipeline, runner = load_build(build, index, manifest) else: build_pipeline, runner = None, detect_host_runner() build_id = build_pipeline and build_pipeline.tree_id - pipeline = Pipeline(runner, build_id) + pipeline = manifest.add_pipeline(runner, build_id) for s in description.get("stages", []): info = index.get_module_info("Stage", s["name"]) @@ -77,8 +77,6 @@ def load_pipeline(description: Dict, index: Index, result: List[Pipeline]) -> Pi "tree": Input(info, {"pipeline": {"id": pipeline.tree_id}}) } - result.append(pipeline) - return pipeline @@ -88,16 +86,14 @@ def load(description: Dict, index: Index) -> Manifest: pipeline = description.get("pipeline", {}) sources = description.get("sources", {}) - pipelines = [] + manifest = Manifest(sources) - load_pipeline(pipeline, index, pipelines) + load_pipeline(pipeline, index, manifest) - for pipeline in pipelines: + for pipeline in manifest.pipelines: for stage in pipeline.stages: stage.sources = sources - manifest = Manifest(pipelines, sources) - return manifest diff --git a/osbuild/pipeline.py b/osbuild/pipeline.py index 4973d17d..df34d5b3 100644 --- a/osbuild/pipeline.py +++ b/osbuild/pipeline.py @@ -2,7 +2,7 @@ import contextlib import hashlib import json import os -from typing import Dict, List +from typing import Dict from .api import API from . import buildroot @@ -287,10 +287,15 @@ class Pipeline: class Manifest: """Representation of a pipeline and its sources""" - def __init__(self, pipelines: List[Pipeline], source_options: Dict): - self.pipelines = pipelines + def __init__(self, source_options: Dict): + self.pipelines = [] self.sources = source_options + def add_pipeline(self, runner: str, build: str) -> Pipeline: + pipeline = Pipeline(runner, build) + self.pipelines.append(pipeline) + return pipeline + def build(self, store, monitor, libdir, output_directory): results = {"success": True}