debian-forge-composer/internal/manifest/oci_container.go
2022-07-14 16:54:00 +02:00

57 lines
1.4 KiB
Go

package manifest
import (
"github.com/osbuild/osbuild-composer/internal/osbuild"
)
// An OCIContainer represents an OCI container, containing a filesystem
// tree created by another Pipeline.
type OCIContainer struct {
Base
Filename string
Cmd []string
ExposedPorts []string
treePipeline Tree
}
func NewOCIContainer(m *Manifest,
buildPipeline *Build,
treePipeline Tree) *OCIContainer {
p := &OCIContainer{
Base: NewBase(m, "container", buildPipeline),
treePipeline: treePipeline,
Filename: "oci-archive.tar",
}
if treePipeline.GetManifest() != m {
panic("tree pipeline from different manifest")
}
buildPipeline.addDependent(p)
m.addPipeline(p)
return p
}
func (p *OCIContainer) serialize() osbuild.Pipeline {
pipeline := p.Base.serialize()
options := &osbuild.OCIArchiveStageOptions{
Architecture: p.treePipeline.GetPlatform().GetArch().String(),
Filename: p.Filename,
Config: &osbuild.OCIArchiveConfig{
Cmd: p.Cmd,
ExposedPorts: p.ExposedPorts,
},
}
baseInput := new(osbuild.OCIArchiveStageInput)
baseInput.Type = "org.osbuild.tree"
baseInput.Origin = "org.osbuild.pipeline"
baseInput.References = []string{"name:" + p.treePipeline.Name()}
inputs := &osbuild.OCIArchiveStageInputs{Base: baseInput}
pipeline.AddStage(osbuild.NewOCIArchiveStage(options, inputs))
return pipeline
}
func (p *OCIContainer) getBuildPackages() []string {
return []string{"tar"}
}