From 18909899894ebaa66799534dd9908a5738e9d4c4 Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Wed, 15 Apr 2026 17:14:17 -0700 Subject: [PATCH] version: expose Dockerfile frontend version Expose the builtin Dockerfile frontend version in BuildKit version APIs and buildctl debug output. Move Dockerfile version logic into frontend/dockerfile/version and validate that the builtin version constant matches release tags. Signed-off-by: Tonis Tiigi --- api/types/worker.pb.go | 25 ++++++---- api/types/worker.proto | 3 +- api/types/worker_vtproto.pb.go | 47 +++++++++++++++++++ client/info.go | 14 +++--- cmd/buildctl/debug/info.go | 3 ++ cmd/buildctl/debug/workers.go | 3 ++ cmd/buildkitd/main.go | 7 ++- control/control.go | 22 +++++---- frontend/dockerfile/builder/version.go | 3 -- .../cmd/dockerfile-frontend/Dockerfile | 12 +++-- .../dockerfile/dockerfile_provenance_test.go | 32 ++++++------- .../dockerfile/version/dockerfile.go | 15 +++--- .../dockerfile/version/dockerfile_test.go | 6 +-- frontend/dockerfile/version/version.go | 3 ++ solver/llbsolver/provenance.go | 7 ++- 15 files changed, 139 insertions(+), 63 deletions(-) delete mode 100644 frontend/dockerfile/builder/version.go rename solver/llbsolver/dockerfile_version.go => frontend/dockerfile/version/dockerfile.go (70%) rename solver/llbsolver/dockerfile_version_test.go => frontend/dockerfile/version/dockerfile_test.go (89%) create mode 100644 frontend/dockerfile/version/version.go diff --git a/api/types/worker.pb.go b/api/types/worker.pb.go index ccb118d62..2540aa123 100644 --- a/api/types/worker.pb.go +++ b/api/types/worker.pb.go @@ -192,12 +192,13 @@ func (x *GCPolicy) GetMinFreeSpace() int64 { } type BuildkitVersion struct { - state protoimpl.MessageState `protogen:"open.v1"` - Package string `protobuf:"bytes,1,opt,name=package,proto3" json:"package,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Revision string `protobuf:"bytes,3,opt,name=revision,proto3" json:"revision,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Package string `protobuf:"bytes,1,opt,name=package,proto3" json:"package,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Revision string `protobuf:"bytes,3,opt,name=revision,proto3" json:"revision,omitempty"` + DockerfileVersion string `protobuf:"bytes,4,opt,name=dockerfileVersion,proto3" json:"dockerfileVersion,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BuildkitVersion) Reset() { @@ -251,6 +252,13 @@ func (x *BuildkitVersion) GetRevision() string { return "" } +func (x *BuildkitVersion) GetDockerfileVersion() string { + if x != nil { + return x.DockerfileVersion + } + return "" +} + type CDIDevice struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` @@ -342,11 +350,12 @@ const file_github_com_moby_buildkit_api_types_worker_proto_rawDesc = "" + "\afilters\x18\x04 \x03(\tR\afilters\x12$\n" + "\rreservedSpace\x18\x03 \x01(\x03R\rreservedSpace\x12\"\n" + "\fmaxUsedSpace\x18\x05 \x01(\x03R\fmaxUsedSpace\x12\"\n" + - "\fminFreeSpace\x18\x06 \x01(\x03R\fminFreeSpace\"a\n" + + "\fminFreeSpace\x18\x06 \x01(\x03R\fminFreeSpace\"\x8f\x01\n" + "\x0fBuildkitVersion\x12\x18\n" + "\apackage\x18\x01 \x01(\tR\apackage\x12\x18\n" + "\aversion\x18\x02 \x01(\tR\aversion\x12\x1a\n" + - "\brevision\x18\x03 \x01(\tR\brevision\"\xef\x01\n" + + "\brevision\x18\x03 \x01(\tR\brevision\x12,\n" + + "\x11dockerfileVersion\x18\x04 \x01(\tR\x11dockerfileVersion\"\xef\x01\n" + "\tCDIDevice\x12\x12\n" + "\x04Name\x18\x01 \x01(\tR\x04Name\x12\x1c\n" + "\tAutoAllow\x18\x02 \x01(\bR\tAutoAllow\x12T\n" + diff --git a/api/types/worker.proto b/api/types/worker.proto index 8f5656646..ef9382a4c 100644 --- a/api/types/worker.proto +++ b/api/types/worker.proto @@ -30,6 +30,7 @@ message BuildkitVersion { string package = 1; string version = 2; string revision = 3; + string dockerfileVersion = 4; } message CDIDevice { @@ -37,4 +38,4 @@ message CDIDevice { bool AutoAllow = 2; map Annotations = 3; bool OnDemand = 4; -} \ No newline at end of file +} diff --git a/api/types/worker_vtproto.pb.go b/api/types/worker_vtproto.pb.go index 6113a6048..4176354eb 100644 --- a/api/types/worker_vtproto.pb.go +++ b/api/types/worker_vtproto.pb.go @@ -100,6 +100,7 @@ func (m *BuildkitVersion) CloneVT() *BuildkitVersion { r.Package = m.Package r.Version = m.Version r.Revision = m.Revision + r.DockerfileVersion = m.DockerfileVersion if len(m.unknownFields) > 0 { r.unknownFields = make([]byte, len(m.unknownFields)) copy(r.unknownFields, m.unknownFields) @@ -277,6 +278,9 @@ func (this *BuildkitVersion) EqualVT(that *BuildkitVersion) bool { if this.Revision != that.Revision { return false } + if this.DockerfileVersion != that.DockerfileVersion { + return false + } return string(this.unknownFields) == string(that.unknownFields) } @@ -531,6 +535,13 @@ func (m *BuildkitVersion) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.DockerfileVersion) > 0 { + i -= len(m.DockerfileVersion) + copy(dAtA[i:], m.DockerfileVersion) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.DockerfileVersion))) + i-- + dAtA[i] = 0x22 + } if len(m.Revision) > 0 { i -= len(m.Revision) copy(dAtA[i:], m.Revision) @@ -727,6 +738,10 @@ func (m *BuildkitVersion) SizeVT() (n int) { if l > 0 { n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } + l = len(m.DockerfileVersion) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } n += len(m.unknownFields) return n } @@ -1411,6 +1426,38 @@ func (m *BuildkitVersion) UnmarshalVT(dAtA []byte) error { } m.Revision = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DockerfileVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DockerfileVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := protohelpers.Skip(dAtA[iNdEx:]) diff --git a/client/info.go b/client/info.go index a637ffae1..d81fcde36 100644 --- a/client/info.go +++ b/client/info.go @@ -13,9 +13,10 @@ type Info struct { } type BuildkitVersion struct { - Package string `json:"package"` - Version string `json:"version"` - Revision string `json:"revision"` + Package string `json:"package"` + Version string `json:"version"` + Revision string `json:"revision"` + DockerfileVersion string `json:"dockerfileVersion,omitempty"` } type CDIDevice struct { @@ -40,9 +41,10 @@ func fromAPIBuildkitVersion(in *apitypes.BuildkitVersion) BuildkitVersion { return BuildkitVersion{} } return BuildkitVersion{ - Package: in.Package, - Version: in.Version, - Revision: in.Revision, + Package: in.Package, + Version: in.Version, + Revision: in.Revision, + DockerfileVersion: in.DockerfileVersion, } } diff --git a/cmd/buildctl/debug/info.go b/cmd/buildctl/debug/info.go index 3f702ff3a..c0a2017d4 100644 --- a/cmd/buildctl/debug/info.go +++ b/cmd/buildctl/debug/info.go @@ -44,5 +44,8 @@ func info(clicontext *cli.Context) error { w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) _, _ = fmt.Fprintf(w, "BuildKit:\t%s %s %s\n", res.BuildkitVersion.Package, res.BuildkitVersion.Version, res.BuildkitVersion.Revision) + if res.BuildkitVersion.DockerfileVersion != "" { + _, _ = fmt.Fprintf(w, "Dockerfile:\t%s\n", res.BuildkitVersion.DockerfileVersion) + } return w.Flush() } diff --git a/cmd/buildctl/debug/workers.go b/cmd/buildctl/debug/workers.go index be23e77bd..66ffb046d 100644 --- a/cmd/buildctl/debug/workers.go +++ b/cmd/buildctl/debug/workers.go @@ -78,6 +78,9 @@ func printWorkersVerbose(tw *tabwriter.Writer, winfo []*client.WorkerInfo) { fmt.Fprintf(tw, "ID:\t%s\n", wi.ID) fmt.Fprintf(tw, "Platforms:\t%s\n", joinPlatforms(wi.Platforms)) fmt.Fprintf(tw, "BuildKit:\t%s %s %s\n", wi.BuildkitVersion.Package, wi.BuildkitVersion.Version, wi.BuildkitVersion.Revision) + if wi.BuildkitVersion.DockerfileVersion != "" { + fmt.Fprintf(tw, "Dockerfile:\t%s\n", wi.BuildkitVersion.DockerfileVersion) + } fmt.Fprintf(tw, "Labels:\n") for _, k := range sortedKeys(wi.Labels) { v := wi.Labels[k] diff --git a/cmd/buildkitd/main.go b/cmd/buildkitd/main.go index 808feaa00..9e2cf9439 100644 --- a/cmd/buildkitd/main.go +++ b/cmd/buildkitd/main.go @@ -35,6 +35,7 @@ import ( "github.com/moby/buildkit/executor/oci" "github.com/moby/buildkit/frontend" dockerfile "github.com/moby/buildkit/frontend/dockerfile/builder" + dockerfileversion "github.com/moby/buildkit/frontend/dockerfile/version" "github.com/moby/buildkit/frontend/gateway" "github.com/moby/buildkit/frontend/gateway/forwarder" "github.com/moby/buildkit/session" @@ -986,11 +987,15 @@ func getGCPolicy(cfg config.GCConfig, root string) []client.PruneInfo { } func getBuildkitVersion() client.BuildkitVersion { - return client.BuildkitVersion{ + buildkitVersion := client.BuildkitVersion{ Package: version.Package, Version: version.Version, Revision: version.Revision, } + if dockerfileVersion := dockerfileversion.Version(); dockerfileVersion != "" { + buildkitVersion.DockerfileVersion = dockerfileVersion + } + return buildkitVersion } func getDNSConfig(cfg *config.DNSConfig) *oci.DNSConfig { diff --git a/control/control.go b/control/control.go index d26f807db..caf6f045d 100644 --- a/control/control.go +++ b/control/control.go @@ -27,6 +27,7 @@ import ( "github.com/moby/buildkit/exporter/util/epoch" "github.com/moby/buildkit/frontend" "github.com/moby/buildkit/frontend/attestations" + dockerfileversion "github.com/moby/buildkit/frontend/dockerfile/version" "github.com/moby/buildkit/session" "github.com/moby/buildkit/session/grpchijack" containerdsnapshot "github.com/moby/buildkit/snapshot/containerd" @@ -630,12 +631,16 @@ func (c *Controller) ListWorkers(ctx context.Context, r *controlapi.ListWorkersR } func (c *Controller) Info(ctx context.Context, r *controlapi.InfoRequest) (*controlapi.InfoResponse, error) { + buildkitVersion := toPBBuildkitVersion(client.BuildkitVersion{ + Package: version.Package, + Version: version.Version, + Revision: version.Revision, + }) + if dockerfileVersion := dockerfileversion.Version(); dockerfileVersion != "" { + buildkitVersion.DockerfileVersion = dockerfileVersion + } return &controlapi.InfoResponse{ - BuildkitVersion: &apitypes.BuildkitVersion{ - Package: version.Package, - Version: version.Version, - Revision: version.Revision, - }, + BuildkitVersion: buildkitVersion, }, nil } @@ -716,9 +721,10 @@ func toPBGCPolicy(in []client.PruneInfo) []*apitypes.GCPolicy { func toPBBuildkitVersion(in client.BuildkitVersion) *apitypes.BuildkitVersion { return &apitypes.BuildkitVersion{ - Package: in.Package, - Version: in.Version, - Revision: in.Revision, + Package: in.Package, + Version: in.Version, + Revision: in.Revision, + DockerfileVersion: in.DockerfileVersion, } } diff --git a/frontend/dockerfile/builder/version.go b/frontend/dockerfile/builder/version.go deleted file mode 100644 index 8b3ff2b20..000000000 --- a/frontend/dockerfile/builder/version.go +++ /dev/null @@ -1,3 +0,0 @@ -package builder - -const Version = "1.24" diff --git a/frontend/dockerfile/cmd/dockerfile-frontend/Dockerfile b/frontend/dockerfile/cmd/dockerfile-frontend/Dockerfile index 352e57b0c..9435f3e8c 100644 --- a/frontend/dockerfile/cmd/dockerfile-frontend/Dockerfile +++ b/frontend/dockerfile/cmd/dockerfile-frontend/Dockerfile @@ -25,24 +25,26 @@ RUN --mount=target=. </dev/null || true) else VERSION=$(git describe --always --tags --match "dockerfile/[0-9]*-$CHANNEL") + EXACT_TAG=$(git describe --exact-match --tags --match "dockerfile/[0-9]*-$CHANNEL" 2>/dev/null || true) fi - BUILTIN_VERSION=$(sed -n 's/^const Version = "\\(.*\\)"$/\\1/p' ./frontend/dockerfile/builder/version.go) + BUILTIN_VERSION=$(sed -n 's/^const version = "\(.*\)"$/\1/p' ./frontend/dockerfile/version/version.go) case "$BUILTIN_VERSION" in *.*.*) EXPECTED_VERSION="$BUILTIN_VERSION" ;; *.*) EXPECTED_VERSION="$BUILTIN_VERSION.0" ;; *) - echo "invalid frontend/dockerfile/builder/version.go version: $BUILTIN_VERSION" + echo "invalid frontend/dockerfile/version/version.go version: $BUILTIN_VERSION" exit 1 ;; esac - case "$VERSION" in + case "$EXACT_TAG" in dockerfile/*) - ACTUAL_VERSION=${VERSION#dockerfile/} + ACTUAL_VERSION=${EXACT_TAG#dockerfile/} ACTUAL_VERSION=${ACTUAL_VERSION%%-*} if [ "$ACTUAL_VERSION" != "$EXPECTED_VERSION" ]; then - echo "frontend/dockerfile/builder/version.go version $BUILTIN_VERSION does not match external frontend version $VERSION" + echo "frontend/dockerfile/version/version.go version $BUILTIN_VERSION does not match external frontend version $EXACT_TAG" exit 1 fi ;; diff --git a/frontend/dockerfile/dockerfile_provenance_test.go b/frontend/dockerfile/dockerfile_provenance_test.go index 9fffeb23d..ecbc65929 100644 --- a/frontend/dockerfile/dockerfile_provenance_test.go +++ b/frontend/dockerfile/dockerfile_provenance_test.go @@ -27,7 +27,6 @@ import ( "github.com/moby/buildkit/client" "github.com/moby/buildkit/client/llb" "github.com/moby/buildkit/exporter/containerimage/exptypes" - dockerfilebuilder "github.com/moby/buildkit/frontend/dockerfile/builder" "github.com/moby/buildkit/frontend/dockerui" gateway "github.com/moby/buildkit/frontend/gateway/client" "github.com/moby/buildkit/identity" @@ -70,6 +69,13 @@ func init() { allTests = append(allTests, provenanceTests...) } +func daemonDockerfileVersion(ctx context.Context, t *testing.T, c *client.Client) string { + info, err := c.Info(ctx) + require.NoError(t, err) + require.NotEmpty(t, info.BuildkitVersion.DockerfileVersion) + return info.BuildkitVersion.DockerfileVersion +} + func testProvenanceAttestation(t *testing.T, sb integration.Sandbox) { workers.CheckFeatureCompat(t, sb, workers.FeatureDirectPush, workers.FeatureProvenance) ctx := sb.Context() @@ -191,10 +197,7 @@ RUN echo ok> /foo if isDockerd { expCustom = provenancetypes.ProvenanceCustomEnv{} } - expectedDockerfileVersionPrefix := dockerfilebuilder.Version - if strings.Count(expectedDockerfileVersionPrefix, ".") == 1 { - expectedDockerfileVersionPrefix += ".0" - } + expectedDockerfileVersion := daemonDockerfileVersion(ctx, t, c) if slsaVersion == "" || slsaVersion == "v1" { type stmtT struct { @@ -285,7 +288,7 @@ RUN echo ok> /foo if isClient || isGateway { require.Empty(t, pred.BuildDefinition.InternalParameters.DockerfileVersion) } else { - require.True(t, strings.HasPrefix(pred.BuildDefinition.InternalParameters.DockerfileVersion, expectedDockerfileVersionPrefix)) + require.Equal(t, expectedDockerfileVersion, pred.BuildDefinition.InternalParameters.DockerfileVersion) } require.False(t, pred.RunDetails.Metadata.Completeness.ResolvedDependencies) @@ -359,7 +362,7 @@ RUN echo ok> /foo if isClient || isGateway { require.Empty(t, pred.Invocation.Environment.DockerfileVersion) } else { - require.True(t, strings.HasPrefix(pred.Invocation.Environment.DockerfileVersion, expectedDockerfileVersionPrefix)) + require.Equal(t, expectedDockerfileVersion, pred.Invocation.Environment.DockerfileVersion) } expectedBaseImage := integration.UnixOrWindows("busybox", "nanoserver") @@ -531,10 +534,7 @@ COPY myapp.Dockerfile / _, isClient := f.(*clientFrontend) _, isGateway := f.(*gatewayFrontend) - expectedDockerfileVersionPrefix := dockerfilebuilder.Version - if strings.Count(expectedDockerfileVersionPrefix, ".") == 1 { - expectedDockerfileVersionPrefix += ".0" - } + expectedDockerfileVersion := daemonDockerfileVersion(ctx, t, c) if slsaVersion == "" || slsaVersion == "v1" { require.Equal(t, "https://slsa.dev/provenance/v1", attest.PredicateType) // intentionally not const @@ -558,7 +558,7 @@ COPY myapp.Dockerfile / if isGateway { require.Empty(t, pred.BuildDefinition.InternalParameters.DockerfileVersion) } else { - require.True(t, strings.HasPrefix(pred.BuildDefinition.InternalParameters.DockerfileVersion, expectedDockerfileVersionPrefix)) + require.Equal(t, expectedDockerfileVersion, pred.BuildDefinition.InternalParameters.DockerfileVersion) } } @@ -619,7 +619,7 @@ COPY myapp.Dockerfile / if isGateway { require.Empty(t, pred.Invocation.Environment.DockerfileVersion) } else { - require.True(t, strings.HasPrefix(pred.Invocation.Environment.DockerfileVersion, expectedDockerfileVersionPrefix)) + require.Equal(t, expectedDockerfileVersion, pred.Invocation.Environment.DockerfileVersion) } } @@ -1071,11 +1071,7 @@ COPY --from=base C:\out C:\Files pred := stmt.Predicate require.Equal(t, "dockerfile.v0", pred.BuildDefinition.ExternalParameters.Request.Frontend) - expectedDockerfileVersionPrefix := dockerfilebuilder.Version - if strings.Count(expectedDockerfileVersionPrefix, ".") == 1 { - expectedDockerfileVersionPrefix += ".0" - } - require.True(t, strings.HasPrefix(pred.BuildDefinition.InternalParameters.DockerfileVersion, expectedDockerfileVersionPrefix)) + require.Equal(t, daemonDockerfileVersion(ctx, t, c), pred.BuildDefinition.InternalParameters.DockerfileVersion) require.NotContains(t, pred.BuildDefinition.ExternalParameters.Request.Args, "source") require.Equal(t, 2, len(pred.BuildDefinition.ExternalParameters.Request.Locals), "%+v", pred.BuildDefinition.ExternalParameters.Request.Locals) diff --git a/solver/llbsolver/dockerfile_version.go b/frontend/dockerfile/version/dockerfile.go similarity index 70% rename from solver/llbsolver/dockerfile_version.go rename to frontend/dockerfile/version/dockerfile.go index 6427cfa4b..0df272538 100644 --- a/solver/llbsolver/dockerfile_version.go +++ b/frontend/dockerfile/version/dockerfile.go @@ -1,19 +1,22 @@ -package llbsolver +package version import ( "strings" - dockerfilebuilder "github.com/moby/buildkit/frontend/dockerfile/builder" - "github.com/moby/buildkit/version" + buildkitversion "github.com/moby/buildkit/version" "github.com/pkg/errors" "golang.org/x/mod/semver" ) -func builtinDockerfileVersion() (string, error) { - return normalizeBuiltinDockerfileVersion(dockerfilebuilder.Version, version.Version) +func Version() string { + v, err := normalizeDockerfileVersion(version, buildkitversion.Version) + if err != nil { + return "" + } + return v } -func normalizeBuiltinDockerfileVersion(v, buildkitVersion string) (string, error) { +func normalizeDockerfileVersion(v, buildkitVersion string) (string, error) { v = strings.TrimSpace(v) parts := strings.Split(v, ".") if len(parts) != 2 && len(parts) != 3 { diff --git a/solver/llbsolver/dockerfile_version_test.go b/frontend/dockerfile/version/dockerfile_test.go similarity index 89% rename from solver/llbsolver/dockerfile_version_test.go rename to frontend/dockerfile/version/dockerfile_test.go index 4fe096dbe..0d67cde9f 100644 --- a/solver/llbsolver/dockerfile_version_test.go +++ b/frontend/dockerfile/version/dockerfile_test.go @@ -1,4 +1,4 @@ -package llbsolver +package version import ( "testing" @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" ) -func TestBuiltinDockerfileVersion(t *testing.T) { +func TestNormalizeDockerfileVersion(t *testing.T) { for _, tc := range []struct { name string dockerfileVer string @@ -25,7 +25,7 @@ func TestBuiltinDockerfileVersion(t *testing.T) { {name: "invalid dockerfile suffix", dockerfileVer: "1.24.x", buildkitVersion: "v0.29.0", wantErr: true}, } { t.Run(tc.name, func(t *testing.T) { - got, err := normalizeBuiltinDockerfileVersion(tc.dockerfileVer, tc.buildkitVersion) + got, err := normalizeDockerfileVersion(tc.dockerfileVer, tc.buildkitVersion) if tc.wantErr { require.Error(t, err) return diff --git a/frontend/dockerfile/version/version.go b/frontend/dockerfile/version/version.go new file mode 100644 index 000000000..a36a0e6b5 --- /dev/null +++ b/frontend/dockerfile/version/version.go @@ -0,0 +1,3 @@ +package version + +const version = "1.24" diff --git a/solver/llbsolver/provenance.go b/solver/llbsolver/provenance.go index 892d7890c..edd89db8c 100644 --- a/solver/llbsolver/provenance.go +++ b/solver/llbsolver/provenance.go @@ -17,6 +17,7 @@ import ( "github.com/moby/buildkit/exporter/containerimage" "github.com/moby/buildkit/exporter/containerimage/exptypes" "github.com/moby/buildkit/frontend" + dockerfileversion "github.com/moby/buildkit/frontend/dockerfile/version" "github.com/moby/buildkit/solver" "github.com/moby/buildkit/solver/errdefs" "github.com/moby/buildkit/solver/llbsolver/ops" @@ -466,11 +467,9 @@ func NewProvenanceCreator(ctx context.Context, slsaVersion provenancetypes.Prove pr.BuildDefinition.InternalParameters.ProvenanceCustomEnv = customEnv if pr.BuildDefinition.ExternalParameters.Request.Frontend == "dockerfile.v0" { - dockerfileVersion, err := builtinDockerfileVersion() - if err != nil { - return nil, err + if dockerfileVersion := dockerfileversion.Version(); dockerfileVersion != "" { + pr.BuildDefinition.InternalParameters.DockerfileVersion = dockerfileVersion } - pr.BuildDefinition.InternalParameters.DockerfileVersion = dockerfileVersion } pc := &ProvenanceCreator{