|
4 | 4 | package publish |
5 | 5 |
|
6 | 6 | import ( |
| 7 | + "context" |
7 | 8 | "errors" |
| 9 | + "log" |
| 10 | + "os" |
| 11 | + "path/filepath" |
8 | 12 |
|
9 | 13 | "github.com/spf13/cobra" |
10 | 14 | "sigs.k8s.io/kustomize/api/ifc" |
| 15 | + "sigs.k8s.io/kustomize/api/konfig" |
11 | 16 | "sigs.k8s.io/kustomize/api/resource" |
12 | 17 | "sigs.k8s.io/kustomize/kustomize/v5/commands/internal/kustfile" |
13 | 18 | "sigs.k8s.io/kustomize/kyaml/filesys" |
| 19 | + |
| 20 | + v1 "github.com/opencontainers/image-spec/specs-go/v1" |
| 21 | + oras "oras.land/oras-go/v2" |
| 22 | + "oras.land/oras-go/v2/content/file" |
| 23 | + "oras.land/oras-go/v2/content/oci" |
14 | 24 | ) |
15 | 25 |
|
16 | 26 | type publishOptions struct { |
@@ -62,14 +72,76 @@ func (o *publishOptions) RunPublish(fSys filesys.FileSystem) error { |
62 | 72 | if err != nil { |
63 | 73 | return err |
64 | 74 | } |
65 | | - m, err := mf.Read() |
| 75 | + |
| 76 | + if _, err = mf.Read(); err != nil { |
| 77 | + return err |
| 78 | + } |
| 79 | + |
| 80 | + var dir string = filepath.Dir(mf.GetPath()) |
| 81 | + |
| 82 | + fs, err := file.New(dir) |
| 83 | + if err != nil { |
| 84 | + return err |
| 85 | + } |
| 86 | + defer fs.Close() |
| 87 | + |
| 88 | + ctx := context.Background() |
| 89 | + fileDescriptors := make([]v1.Descriptor, 0) |
| 90 | + |
| 91 | + if err = fSys.Walk(dir, func(path string, info os.FileInfo, err error) error { |
| 92 | + if err != nil { |
| 93 | + return err |
| 94 | + } |
| 95 | + |
| 96 | + if info.IsDir() { |
| 97 | + return nil |
| 98 | + } |
| 99 | + |
| 100 | + var mediaType string = "application/vnd.kustomize.unknown.v1beta1" |
| 101 | + var b string = filepath.Base(path) |
| 102 | + for _, kfilename := range konfig.RecognizedKustomizationFileNames() { |
| 103 | + if b == kfilename { |
| 104 | + mediaType = "application/vnd.kustomize.config.k8s.io.v1beta1+yaml" |
| 105 | + break |
| 106 | + } |
| 107 | + } |
| 108 | + |
| 109 | + fileDescriptor, err := fs.Add(ctx, path, mediaType, "") |
| 110 | + if err != nil { |
| 111 | + return err |
| 112 | + } |
| 113 | + fileDescriptors = append(fileDescriptors, fileDescriptor) |
| 114 | + |
| 115 | + return nil |
| 116 | + }); err != nil { |
| 117 | + return err |
| 118 | + } |
| 119 | + |
| 120 | + artifactType := "application/vnd.kustomize.artifact" |
| 121 | + opts := oras.PackManifestOptions{ |
| 122 | + Layers: fileDescriptors, |
| 123 | + } |
| 124 | + manifestDescriptor, err := oras.PackManifest(ctx, fs, oras.PackManifestVersion1_1, artifactType, opts) |
| 125 | + if err != nil { |
| 126 | + return err |
| 127 | + } |
| 128 | + |
| 129 | + tag := "latest" |
| 130 | + if err = fs.Tag(ctx, manifestDescriptor, tag); err != nil { |
| 131 | + return err |
| 132 | + } |
| 133 | + |
| 134 | + dst, err := oci.New(o.registry) |
66 | 135 | if err != nil { |
67 | 136 | return err |
68 | 137 | } |
69 | 138 |
|
70 | | - for _, r := range m.Resources { |
71 | | - println(r) |
| 139 | + desc, err := oras.Copy(ctx, fs, tag, dst, tag, oras.DefaultCopyOptions) |
| 140 | + if err != nil { |
| 141 | + return err |
72 | 142 | } |
73 | 143 |
|
| 144 | + log.Printf("SUCCESS: copied %s desc %q\n", dir, desc) |
| 145 | + |
74 | 146 | return nil |
75 | 147 | } |
0 commit comments