summaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
authorTianon Gravi <admwiggin@gmail.com>2023-03-30 14:43:41 -0700
committerGitHub <noreply@github.com>2023-03-30 14:43:41 -0700
commitf537ef5746e1e6efac9613422c75836b70d68837 (patch)
treeab90013a551558e304aeb3591a7d3b3495128c5e /api
parent0656059ae7ab1d0b14afd3bd5f4533f2f2083ff0 (diff)
parenta75354c04560d0e2b7a8469dae7743033d77ed8a (diff)
downloaddocker-f537ef5746e1e6efac9613422c75836b70d68837.tar.gz
Merge pull request #44963 from vvoland/c8d-push-upstream
c8d: Implement push
Diffstat (limited to 'api')
-rw-r--r--api/server/router/image/backend.go2
-rw-r--r--api/server/router/image/image_routes.go20
2 files changed, 20 insertions, 2 deletions
diff --git a/api/server/router/image/backend.go b/api/server/router/image/backend.go
index 302b48d68e..f7cacba90f 100644
--- a/api/server/router/image/backend.go
+++ b/api/server/router/image/backend.go
@@ -38,7 +38,7 @@ type importExportBackend interface {
type registryBackend interface {
PullImage(ctx context.Context, image, tag string, platform *specs.Platform, metaHeaders map[string][]string, authConfig *registry.AuthConfig, outStream io.Writer) error
- PushImage(ctx context.Context, image, tag string, metaHeaders map[string][]string, authConfig *registry.AuthConfig, outStream io.Writer) error
+ PushImage(ctx context.Context, ref reference.Named, metaHeaders map[string][]string, authConfig *registry.AuthConfig, outStream io.Writer) error
}
type Searcher interface {
diff --git a/api/server/router/image/image_routes.go b/api/server/router/image/image_routes.go
index d891b8158e..e39e59e3bb 100644
--- a/api/server/router/image/image_routes.go
+++ b/api/server/router/image/image_routes.go
@@ -154,7 +154,25 @@ func (ir *imageRouter) postImagesPush(ctx context.Context, w http.ResponseWriter
img := vars["name"]
tag := r.Form.Get("tag")
- if err := ir.backend.PushImage(ctx, img, tag, metaHeaders, authConfig, output); err != nil {
+
+ var ref reference.Named
+
+ // Tag is empty only in case ImagePushOptions.All is true.
+ if tag != "" {
+ r, err := httputils.RepoTagReference(img, tag)
+ if err != nil {
+ return errdefs.InvalidParameter(err)
+ }
+ ref = r
+ } else {
+ r, err := reference.ParseNormalizedNamed(img)
+ if err != nil {
+ return errdefs.InvalidParameter(err)
+ }
+ ref = r
+ }
+
+ if err := ir.backend.PushImage(ctx, ref, metaHeaders, authConfig, output); err != nil {
if !output.Flushed() {
return err
}