blueprint: move pipeline generation into its own package

Introduce the `distro` package, which contains an interface for OS
implementations. Its main purpose is to convert a blueprint to a
distro-specific pipeline.

Also introduce the `distro/fedora30` package. It is the first
implementation of the distro interface. Most of its code has been copied
with minimal modifications from the blueprint package.

The `blueprint` package is now back to serving a single purpose:
representing a weldr blueprint. It does not depend on the `pipeline`
package anymore.

Change osbuild-composer and osbuild-pipeline to use the new API,
hard-coding "fedora-30". This looks a bit weird now, but is the same
behavior as before.

All test cases now also take an "distro" key in the "compose" object.
This commit is contained in:
Lars Karlitski 2019-11-06 01:01:39 +00:00 committed by Tom Gundersen
parent 3ae39e54c5
commit b33ed9e5d2
28 changed files with 661 additions and 541 deletions

View file

@ -16,6 +16,9 @@ import (
"github.com/osbuild/osbuild-composer/internal/pipeline"
"github.com/osbuild/osbuild-composer/internal/target"
"github.com/osbuild/osbuild-composer/internal/distro"
_ "github.com/osbuild/osbuild-composer/internal/distro/fedora30"
"github.com/google/uuid"
)
@ -393,7 +396,8 @@ func (s *Store) PushCompose(composeID uuid.UUID, bp *blueprint.Blueprint, compos
targets := []*target.Target{
target.NewLocalTarget(target.NewLocalTargetOptions("/var/lib/osbuild-composer/outputs/" + composeID.String())),
}
pipeline, err := bp.ToPipeline(composeType)
f30 := distro.New("fedora-30")
pipeline, err := f30.Pipeline(bp, composeType)
if err != nil {
return err
}
@ -471,7 +475,8 @@ func (s *Store) GetImage(composeID uuid.UUID) (*Image, error) {
if compose.QueueStatus != "FINISHED" {
return nil, &InvalidRequestError{"compose was not finished"}
}
name, mime, err := blueprint.FilenameFromType(compose.OutputType)
f30 := distro.New("fedora-30")
name, mime, err := f30.FilenameFromType(compose.OutputType)
if err != nil {
panic("invalid output type")
}