manifest: add and use add_pipeline method

Instead of passing all pre-created pipelines to the Manifest
constructor, add a `add_pipeline` method, analogous to the
existing `Pipeline.add_{stage, assembler}` methods. Convert
the format loading code to use that and remove the constructor
parameter.
This commit is contained in:
Christian Kellner 2021-01-19 17:45:14 +00:00
parent b6642db7a2
commit 42dd3c1e2d
2 changed files with 17 additions and 16 deletions

View file

@ -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

View file

@ -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}