Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit 11955fe

Browse files
author
Ian Campbell
committed
push: support pushing directly from a bundle file.
This is done by providing a new `--bundle` option. Signed-off-by: Ian Campbell <[email protected]>
1 parent 8d7750b commit 11955fe

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

internal/commands/push.go

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
type pushOptions struct {
3030
registry registryOptions
3131
tag string
32+
bundle string
3233
platforms []string
3334
}
3435

@@ -45,23 +46,46 @@ func pushCmd(dockerCli command.Cli) *cobra.Command {
4546
}
4647
flags := cmd.Flags()
4748
flags.StringVarP(&opts.tag, "tag", "t", "", "Target registry reference (default: <name>:<version> from metadata)")
49+
flags.StringVar(&opts.bundle, "bundle", "", "Push a specific bundle")
4850
flags.StringSliceVar(&opts.platforms, "platform", nil, "For multi-arch service images, only push the specified platforms")
4951
opts.registry.addFlags(flags)
5052
return cmd
5153
}
5254

5355
func runPush(dockerCli command.Cli, name string, opts pushOptions) error {
5456
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)
6386
}
64-
retag, err := shouldRetagInvocationImage(app.Metadata(), bndl, opts.tag)
87+
88+
retag, err := shouldRetagInvocationImage(meta, bndl, opts.tag)
6589
if err != nil {
6690
return err
6791
}

0 commit comments

Comments
 (0)