Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't call build.New for index SBOM #851

Merged
merged 1 commit into from
Aug 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions internal/cli/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -311,17 +311,17 @@ func buildImageComponents(ctx context.Context, wd string, archs []types.Architec
build.WithSBOM(imageDir),
)

bc, err := build.New(ctx, wd, opts...)
o, ic, err = build.NewOptions(wd, opts...)
if err != nil {
return nil, nil, nil, err
}

if _, _, err := bc.WriteIndex(idx); err != nil {
if _, err := build.WriteIndex(o, idx); err != nil {
return nil, nil, nil, fmt.Errorf("failed to write OCI index: %w", err)
}

// the sboms are saved to the same working directory as the image components
if bc.WantSBOM() {
if len(o.SBOMFormats) != 0 {
logrus.Info("Generating arch image SBOMs")
var (
g errgroup.Group
Expand All @@ -348,7 +348,7 @@ func buildImageComponents(ctx context.Context, wd string, archs []types.Architec
return nil, nil, nil, err
}

files, err := bc.GenerateIndexSBOM(ctx, finalDigest, imgs)
files, err := build.GenerateIndexSBOM(ctx, *o, *ic, finalDigest, imgs)
if err != nil {
return nil, nil, nil, fmt.Errorf("generating index SBOM: %w", err)
}
Expand Down
19 changes: 8 additions & 11 deletions pkg/build/build_implementation.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import (
"path/filepath"
"runtime"

"chainguard.dev/apko/pkg/options"

gzip "github.com/klauspost/pgzip"
"go.opentelemetry.io/otel"

Expand Down Expand Up @@ -165,24 +167,19 @@ func (bc *Context) buildImage(ctx context.Context) error {
}

// WriteIndex saves the index file from the given image configuration.
func (bc *Context) WriteIndex(idx oci.SignedImageIndex) (string, int64, error) {
outfile := filepath.Join(bc.o.TempDir(), "index.json")
func WriteIndex(o *options.Options, idx oci.SignedImageIndex) (string, error) {
outfile := filepath.Join(o.TempDir(), "index.json")

b, err := idx.RawManifest()
if err != nil {
return "", 0, fmt.Errorf("getting raw manifest: %w", err)
return "", fmt.Errorf("getting raw manifest: %w", err)
}
if err := os.WriteFile(outfile, b, 0644); err != nil { //nolint:gosec // this file is fine to be readable
return "", 0, fmt.Errorf("writing index file: %w", err)
}

stat, err := os.Stat(outfile)
if err != nil {
return "", 0, fmt.Errorf("stat(%q): %w", outfile, err)
return "", fmt.Errorf("writing index file: %w", err)
}
o.Logger().Infof("built index file as %s", outfile)

bc.Logger().Infof("built index file as %s", outfile)
return outfile, stat.Size(), nil
return outfile, nil
}

func (bc *Context) BuildPackageList(ctx context.Context) (toInstall []*repository.RepositoryPackage, conflicts []string, err error) {
Expand Down
14 changes: 7 additions & 7 deletions pkg/build/sbom.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,17 +145,17 @@ func (bc *Context) GenerateImageSBOM(ctx context.Context, arch types.Architectur
return sboms, nil
}

func (bc *Context) GenerateIndexSBOM(ctx context.Context, indexDigest name.Digest, imgs map[types.Architecture]oci.SignedImage) ([]types.SBOM, error) {
func GenerateIndexSBOM(ctx context.Context, o options.Options, ic types.ImageConfiguration, indexDigest name.Digest, imgs map[types.Architecture]oci.SignedImage) ([]types.SBOM, error) {
_, span := otel.Tracer("apko").Start(ctx, "GenerateIndexSBOM")
defer span.End()

if !bc.WantSBOM() {
bc.Logger().Warnf("skipping index SBOM generation")
if len(o.SBOMFormats) == 0 {
o.Logger().Warnf("skipping SBOM generation")
return nil, nil
}

s := newSBOM(bc.fs, bc.o, bc.ic, bc.o.SourceDateEpoch)
bc.Logger().Infof("Generating index SBOM")
s := newSBOM(nil, o, ic, o.SourceDateEpoch)
o.Logger().Infof("Generating index SBOM")

// Add the image digest
h, err := v1.NewHash(indexDigest.DigestStr())
Expand All @@ -165,7 +165,7 @@ func (bc *Context) GenerateIndexSBOM(ctx context.Context, indexDigest name.Diges
s.ImageInfo.IndexDigest = h

s.ImageInfo.IndexMediaType = ggcrtypes.OCIImageIndex
if bc.o.UseDockerMediaTypes {
if o.UseDockerMediaTypes {
s.ImageInfo.IndexMediaType = ggcrtypes.DockerManifestList
}

Expand All @@ -178,7 +178,7 @@ func (bc *Context) GenerateIndexSBOM(ctx context.Context, indexDigest name.Diges
return archs[i].String() < archs[j].String()
})

generators := generator.Generators(bc.fs)
generators := generator.Generators(nil)
var sboms = make([]types.SBOM, 0, len(generators))
for _, format := range s.Formats {
gen, ok := generators[format]
Expand Down
Loading