From 54af4c21120ca9bf9c20e0be0818605d69e4b54b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D0=B5=D0=B3=20=D0=91=D0=BE=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Tue, 14 Apr 2026 18:54:57 +0200 Subject: [PATCH] added manifest api description --- Makefile.am | 2 +- Makefile.in | 2 +- app/config/variant.go | 4 +- app/handler/manifest.go | 94 ++++- configure | 20 +- configure.ac | 2 +- swagger.json | 734 ++++++++++++++++++++++++++++++++++++++++ swagger.yaml | 276 +++++++++++++++ 8 files changed, 1116 insertions(+), 18 deletions(-) create mode 100644 swagger.json diff --git a/Makefile.am b/Makefile.am index 96d62d3..93e32df 100644 --- a/Makefile.am +++ b/Makefile.am @@ -376,7 +376,7 @@ SWAG_OUTDIR = ./ SWAG_OPTS = --parseDependency \ --parseDepth 3 \ --exclude pkg,vendor \ - --outputTypes yaml \ + --outputTypes yaml,json \ --output $(SWAG_OUTDIR) apidoc: diff --git a/Makefile.in b/Makefile.in index d53dcb7..717864e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -546,7 +546,7 @@ SWAG_OUTDIR = ./ SWAG_OPTS = --parseDependency \ --parseDepth 3 \ --exclude pkg,vendor \ - --outputTypes yaml \ + --outputTypes yaml,json \ --output $(SWAG_OUTDIR) all: all-recursive diff --git a/app/config/variant.go b/app/config/variant.go index 652b419..7adb9f4 100644 --- a/app/config/variant.go +++ b/app/config/variant.go @@ -5,6 +5,6 @@ const ( rundir = "/var/run/mstore" logdir = "/var/log/mstore" datadir = "/var/lib/mstore" - version = "0.2.4" - srvname = "mstored" + version = "0.2.5" + srvname = "mstored" ) diff --git a/app/handler/manifest.go b/app/handler/manifest.go index 87adcf8..47b8379 100644 --- a/app/handler/manifest.go +++ b/app/handler/manifest.go @@ -11,6 +11,19 @@ import ( "mstore/pkg/terms" ) +// GetProperty godoc +// +// @Summary Get manifest info +// @Description Get manifest info +// @Tags manifest +// @Param name path string true "Manifest path" +// @Param reference path string true "Manifest tag" +// @Success 200 +// @Failure 404,405,500 +// @Router /v2/{name}/manifests/{reference} [HEAD] +// @Header 200 {string} Content-Length "Manifest size" +// @Header 200 {string} Content-Type "Manifest type" +// @Header 200 {string} Docker-Content-Digest "Manigest digest" func (hand *Handler) ManifestExists(rctx *router.Context) { name, _ := rctx.GetSubpath("name") reference, _ := rctx.GetSubpath("reference") @@ -47,7 +60,18 @@ func (hand *Handler) ManifestExists(rctx *router.Context) { rctx.SetStatus(code) } -// PUT /v2//manifests/ 201 404 +// GetProperty godoc +// +// @Summary Put manifest +// @Description Put manifest +// @Tags manifest +// @Param name path string true "Manifest path" +// @Param reference path string true "Manifest tag" +// @Param Content-Length header string true "Manifest size" +// @Param Content-Type header string true "Manifest type" +// @Success 200 +// @Failure 404,405,500 +// @Router /v2/{name}/manifests/{reference} [PUT] func (hand *Handler) PutManifest(rctx *router.Context) { //hand.DumpHeaders("PutManifest headers", rctx) @@ -87,7 +111,19 @@ func (hand *Handler) PutManifest(rctx *router.Context) { rctx.SetStatus(code) } -// GET /v2//manifests/ 200 404 +// GetProperty godoc +// +// @Summary Get manifest +// @Description Get manifest +// @Tags manifest +// @Param name path string true "Manifest path" +// @Param reference path string true "Manifest tag" +// @Success 200 +// @Failure 404,405,500 +// @Router /v2/{name}/manifests/{reference} [GET] +// @Header 200 {string} Content-Length "Manifest size" +// @Header 200 {string} Content-Type "Manifest type" +// @Header 200 {string} Docker-Content-Digest "Manigest digest" func (hand *Handler) GetManifest(rctx *router.Context) { name, _ := rctx.GetSubpath("name") reference, _ := rctx.GetSubpath("reference") @@ -129,7 +165,16 @@ func (hand *Handler) GetManifest(rctx *router.Context) { rctx.SetStatus(code) } -// DELETE /v2//manifests/ 200 404 +// GetProperty godoc +// +// @Summary Delete manifest +// @Description Delete manifest +// @Tags manifest +// @Param name path string true "Manifest path" +// @Param reference path string true "Manifest tag" +// @Success 202 +// @Failure 404,405,500 +// @Router /v2/{name}/manifests/{reference} [DELETE] func (hand *Handler) DeleteManifest(rctx *router.Context) { name, _ := rctx.GetSubpath("name") reference, _ := rctx.GetSubpath("reference") @@ -160,6 +205,18 @@ func (hand *Handler) DeleteManifest(rctx *router.Context) { // GET /v2//referrers/ 200 404/400 // GET /v2//referrers/?artifactType= 200 404/400 + +// GetProperty godoc +// +// @Summary Get manifest referer +// @Description Get manifest referer +// @Tags manifest +// @Param name path string true "Manifest path" +// @Param digest path string true "Manifest digest" +// @Failure 404,405,500 +// @Router /v2/{name}/referrers/{digest} [GET] +// @Success 200 {object} imageoper.GetRefererResult.Reference +// @Produce application/json func (hand *Handler) GetReferer(rctx *router.Context) { name, _ := rctx.GetSubpath("name") digest, _ := rctx.GetSubpath("digest") @@ -188,6 +245,17 @@ func (hand *Handler) GetReferer(rctx *router.Context) { // GET /v2//tags/list 200 404 // GET /v2//tags/list?n=&last= + +// GetProperty godoc +// +// @Summary List manifest tags +// @Description List manifest tags +// @Tags manifest +// @Param name path string true "Manifest path" +// @Failure 404,405,500 +// @Router /v2/{name}/tags/list [GET] +// @Success 200 {object} imageoper.GetTagsResult.TagDescr +// @Produce application/json func (hand *Handler) GetTags(rctx *router.Context) { name, _ := rctx.GetSubpath("name") params := &imageoper.GetTagsParams{ @@ -214,6 +282,16 @@ func (hand *Handler) GetTags(rctx *router.Context) { } // GET /v2/_catalog?n=1000 200 404 + +// GetProperty godoc +// +// @Summary List manifests +// @Description List manifests +// @Tags manifest +// @Failure 404,405,500 +// @Router /v2/_catalog [GET] +// @Success 200 {object} imageoper.ListManifestsResult.Repositories +// @Produce application/json func (hand *Handler) ListManifests(rctx *router.Context) { params := &imageoper.ListManifestsParams{} // Rigth checking @@ -237,6 +315,16 @@ func (hand *Handler) ListManifests(rctx *router.Context) { rctx.SendJSON(code, res.Repositories) } +// GetProperty godoc +// +// @Summary Check images +// @Description Check images +// @Tags manifest +// @Failure 404,405,500 +// @Router /v2/checker/{name} [POST] +// @Router /v2/checker/ [POST] +// @Success 200 {object} imageoper.CheckImagesResult.Repositories +// @Produce application/json func (hand *Handler) CheckImages(rctx *router.Context) { name, _ := rctx.GetSubpath("name") params := &imageoper.CheckImagesParams{ diff --git a/configure b/configure index 31123c5..a5b0668 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for mstore 0.2.4. +# Generated by GNU Autoconf 2.72 for mstore 0.2.5. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, @@ -600,8 +600,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='mstore' PACKAGE_TARNAME='mstore' -PACKAGE_VERSION='0.2.4' -PACKAGE_STRING='mstore 0.2.4' +PACKAGE_VERSION='0.2.5' +PACKAGE_STRING='mstore 0.2.5' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1279,7 +1279,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures mstore 0.2.4 to adapt to many kinds of systems. +'configure' configures mstore 0.2.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1350,7 +1350,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of mstore 0.2.4:";; + short | recursive ) echo "Configuration of mstore 0.2.5:";; esac cat <<\_ACEOF @@ -1437,7 +1437,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -mstore configure 0.2.4 +mstore configure 0.2.5 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -1474,7 +1474,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by mstore $as_me 0.2.4, which was +It was created by mstore $as_me 0.2.5, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -2613,7 +2613,7 @@ fi # Define the identity of the package. PACKAGE='mstore' - VERSION='0.2.4' + VERSION='0.2.5' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -4501,7 +4501,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mstore $as_me 0.2.4, which was +This file was extended by mstore $as_me 0.2.5, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -4556,7 +4556,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -mstore config.status 0.2.4 +mstore config.status 0.2.5 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 6da5318..875b199 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([mstore],[0.2.4]) +AC_INIT([mstore],[0.2.5]) AM_INIT_AUTOMAKE([foreign subdir-objects tar-pax]) AC_PREFIX_DEFAULT(/usr/local) diff --git a/swagger.json b/swagger.json new file mode 100644 index 0000000..d994f74 --- /dev/null +++ b/swagger.json @@ -0,0 +1,734 @@ +{ + "schemes": [ + "http", + "https" + ], + "swagger": "2.0", + "info": { + "description": "API documentation", + "title": "Service API", + "contact": { + "name": "API Support", + "url": "http://www.swagger.io/support", + "email": "support@swagger.io" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + }, + "version": "1.0" + }, + "host": "localhost", + "basePath": "/", + "paths": { + "/v2/_catalog": { + "get": { + "description": "List manifests", + "produces": [ + "application/json" + ], + "tags": [ + "manifest" + ], + "summary": "List manifests", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/mstore_app_imageoper.ListManifestsResult" + } + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/v2/checker/": { + "post": { + "description": "Check images", + "produces": [ + "application/json" + ], + "tags": [ + "manifest" + ], + "summary": "Check images", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/mstore_app_imageoper.CheckImagesResult" + } + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/v2/checker/{name}": { + "post": { + "description": "Check images", + "produces": [ + "application/json" + ], + "tags": [ + "manifest" + ], + "summary": "Check images", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/mstore_app_imageoper.CheckImagesResult" + } + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/v2/{name}/manifests/{reference}": { + "get": { + "description": "Get manifest", + "tags": [ + "manifest" + ], + "summary": "Get manifest", + "parameters": [ + { + "type": "string", + "description": "Manifest path", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Manifest tag", + "name": "reference", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Length": { + "type": "string", + "description": "Manifest size" + }, + "Content-Type": { + "type": "string", + "description": "Manifest type" + }, + "Docker-Content-Digest": { + "type": "string", + "description": "Manigest digest" + } + } + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + }, + "500": { + "description": "Internal Server Error" + } + } + }, + "put": { + "description": "Put manifest", + "tags": [ + "manifest" + ], + "summary": "Put manifest", + "parameters": [ + { + "type": "string", + "description": "Manifest path", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Manifest tag", + "name": "reference", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Manifest size", + "name": "Content-Length", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "Manifest type", + "name": "Content-Type", + "in": "header", + "required": true + } + ], + "responses": { + "200": { + "description": "OK" + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + }, + "500": { + "description": "Internal Server Error" + } + } + }, + "delete": { + "description": "Delete manifest", + "tags": [ + "manifest" + ], + "summary": "Delete manifest", + "parameters": [ + { + "type": "string", + "description": "Manifest path", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Manifest tag", + "name": "reference", + "in": "path", + "required": true + } + ], + "responses": { + "202": { + "description": "Accepted" + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + }, + "500": { + "description": "Internal Server Error" + } + } + }, + "head": { + "description": "Get manifest info", + "tags": [ + "manifest" + ], + "summary": "Get manifest info", + "parameters": [ + { + "type": "string", + "description": "Manifest path", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Manifest tag", + "name": "reference", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Length": { + "type": "string", + "description": "Manifest size" + }, + "Content-Type": { + "type": "string", + "description": "Manifest type" + }, + "Docker-Content-Digest": { + "type": "string", + "description": "Manigest digest" + } + } + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/v2/{name}/referrers/{digest}": { + "get": { + "description": "Get manifest referer", + "produces": [ + "application/json" + ], + "tags": [ + "manifest" + ], + "summary": "Get manifest referer", + "parameters": [ + { + "type": "string", + "description": "Manifest path", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Manifest digest", + "name": "digest", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/mstore_app_imageoper.GetRefererResult" + } + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/v2/{name}/tags/list": { + "get": { + "description": "List manifest tags", + "produces": [ + "application/json" + ], + "tags": [ + "manifest" + ], + "summary": "List manifest tags", + "parameters": [ + { + "type": "string", + "description": "Manifest path", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/mstore_app_imageoper.GetTagsResult" + } + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + }, + "500": { + "description": "Internal Server Error" + } + } + } + }, + "/v3/collection/{path}": { + "delete": { + "description": "Delete collections", + "tags": [ + "file" + ], + "summary": "Delete collections", + "parameters": [ + { + "type": "string", + "description": "Collection path", + "name": "path", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK" + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + } + } + } + }, + "/v3/collections/{path}": { + "get": { + "description": "List collections", + "produces": [ + "application/json" + ], + "tags": [ + "file" + ], + "summary": "List collections", + "parameters": [ + { + "type": "string", + "description": "Collection path", + "name": "path", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + } + } + } + }, + "/v3/file/{filepath}": { + "get": { + "description": "Get file", + "produces": [ + "application/octet-stream", + "application/vnd.cncf.helm.chart.content.v1.tar+gzip" + ], + "tags": [ + "file" + ], + "summary": "Get file", + "parameters": [ + { + "type": "string", + "description": "File path", + "name": "filepath", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK" + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + } + } + }, + "put": { + "description": "Store file", + "tags": [ + "file" + ], + "summary": "Store file", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "File size", + "name": "Content-Size", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "File type", + "name": "Content-Type", + "in": "header", + "required": true + }, + { + "type": "string", + "description": "File path", + "name": "filepath", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK" + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + } + } + }, + "delete": { + "description": "Delete file", + "tags": [ + "file" + ], + "summary": "Delete file", + "parameters": [ + { + "type": "string", + "description": "File path", + "name": "filepath", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK" + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + } + } + }, + "head": { + "description": "Get file info", + "tags": [ + "file" + ], + "summary": "Get file info", + "parameters": [ + { + "type": "string", + "description": "File path", + "name": "filepath", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Collection": { + "type": "string", + "description": "File collection" + }, + "Content-Digest": { + "type": "string", + "description": "File digest" + }, + "Content-Name": { + "type": "string", + "description": "File name" + }, + "Content-Size": { + "type": "int64", + "description": "File size" + } + } + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + } + } + } + }, + "/v3/files/{path}": { + "get": { + "description": "List files", + "produces": [ + "application/json" + ], + "tags": [ + "file" + ], + "summary": "List files", + "parameters": [ + { + "type": "string", + "description": "File path", + "name": "path", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/descr.File" + } + } + }, + "404": { + "description": "Not Found" + }, + "405": { + "description": "Method Not Allowed" + } + } + } + } + }, + "definitions": { + "descr.File": { + "type": "object", + "properties": { + "checksum": { + "type": "string" + }, + "collection": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "helmHash": { + "type": "string" + }, + "helmMeta": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + } + } + }, + "descr.Tags": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "mstore_app_imageoper.CheckImagesResult": { + "type": "object", + "properties": { + "repositories": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "mstore_app_imageoper.GetRefererResult": { + "type": "object", + "properties": { + "reference": { + "type": "string" + } + } + }, + "mstore_app_imageoper.GetTagsResult": { + "type": "object", + "properties": { + "tagDescr": { + "$ref": "#/definitions/descr.Tags" + } + } + }, + "mstore_app_imageoper.ListManifestsResult": { + "type": "object", + "properties": { + "repositories": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/swagger.yaml b/swagger.yaml index 5cfdeda..075db41 100644 --- a/swagger.yaml +++ b/swagger.yaml @@ -27,6 +27,39 @@ definitions: updatedBy: type: string type: object + descr.Tags: + properties: + name: + type: string + tags: + items: + type: string + type: array + type: object + mstore_app_imageoper.CheckImagesResult: + properties: + repositories: + items: + type: string + type: array + type: object + mstore_app_imageoper.GetRefererResult: + properties: + reference: + type: string + type: object + mstore_app_imageoper.GetTagsResult: + properties: + tagDescr: + $ref: '#/definitions/descr.Tags' + type: object + mstore_app_imageoper.ListManifestsResult: + properties: + repositories: + items: + type: string + type: array + type: object host: localhost info: contact: @@ -40,6 +73,249 @@ info: title: Service API version: "1.0" paths: + /v2/_catalog: + get: + description: List manifests + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/mstore_app_imageoper.ListManifestsResult' + "404": + description: Not Found + "405": + description: Method Not Allowed + "500": + description: Internal Server Error + summary: List manifests + tags: + - manifest + /v2/{name}/manifests/{reference}: + delete: + description: Delete manifest + parameters: + - description: Manifest path + in: path + name: name + required: true + type: string + - description: Manifest tag + in: path + name: reference + required: true + type: string + responses: + "202": + description: Accepted + "404": + description: Not Found + "405": + description: Method Not Allowed + "500": + description: Internal Server Error + summary: Delete manifest + tags: + - manifest + get: + description: Get manifest + parameters: + - description: Manifest path + in: path + name: name + required: true + type: string + - description: Manifest tag + in: path + name: reference + required: true + type: string + responses: + "200": + description: OK + headers: + Content-Length: + description: Manifest size + type: string + Content-Type: + description: Manifest type + type: string + Docker-Content-Digest: + description: Manigest digest + type: string + "404": + description: Not Found + "405": + description: Method Not Allowed + "500": + description: Internal Server Error + summary: Get manifest + tags: + - manifest + head: + description: Get manifest info + parameters: + - description: Manifest path + in: path + name: name + required: true + type: string + - description: Manifest tag + in: path + name: reference + required: true + type: string + responses: + "200": + description: OK + headers: + Content-Length: + description: Manifest size + type: string + Content-Type: + description: Manifest type + type: string + Docker-Content-Digest: + description: Manigest digest + type: string + "404": + description: Not Found + "405": + description: Method Not Allowed + "500": + description: Internal Server Error + summary: Get manifest info + tags: + - manifest + put: + description: Put manifest + parameters: + - description: Manifest path + in: path + name: name + required: true + type: string + - description: Manifest tag + in: path + name: reference + required: true + type: string + - description: Manifest size + in: header + name: Content-Length + required: true + type: string + - description: Manifest type + in: header + name: Content-Type + required: true + type: string + responses: + "200": + description: OK + "404": + description: Not Found + "405": + description: Method Not Allowed + "500": + description: Internal Server Error + summary: Put manifest + tags: + - manifest + /v2/{name}/referrers/{digest}: + get: + description: Get manifest referer + parameters: + - description: Manifest path + in: path + name: name + required: true + type: string + - description: Manifest digest + in: path + name: digest + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/mstore_app_imageoper.GetRefererResult' + "404": + description: Not Found + "405": + description: Method Not Allowed + "500": + description: Internal Server Error + summary: Get manifest referer + tags: + - manifest + /v2/{name}/tags/list: + get: + description: List manifest tags + parameters: + - description: Manifest path + in: path + name: name + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/mstore_app_imageoper.GetTagsResult' + "404": + description: Not Found + "405": + description: Method Not Allowed + "500": + description: Internal Server Error + summary: List manifest tags + tags: + - manifest + /v2/checker/: + post: + description: Check images + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/mstore_app_imageoper.CheckImagesResult' + "404": + description: Not Found + "405": + description: Method Not Allowed + "500": + description: Internal Server Error + summary: Check images + tags: + - manifest + /v2/checker/{name}: + post: + description: Check images + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/mstore_app_imageoper.CheckImagesResult' + "404": + description: Not Found + "405": + description: Method Not Allowed + "500": + description: Internal Server Error + summary: Check images + tags: + - manifest /v3/collection/{path}: delete: description: Delete collections