Skip to content
Open
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
21 changes: 20 additions & 1 deletion internal/builder/trusted_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,11 +122,29 @@ func IsTrustedBuilder(cfg config.Config, builderName string) (bool, error) {
if err != nil {
return false, err
}

// Collect all trusted builder names
var trustedBuilderNames []string

// Add known trusted builders
for _, knownBuilder := range KnownBuilders {
if knownBuilder.Trusted {
trustedBuilderNames = append(trustedBuilderNames, knownBuilder.Image)
}
}

// Add user-configured trusted builders
for _, trustedBuilder := range cfg.TrustedBuilders {
trustedBuilderReference, err := name.ParseReference(trustedBuilder.Name, name.WithDefaultTag(""))
trustedBuilderNames = append(trustedBuilderNames, trustedBuilder.Name)
}

// Check if builder matches any trusted builder
for _, trustedBuilderName := range trustedBuilderNames {
trustedBuilderReference, err := name.ParseReference(trustedBuilderName, name.WithDefaultTag(""))
if err != nil {
return false, err
}

if trustedBuilderReference.Identifier() != "" {
if builderReference.Name() == trustedBuilderReference.Name() {
return true, nil
Expand All @@ -137,5 +155,6 @@ func IsTrustedBuilder(cfg config.Config, builderName string) (bool, error) {
}
}
}

return false, nil
}
17 changes: 17 additions & 0 deletions internal/builder/trusted_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,23 @@ func trustedBuilder(t *testing.T, when spec.G, it spec.S) {
})

when("IsTrustedBuilder", func() {
it("trusts known trusted builders", func() {
// Known builder with exact tag match
isTrusted, err := bldr.IsTrustedBuilder(config.Config{}, "heroku/builder:24")
h.AssertNil(t, err)
h.AssertTrue(t, isTrusted)

// Known builder without tag should match any tag
isTrusted, err = bldr.IsTrustedBuilder(config.Config{}, "paketobuildpacks/builder-jammy-base:latest")
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this test case reference: paketobuildpacks/builder-jammy-base?

h.AssertNil(t, err)
h.AssertTrue(t, isTrusted)

// Unknown builder should not be trusted
isTrusted, err = bldr.IsTrustedBuilder(config.Config{}, "my/private/builder")
h.AssertNil(t, err)
h.AssertFalse(t, isTrusted)
})

it("trust image without tag", func() {
cfg := config.Config{
TrustedBuilders: []config.TrustedBuilder{
Expand Down
2 changes: 1 addition & 1 deletion internal/commands/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ func Build(logger logging.Logger, cfg config.Config, packClient PackClient) *cob
if err != nil {
return err
}
trustBuilder := isTrusted || bldr.IsKnownTrustedBuilder(builder) || flags.TrustBuilder
trustBuilder := isTrusted || flags.TrustBuilder
if trustBuilder {
logger.Debugf("Builder %s is trusted", style.Symbol(builder))
if flags.LifecycleImage != "" {
Expand Down
2 changes: 1 addition & 1 deletion internal/commands/builder_inspect.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func inspectBuilder(
builderInfo := writer.SharedBuilderInfo{
Name: imageName,
IsDefault: imageName == cfg.DefaultBuilder,
Trusted: isTrusted || bldr.IsKnownTrustedBuilder(imageName),
Trusted: isTrusted,
}

localInfo, localErr := inspector.InspectBuilder(imageName, true, client.WithDetectionOrderDepth(flags.Depth))
Expand Down
2 changes: 1 addition & 1 deletion internal/commands/config_trusted_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ func addTrustedBuilder(args []string, logger logging.Logger, cfg config.Config,
if err != nil {
return err
}
if isTrusted || bldr.IsKnownTrustedBuilder(imageName) {
if isTrusted {
logger.Infof("Builder %s is already trusted", style.Symbol(imageName))
return nil
}
Expand Down
Loading