debian-forge-composer/internal/manifest/xz.go
Achilleas Koutsou 631b133352 manifest: make NewXZ() take any kind of pipeline for input
The XZ pipeline was initially only for the ostree raw image but now it
can be applied to the output of any pipeline.
2022-11-28 17:20:49 +01:00

50 lines
1.1 KiB
Go

package manifest
import (
"github.com/osbuild/osbuild-composer/internal/artifact"
"github.com/osbuild/osbuild-composer/internal/osbuild"
)
// The XZ pipeline compresses a raw image file using xz.
type XZ struct {
Base
Filename string
imgPipeline Pipeline
}
// NewXZ creates a new XZ pipeline. imgPipeline is the pipeline producing the
// raw image that will be xz compressed.
func NewXZ(m *Manifest,
buildPipeline *Build,
imgPipeline Pipeline) *XZ {
p := &XZ{
Base: NewBase(m, "xz", buildPipeline),
Filename: "image.xz",
imgPipeline: imgPipeline,
}
buildPipeline.addDependent(p)
m.addPipeline(p)
return p
}
func (p *XZ) serialize() osbuild.Pipeline {
pipeline := p.Base.serialize()
pipeline.AddStage(osbuild.NewXzStage(
osbuild.NewXzStageOptions(p.Filename),
osbuild.NewFilesInputs(osbuild.NewFilesInputReferencesPipeline(p.imgPipeline.Name(), p.imgPipeline.Export().Filename())),
))
return pipeline
}
func (p *XZ) getBuildPackages() []string {
return []string{"xz"}
}
func (p *XZ) Export() *artifact.Artifact {
p.Base.export = true
mimeType := "application/xz"
return artifact.New(p.Name(), p.Filename, &mimeType)
}