diff --git a/build/build.go b/build/build.go index d6c9c095..8926ff7e 100644 --- a/build/build.go +++ b/build/build.go @@ -252,17 +252,21 @@ func toSolveOpt(ctx context.Context, node builder.Node, multiDriver bool, opt Op attests[k] = *v } } - supportsAttestations := bopts.LLBCaps.Contains(apicaps.CapID("exporter.image.attestations")) && nodeDriver.Features(ctx)[driver.MultiPlatform] + + supportAttestations := bopts.LLBCaps.Contains(apicaps.CapID("exporter.image.attestations")) && nodeDriver.Features(ctx)[driver.MultiPlatform] if len(attests) > 0 { - if !supportsAttestations { - return nil, nil, errors.Errorf("attestations are not supported by the current BuildKit daemon") + if !supportAttestations { + if !nodeDriver.Features(ctx)[driver.MultiPlatform] { + return nil, nil, notSupported("Attestation", nodeDriver, "https://docs.docker.com/go/attestations/") + } + return nil, nil, errors.Errorf("Attestations are not supported by the current BuildKit daemon") } for k, v := range attests { so.FrontendAttrs["attest:"+k] = v } } - if _, ok := opt.Attests["provenance"]; !ok && supportsAttestations { + if _, ok := opt.Attests["provenance"]; !ok && supportAttestations { const noAttestEnv = "BUILDX_NO_DEFAULT_ATTESTATIONS" var noProv bool if v, ok := os.LookupEnv(noAttestEnv); ok { diff --git a/tests/build.go b/tests/build.go index 88796b15..ee3cc7a7 100644 --- a/tests/build.go +++ b/tests/build.go @@ -118,7 +118,7 @@ func testBuildRegistryExportAttestations(t *testing.T, sb integration.Sandbox) { out, err := buildCmd(sb, withArgs(fmt.Sprintf("--output=type=image,name=%s,push=true", target), "--provenance=true", dir)) if sb.Name() == "docker" { require.Error(t, err) - require.Contains(t, out, "attestations are not supported") + require.Contains(t, out, "Attestation is not supported") return } require.NoError(t, err, string(out))