debian-forge-composer/cmd/osbuild-worker/jobimpl-container-resolve.go
Achilleas Koutsou a7dd8ff94f container: add ListDigest to the spec
Add the ListDigest to the container Spec struct and all its copies so we
can store list digests when they are available and pass them on to the
appropriate osbuild stages, sources, and inputs.

Copy the value whenever a spec is moved to a different representation.
2023-04-17 18:30:41 +02:00

61 lines
1.4 KiB
Go

package main
import (
"fmt"
"github.com/sirupsen/logrus"
"github.com/osbuild/osbuild-composer/internal/container"
"github.com/osbuild/osbuild-composer/internal/worker"
"github.com/osbuild/osbuild-composer/internal/worker/clienterrors"
)
type ContainerResolveJobImpl struct {
AuthFilePath string
}
func (impl *ContainerResolveJobImpl) Run(job worker.Job) error {
logWithId := logrus.WithField("jobId", job.Id())
var args worker.ContainerResolveJob
err := job.Args(&args)
if err != nil {
return err
}
result := worker.ContainerResolveJobResult{
Specs: make([]worker.ContainerSpec, len(args.Specs)),
}
logWithId.Infof("Resolving containers (%d)", len(args.Specs))
resolver := container.NewResolver(args.Arch)
resolver.AuthFilePath = impl.AuthFilePath
for _, s := range args.Specs {
resolver.Add(s.Source, s.Name, s.TLSVerify)
}
specs, err := resolver.Finish()
if err != nil {
result.JobError = clienterrors.WorkerClientError(clienterrors.ErrorContainerResolution, err.Error(), nil)
} else {
for i, spec := range specs {
result.Specs[i] = worker.ContainerSpec{
Source: spec.Source,
Name: spec.LocalName,
TLSVerify: spec.TLSVerify,
ImageID: spec.ImageID,
Digest: spec.Digest,
ListDigest: spec.ListDigest,
}
}
}
err = job.Update(&result)
if err != nil {
return fmt.Errorf("Error reporting job result: %v", err)
}
return nil
}