debian-forge-composer/internal/store/compose.go
Achilleas Koutsou cf956ff5a6 Delete internal/blueprint/ and import from osbuild/blueprint
Import osbuild/blueprint v1.6.0
2025-04-17 11:17:58 +02:00

86 lines
2.2 KiB
Go

package store
import (
"time"
"github.com/google/uuid"
"github.com/osbuild/blueprint/pkg/blueprint"
"github.com/osbuild/images/pkg/distro"
"github.com/osbuild/images/pkg/manifest"
"github.com/osbuild/images/pkg/rpmmd"
"github.com/osbuild/osbuild-composer/internal/common"
"github.com/osbuild/osbuild-composer/internal/target"
)
type StateTransitionError struct {
message string
}
func (ste *StateTransitionError) Error() string {
return ste.message
}
// ImageBuild represents a single image build inside a compose
type ImageBuild struct {
ID int
ImageType distro.ImageType
Manifest manifest.OSBuildManifest
Targets []*target.Target
JobCreated time.Time
JobStarted time.Time
JobFinished time.Time
Size uint64
JobID uuid.UUID
// Kept for backwards compatibility. Image builds which were done
// before the move to the job queue use this to store whether they
// finished successfully.
QueueStatus common.ImageBuildState
}
// DeepCopy creates a copy of the ImageBuild structure
func (ib *ImageBuild) DeepCopy() ImageBuild {
var newTargets []*target.Target
for _, t := range ib.Targets {
newTarget := *t
newTargets = append(newTargets, &newTarget)
}
// Create new image build struct
return ImageBuild{
ID: ib.ID,
QueueStatus: ib.QueueStatus,
ImageType: ib.ImageType,
Manifest: ib.Manifest,
Targets: newTargets,
JobCreated: ib.JobCreated,
JobStarted: ib.JobStarted,
JobFinished: ib.JobFinished,
Size: ib.Size,
JobID: ib.JobID,
}
}
// A Compose represent the task of building a set of images from a single blueprint.
// It contains all the information necessary to generate the inputs for the job, as
// well as the job's state.
type Compose struct {
Blueprint *blueprint.Blueprint
ImageBuild ImageBuild
Packages []rpmmd.PackageSpec
}
// DeepCopy creates a copy of the Compose structure
func (c *Compose) DeepCopy() Compose {
var newBpPtr *blueprint.Blueprint = nil
if c.Blueprint != nil {
bpCopy := *c.Blueprint
newBpPtr = &bpCopy
}
pkgs := make([]rpmmd.PackageSpec, len(c.Packages))
copy(pkgs, c.Packages)
return Compose{
Blueprint: newBpPtr,
ImageBuild: c.ImageBuild.DeepCopy(),
Packages: pkgs,
}
}