Skip to content

Commit 22b6516

Browse files
test: add initial publish test
1 parent 0d18c59 commit 22b6516

File tree

4 files changed

+356
-44
lines changed

4 files changed

+356
-44
lines changed

go.work.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1365,9 +1365,11 @@ github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99
13651365
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
13661366
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
13671367
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
1368+
github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
13681369
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M=
13691370
github.com/sagikazarmark/crypt v0.15.0 h1:TQJg76CemcIdJyC9/dmNjU9OUyIFHyvE50Tpq1t1nqY=
13701371
github.com/sagikazarmark/crypt v0.15.0/go.mod h1:5rwNNax6Mlk9sZ40AcyVtiEw24Z4J04cfSioF2COKmc=
1372+
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY=
13711373
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
13721374
github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs=
13731375
github.com/shirou/gopsutil/v3 v3.23.1 h1:a9KKO+kGLKEvcPIs4W62v0nu3sciVDOOOPUD0Hz7z/4=

kustomize/commands/commands.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"os"
1111

1212
"github.com/spf13/cobra"
13+
"k8s.io/utils/clock"
1314
"sigs.k8s.io/kustomize/api/konfig"
1415
"sigs.k8s.io/kustomize/api/provider"
1516
"sigs.k8s.io/kustomize/cmd/config/completion"
@@ -56,7 +57,7 @@ See https://sigs.k8s.io/kustomize
5657
version.NewCmdVersion(stdOut),
5758
openapi.NewCmdOpenAPI(stdOut),
5859
localize.NewCmdLocalize(fSys),
59-
publish.NewCmdPublish(fSys, pvd.GetFieldValidator(), pvd.GetResourceFactory()),
60+
publish.NewCmdPublish(fSys, new(clock.RealClock)),
6061
)
6162
configcobra.AddCommands(c, konfig.ProgramName)
6263

kustomize/commands/publish/publish.go

Lines changed: 57 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ package publish
66
import (
77
"context"
88
"errors"
9+
"fmt"
910
"log"
10-
"os"
1111
"path/filepath"
12+
"strings"
13+
"time"
1214

1315
"github.com/spf13/cobra"
14-
"sigs.k8s.io/kustomize/api/ifc"
15-
"sigs.k8s.io/kustomize/api/konfig"
16-
"sigs.k8s.io/kustomize/api/resource"
16+
"k8s.io/utils/clock"
1717
"sigs.k8s.io/kustomize/kustomize/v5/commands/internal/kustfile"
1818
"sigs.k8s.io/kustomize/kyaml/filesys"
1919

@@ -24,13 +24,15 @@ import (
2424
)
2525

2626
type publishOptions struct {
27-
registry string
28-
noVerify bool
27+
registry string
28+
createdAt time.Time
29+
noVerify bool
2930
}
3031

3132
// NewCmdEdit returns an instance of 'edit' subcommand.
3233
func NewCmdPublish(
33-
fSys filesys.FileSystem, v ifc.Validator, rf *resource.Factory,
34+
fSys filesys.FileSystem,
35+
clock clock.PassiveClock,
3436
) *cobra.Command {
3537
var o publishOptions
3638

@@ -42,7 +44,7 @@ func NewCmdPublish(
4244
publish <registry>
4345
`,
4446
RunE: func(cmd *cobra.Command, args []string) error {
45-
err := o.Validate(args)
47+
err := o.Validate(clock, args)
4648
if err != nil {
4749
return err
4850
}
@@ -51,18 +53,40 @@ func NewCmdPublish(
5153

5254
Args: cobra.MinimumNArgs(1),
5355
}
54-
cmd.Flags().BoolVar(&o.noVerify, "no-verify", false,
56+
57+
// cmd.Flags().StringVar(
58+
// &o.createdAt,
59+
// "created-at",
60+
// "",
61+
// "The timestamp of the published artifact. It must be supplied for reproducible builds. Defaults to the current timestamp.",
62+
// )
63+
cmd.Flags().BoolVar(
64+
&o.noVerify,
65+
"no-verify",
66+
false,
5567
"skip validation for resources",
5668
)
5769
return cmd
5870
}
5971

6072
// Validate validates addResource command.
61-
func (o *publishOptions) Validate(args []string) error {
73+
func (o *publishOptions) Validate(clock clock.PassiveClock, args []string) error {
6274
if len(args) == 0 {
6375
return errors.New("must specify a registry")
6476
}
6577
o.registry = args[0]
78+
79+
o.createdAt = clock.Now()
80+
81+
// if o.createdAt == "" {
82+
// o.createdAt = time.Now().Format(time.RFC3339)
83+
// } else {
84+
// parsed, err := time.Parse("", o.createdAt)
85+
// if err != nil {
86+
// return err
87+
// }
88+
// o.createdAt = parsed.Format(time.RFC3339)
89+
// }
6690
return nil
6791
}
6892

@@ -73,54 +97,35 @@ func (o *publishOptions) RunPublish(fSys filesys.FileSystem) error {
7397
return err
7498
}
7599

76-
if _, err = mf.Read(); err != nil {
100+
kustomization, err := mf.Read()
101+
if err != nil {
77102
return err
78103
}
79104

80105
var dir string = filepath.Dir(mf.GetPath())
81106

82-
fs, err := file.New(dir)
107+
fs, err := file.New("")
83108
if err != nil {
84109
return err
85110
}
86111
defer fs.Close()
87112

88113
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 {
114+
fileDescriptor, err := fs.Add(ctx, ".", "", dir)
115+
if err != nil {
117116
return err
118117
}
119118

120-
artifactType := "application/vnd.kustomize.artifact"
121119
opts := oras.PackManifestOptions{
122-
Layers: fileDescriptors,
120+
Layers: []v1.Descriptor{
121+
fileDescriptor,
122+
},
123+
ManifestAnnotations: map[string]string{
124+
"org.opencontainers.image.created": o.createdAt.Format(time.RFC3339),
125+
},
123126
}
127+
128+
artifactType := fmt.Sprintf("application/vnd.%s+%s", strings.ToLower(strings.ReplaceAll(kustomization.APIVersion, "/", ".")), strings.ToLower(kustomization.Kind))
124129
manifestDescriptor, err := oras.PackManifest(ctx, fs, oras.PackManifestVersion1_1, artifactType, opts)
125130
if err != nil {
126131
return err
@@ -136,12 +141,21 @@ func (o *publishOptions) RunPublish(fSys filesys.FileSystem) error {
136141
return err
137142
}
138143

144+
// }
145+
// reg, err := remote.NewRegistry(o.registry)
146+
// reg.PlainHTTP = true
147+
148+
// dst, err := reg.Repository(ctx, "destination")
149+
// if err != nil {
150+
// panic(err) // Handle error
151+
// }
152+
139153
desc, err := oras.Copy(ctx, fs, tag, dst, tag, oras.DefaultCopyOptions)
140154
if err != nil {
141155
return err
142156
}
143157

144-
log.Printf("SUCCESS: copied %s desc %q\n", dir, desc)
158+
log.Printf(`SUCCESS: published %s:%s@%s\n`, o.registry, tag, desc.Digest)
145159

146160
return nil
147161
}

0 commit comments

Comments
 (0)