Skip to content

Commit 9306eba

Browse files
authored
Allow crane edit to generate non-image artifacts (#1545)
1 parent 759b19f commit 9306eba

File tree

1 file changed

+26
-7
lines changed

1 file changed

+26
-7
lines changed

internal/cmd/edit.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package cmd
1717
import (
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

Comments
 (0)