@@ -17,6 +17,7 @@ package cmd
1717import (
1818 "archive/tar"
1919 "bytes"
20+ "encoding/json"
2021 "errors"
2122 "fmt"
2223 "io"
@@ -30,6 +31,7 @@ import (
3031 v1 "github.com/google/go-containerregistry/pkg/v1"
3132 "github.com/google/go-containerregistry/pkg/v1/mutate"
3233 "github.com/google/go-containerregistry/pkg/v1/remote"
34+ "github.com/google/go-containerregistry/pkg/v1/static"
3335 "github.com/google/go-containerregistry/pkg/v1/tarball"
3436 "github.com/google/go-containerregistry/pkg/v1/types"
3537 "github.com/spf13/cobra"
@@ -158,6 +160,15 @@ func editConfig(in io.Reader, out io.Writer, src, dst string, options ...crane.O
158160 return nil , err
159161 }
160162
163+ m , err := img .Manifest ()
164+ if err != nil {
165+ return nil , err
166+ }
167+ mt , err := img .MediaType ()
168+ if err != nil {
169+ return nil , err
170+ }
171+
161172 var edited []byte
162173 if interactive (in , out ) {
163174 rcf , err := img .RawConfigFile ()
@@ -176,21 +187,25 @@ func editConfig(in io.Reader, out io.Writer, src, dst string, options ...crane.O
176187 edited = b
177188 }
178189
179- cf , err := v1 .ParseConfigFile (bytes .NewReader (edited ))
190+ l := static .NewLayer (edited , m .Config .MediaType )
191+ layerDigest , err := l .Digest ()
180192 if err != nil {
181193 return nil , err
182194 }
183195
184- img , err = mutate .ConfigFile (img , cf )
196+ m .Config .Digest = layerDigest
197+ m .Config .Size = int64 (len (edited ))
198+ b , err := json .Marshal (m )
185199 if err != nil {
186200 return nil , err
187201 }
188-
189- digest , err := img .Digest ()
190- if err != nil {
191- return nil , err
202+ rm := & rawManifest {
203+ body : b ,
204+ mediaType : mt ,
192205 }
193206
207+ digest , _ , _ := v1 .SHA256 (bytes .NewReader (b ))
208+
194209 if dst == "" {
195210 dst = src
196211 ref , err := name .ParseReference (src , o .Name ... )
@@ -207,7 +222,11 @@ func editConfig(in io.Reader, out io.Writer, src, dst string, options ...crane.O
207222 return nil , err
208223 }
209224
210- if err := crane .Push (img , dst , options ... ); err != nil {
225+ if err := remote .WriteLayer (dstRef .Context (), l , o .Remote ... ); err != nil {
226+ return nil , err
227+ }
228+
229+ if err := remote .Put (dstRef , rm , o .Remote ... ); err != nil {
211230 return nil , err
212231 }
213232
0 commit comments