@@ -29,6 +29,7 @@ import (
29
29
type pushOptions struct {
30
30
registry registryOptions
31
31
tag string
32
+ bundle string
32
33
platforms []string
33
34
}
34
35
@@ -45,23 +46,46 @@ func pushCmd(dockerCli command.Cli) *cobra.Command {
45
46
}
46
47
flags := cmd .Flags ()
47
48
flags .StringVarP (& opts .tag , "tag" , "t" , "" , "Target registry reference (default: <name>:<version> from metadata)" )
49
+ flags .StringVar (& opts .bundle , "bundle" , "" , "Push a specific bundle" )
48
50
flags .StringSliceVar (& opts .platforms , "platform" , nil , "For multi-arch service images, only push the specified platforms" )
49
51
opts .registry .addFlags (flags )
50
52
return cmd
51
53
}
52
54
53
55
func runPush (dockerCli command.Cli , name string , opts pushOptions ) error {
54
56
defer muteDockerCli (dockerCli )()
55
- app , err := packager .Extract (name )
56
- if err != nil {
57
- return err
58
- }
59
- defer app .Cleanup ()
60
- bndl , err := makeBundleFromApp (dockerCli , app , nil )
61
- if err != nil {
62
- return err
57
+
58
+ var (
59
+ bndl * bundle.Bundle
60
+ meta metadata.AppMetadata
61
+ )
62
+ if opts .bundle == "" {
63
+ app , err := packager .Extract (name )
64
+ if err != nil {
65
+ return err
66
+ }
67
+ defer app .Cleanup ()
68
+ if bndl , err = makeBundleFromApp (dockerCli , app , nil ); err != nil {
69
+ return err
70
+ }
71
+ meta = app .Metadata ()
72
+ } else {
73
+ if name != "" {
74
+ fmt .Fprintf (os .Stderr , "WARNING: ignoring dockerapp at %q, pushing app directly from %q\n " , name , opts .bundle )
75
+ }
76
+ r , err := os .Open (opts .bundle )
77
+ if err != nil {
78
+ return err
79
+ }
80
+ if b , err := bundle .ParseReader (r ); err == nil {
81
+ bndl = & b // TODO: PR to change return type of ParseReader
82
+ } else {
83
+ return err
84
+ }
85
+ meta = metadata .FromBundle (bndl )
63
86
}
64
- retag , err := shouldRetagInvocationImage (app .Metadata (), bndl , opts .tag )
87
+
88
+ retag , err := shouldRetagInvocationImage (meta , bndl , opts .tag )
65
89
if err != nil {
66
90
return err
67
91
}
0 commit comments