Add handlers that will communicate with release service (#2651)

This commit is contained in:
Javier Adriel
2023-02-09 14:49:07 -06:00
committed by GitHub
parent 7a14f0c012
commit 6fbb4b568b
12 changed files with 1110 additions and 0 deletions

85
models/release_info.go Normal file
View File

@@ -0,0 +1,85 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// ReleaseInfo release info
//
// swagger:model releaseInfo
type ReleaseInfo struct {
// breaking changes content
BreakingChangesContent string `json:"breakingChangesContent,omitempty"`
// context content
ContextContent string `json:"contextContent,omitempty"`
// name
Name string `json:"name,omitempty"`
// new features content
NewFeaturesContent string `json:"newFeaturesContent,omitempty"`
// notes content
NotesContent string `json:"notesContent,omitempty"`
// security content
SecurityContent string `json:"securityContent,omitempty"`
// tag
Tag string `json:"tag,omitempty"`
}
// Validate validates this release info
func (m *ReleaseInfo) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this release info based on context it is used
func (m *ReleaseInfo) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *ReleaseInfo) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *ReleaseInfo) UnmarshalBinary(b []byte) error {
var res ReleaseInfo
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@@ -0,0 +1,133 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"strconv"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// ReleaseListResponse release list response
//
// swagger:model releaseListResponse
type ReleaseListResponse struct {
// results
Results []*ReleaseInfo `json:"results"`
}
// Validate validates this release list response
func (m *ReleaseListResponse) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateResults(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *ReleaseListResponse) validateResults(formats strfmt.Registry) error {
if swag.IsZero(m.Results) { // not required
return nil
}
for i := 0; i < len(m.Results); i++ {
if swag.IsZero(m.Results[i]) { // not required
continue
}
if m.Results[i] != nil {
if err := m.Results[i].Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("results" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("results" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
// ContextValidate validate this release list response based on the context it is used
func (m *ReleaseListResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
if err := m.contextValidateResults(ctx, formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *ReleaseListResponse) contextValidateResults(ctx context.Context, formats strfmt.Registry) error {
for i := 0; i < len(m.Results); i++ {
if m.Results[i] != nil {
if err := m.Results[i].ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("results" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("results" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
// MarshalBinary interface implementation
func (m *ReleaseListResponse) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *ReleaseListResponse) UnmarshalBinary(b []byte) error {
var res ReleaseListResponse
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

99
restapi/admin_releases.go Normal file
View File

@@ -0,0 +1,99 @@
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package restapi
import (
"context"
"encoding/json"
"fmt"
"net/http"
"time"
"github.com/go-openapi/runtime/middleware"
"github.com/minio/console/models"
"github.com/minio/console/restapi/operations"
release "github.com/minio/console/restapi/operations/release"
"github.com/minio/pkg/env"
)
var (
releaseServiceHostEnvVar = "RELEASE_SERVICE_HOST"
defaultReleaseServiceHost = "https://release-service.apps.min.dev"
)
func registerReleasesHandlers(api *operations.ConsoleAPI) {
api.ReleaseListReleasesHandler = release.ListReleasesHandlerFunc(func(params release.ListReleasesParams, session *models.Principal) middleware.Responder {
resp, err := GetReleaseListResponse(session, params)
if err != nil {
return release.NewListReleasesDefault(int(err.Code)).WithPayload(err)
}
return release.NewListReleasesOK().WithPayload(resp)
})
}
func GetReleaseListResponse(session *models.Principal, params release.ListReleasesParams) (*models.ReleaseListResponse, *models.Error) {
ctx, cancel := context.WithCancel(params.HTTPRequest.Context())
defer cancel()
repo := params.Repo
currentRelease := ""
if params.Current != nil {
currentRelease = *params.Current
}
return releaseList(ctx, repo, currentRelease)
}
func releaseList(ctx context.Context, repo, currentRelease string) (*models.ReleaseListResponse, *models.Error) {
serviceURL := getReleaseServiceURL()
releases, err := getReleases(serviceURL, repo, currentRelease)
if err != nil {
return nil, ErrorWithContext(ctx, err)
}
return &models.ReleaseListResponse{
Results: releases,
}, nil
}
func getReleaseServiceURL() string {
host := env.Get(releaseServiceHostEnvVar, defaultReleaseServiceHost)
return fmt.Sprintf("%s/releases", host)
}
func getReleases(url, repo, currentRelease string) ([]*models.ReleaseInfo, error) {
client := &http.Client{Timeout: time.Second * 5}
req, err := http.NewRequest("GET", url, nil)
q := req.URL.Query()
q.Add("repo", repo)
q.Add("current", currentRelease)
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("error getting releases: %s", resp.Status)
}
var releases []*models.ReleaseInfo
err = json.NewDecoder(resp.Body).Decode(&releases)
if err != nil {
return nil, err
}
return releases, nil
}

View File

@@ -0,0 +1,104 @@
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package restapi
import (
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"os"
"testing"
"github.com/minio/console/models"
"github.com/minio/console/restapi/operations"
release "github.com/minio/console/restapi/operations/release"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
)
type ReleasesTestSuite struct {
suite.Suite
assert *assert.Assertions
currentServer string
isServerSet bool
getServer *httptest.Server
withError bool
}
func (suite *ReleasesTestSuite) SetupSuite() {
suite.assert = assert.New(suite.T())
suite.getServer = httptest.NewServer(http.HandlerFunc(suite.getHandler))
suite.currentServer, suite.isServerSet = os.LookupEnv(releaseServiceHostEnvVar)
os.Setenv(releaseServiceHostEnvVar, suite.getServer.URL)
}
func (suite *ReleasesTestSuite) TearDownSuite() {
if suite.isServerSet {
os.Setenv(releaseServiceHostEnvVar, suite.currentServer)
} else {
os.Unsetenv(releaseServiceHostEnvVar)
}
}
func (suite *ReleasesTestSuite) getHandler(
w http.ResponseWriter, r *http.Request,
) {
if suite.withError {
w.WriteHeader(400)
} else {
w.WriteHeader(200)
response := []*models.ReleaseListResponse{{}}
bytes, _ := json.Marshal(response)
fmt.Fprint(w, string(bytes))
}
}
func (suite *ReleasesTestSuite) TestRegisterReleasesHandlers() {
api := &operations.ConsoleAPI{}
suite.assert.Nil(api.ReleaseListReleasesHandler)
registerReleasesHandlers(api)
suite.assert.NotNil(api.ReleaseListReleasesHandler)
}
func (suite *ReleasesTestSuite) TestGetReleasesWithError() {
api := &operations.ConsoleAPI{}
current := "mock"
registerReleasesHandlers(api)
params := release.NewListReleasesParams()
params.Current = &current
params.HTTPRequest = &http.Request{}
suite.withError = true
response := api.ReleaseListReleasesHandler.Handle(params, &models.Principal{})
_, ok := response.(*release.ListReleasesDefault)
suite.assert.True(ok)
}
func (suite *ReleasesTestSuite) TestGetReleasesWithoutError() {
api := &operations.ConsoleAPI{}
registerReleasesHandlers(api)
params := release.NewListReleasesParams()
params.HTTPRequest = &http.Request{}
suite.withError = false
response := api.ReleaseListReleasesHandler.Handle(params, &models.Principal{})
_, ok := response.(*release.ListReleasesOK)
suite.assert.True(ok)
}
func TestReleases(t *testing.T) {
suite.Run(t, new(ReleasesTestSuite))
}

View File

@@ -166,6 +166,8 @@ func configureAPI(api *operations.ConsoleAPI) http.Handler {
// Register Account handlers
registerAccountHandlers(api)
registerReleasesHandlers(api)
api.PreServerShutdown = func() {}
api.ServerShutdown = func() {}

View File

@@ -4056,6 +4056,44 @@ func init() {
}
}
},
"/releases/": {
"get": {
"tags": [
"release"
],
"summary": "Get repo releases for a given version",
"operationId": "ListReleases",
"parameters": [
{
"type": "string",
"description": "repo name",
"name": "repo",
"in": "query",
"required": true
},
{
"type": "string",
"description": "Current Release",
"name": "current",
"in": "query"
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/releaseListResponse"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
}
},
"/remote-buckets": {
"get": {
"tags": [
@@ -7372,6 +7410,43 @@ func init() {
}
}
},
"releaseInfo": {
"type": "object",
"properties": {
"breakingChangesContent": {
"type": "string"
},
"contextContent": {
"type": "string"
},
"name": {
"type": "string"
},
"newFeaturesContent": {
"type": "string"
},
"notesContent": {
"type": "string"
},
"securityContent": {
"type": "string"
},
"tag": {
"type": "string"
}
}
},
"releaseListResponse": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/releaseInfo"
}
}
}
},
"remoteBucket": {
"type": "object",
"required": [
@@ -12539,6 +12614,44 @@ func init() {
}
}
},
"/releases/": {
"get": {
"tags": [
"release"
],
"summary": "Get repo releases for a given version",
"operationId": "ListReleases",
"parameters": [
{
"type": "string",
"description": "repo name",
"name": "repo",
"in": "query",
"required": true
},
{
"type": "string",
"description": "Current Release",
"name": "current",
"in": "query"
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/releaseListResponse"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
}
},
"/remote-buckets": {
"get": {
"tags": [
@@ -15981,6 +16094,43 @@ func init() {
}
}
},
"releaseInfo": {
"type": "object",
"properties": {
"breakingChangesContent": {
"type": "string"
},
"contextContent": {
"type": "string"
},
"name": {
"type": "string"
},
"newFeaturesContent": {
"type": "string"
},
"notesContent": {
"type": "string"
},
"securityContent": {
"type": "string"
},
"tag": {
"type": "string"
}
}
},
"releaseListResponse": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"$ref": "#/definitions/releaseInfo"
}
}
}
},
"remoteBucket": {
"type": "object",
"required": [

View File

@@ -50,6 +50,7 @@ import (
"github.com/minio/console/restapi/operations/object"
"github.com/minio/console/restapi/operations/policy"
"github.com/minio/console/restapi/operations/profile"
"github.com/minio/console/restapi/operations/release"
"github.com/minio/console/restapi/operations/service"
"github.com/minio/console/restapi/operations/service_account"
"github.com/minio/console/restapi/operations/site_replication"
@@ -371,6 +372,9 @@ func NewConsoleAPI(spec *loads.Document) *ConsoleAPI {
BucketListPoliciesWithBucketHandler: bucket.ListPoliciesWithBucketHandlerFunc(func(params bucket.ListPoliciesWithBucketParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation bucket.ListPoliciesWithBucket has not yet been implemented")
}),
ReleaseListReleasesHandler: release.ListReleasesHandlerFunc(func(params release.ListReleasesParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation release.ListReleases has not yet been implemented")
}),
BucketListRemoteBucketsHandler: bucket.ListRemoteBucketsHandlerFunc(func(params bucket.ListRemoteBucketsParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation bucket.ListRemoteBuckets has not yet been implemented")
}),
@@ -789,6 +793,8 @@ type ConsoleAPI struct {
PolicyListPoliciesHandler policy.ListPoliciesHandler
// BucketListPoliciesWithBucketHandler sets the operation handler for the list policies with bucket operation
BucketListPoliciesWithBucketHandler bucket.ListPoliciesWithBucketHandler
// ReleaseListReleasesHandler sets the operation handler for the list releases operation
ReleaseListReleasesHandler release.ListReleasesHandler
// BucketListRemoteBucketsHandler sets the operation handler for the list remote buckets operation
BucketListRemoteBucketsHandler bucket.ListRemoteBucketsHandler
// ServiceAccountListUserServiceAccountsHandler sets the operation handler for the list user service accounts operation
@@ -1275,6 +1281,9 @@ func (o *ConsoleAPI) Validate() error {
if o.BucketListPoliciesWithBucketHandler == nil {
unregistered = append(unregistered, "bucket.ListPoliciesWithBucketHandler")
}
if o.ReleaseListReleasesHandler == nil {
unregistered = append(unregistered, "release.ListReleasesHandler")
}
if o.BucketListRemoteBucketsHandler == nil {
unregistered = append(unregistered, "bucket.ListRemoteBucketsHandler")
}
@@ -1930,6 +1939,10 @@ func (o *ConsoleAPI) initHandlerCache() {
if o.handlers["GET"] == nil {
o.handlers["GET"] = make(map[string]http.Handler)
}
o.handlers["GET"]["/releases"] = release.NewListReleases(o.context, o.ReleaseListReleasesHandler)
if o.handlers["GET"] == nil {
o.handlers["GET"] = make(map[string]http.Handler)
}
o.handlers["GET"]["/remote-buckets"] = bucket.NewListRemoteBuckets(o.context, o.BucketListRemoteBucketsHandler)
if o.handlers["GET"] == nil {
o.handlers["GET"] = make(map[string]http.Handler)

View File

@@ -0,0 +1,88 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package release
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"net/http"
"github.com/go-openapi/runtime/middleware"
"github.com/minio/console/models"
)
// ListReleasesHandlerFunc turns a function with the right signature into a list releases handler
type ListReleasesHandlerFunc func(ListReleasesParams, *models.Principal) middleware.Responder
// Handle executing the request and returning a response
func (fn ListReleasesHandlerFunc) Handle(params ListReleasesParams, principal *models.Principal) middleware.Responder {
return fn(params, principal)
}
// ListReleasesHandler interface for that can handle valid list releases params
type ListReleasesHandler interface {
Handle(ListReleasesParams, *models.Principal) middleware.Responder
}
// NewListReleases creates a new http.Handler for the list releases operation
func NewListReleases(ctx *middleware.Context, handler ListReleasesHandler) *ListReleases {
return &ListReleases{Context: ctx, Handler: handler}
}
/*
ListReleases swagger:route GET /releases/ release listReleases
Get repo releases for a given version
*/
type ListReleases struct {
Context *middleware.Context
Handler ListReleasesHandler
}
func (o *ListReleases) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
route, rCtx, _ := o.Context.RouteInfo(r)
if rCtx != nil {
*r = *rCtx
}
var Params = NewListReleasesParams()
uprinc, aCtx, err := o.Context.Authorize(r, route)
if err != nil {
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
if aCtx != nil {
*r = *aCtx
}
var principal *models.Principal
if uprinc != nil {
principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise
}
if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
res := o.Handler.Handle(Params, principal) // actually handle the request
o.Context.Respond(rw, r, route.Produces, route, res)
}

View File

@@ -0,0 +1,126 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package release
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/errors"
"github.com/go-openapi/runtime"
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/validate"
)
// NewListReleasesParams creates a new ListReleasesParams object
//
// There are no default values defined in the spec.
func NewListReleasesParams() ListReleasesParams {
return ListReleasesParams{}
}
// ListReleasesParams contains all the bound params for the list releases operation
// typically these are obtained from a http.Request
//
// swagger:parameters ListReleases
type ListReleasesParams struct {
// HTTP Request Object
HTTPRequest *http.Request `json:"-"`
/*Current Release
In: query
*/
Current *string
/*repo name
Required: true
In: query
*/
Repo string
}
// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
// for simple values it will use straight method calls.
//
// To ensure default values, the struct must have been initialized with NewListReleasesParams() beforehand.
func (o *ListReleasesParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
var res []error
o.HTTPRequest = r
qs := runtime.Values(r.URL.Query())
qCurrent, qhkCurrent, _ := qs.GetOK("current")
if err := o.bindCurrent(qCurrent, qhkCurrent, route.Formats); err != nil {
res = append(res, err)
}
qRepo, qhkRepo, _ := qs.GetOK("repo")
if err := o.bindRepo(qRepo, qhkRepo, route.Formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
// bindCurrent binds and validates parameter Current from query.
func (o *ListReleasesParams) bindCurrent(rawData []string, hasKey bool, formats strfmt.Registry) error {
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: false
// AllowEmptyValue: false
if raw == "" { // empty values pass all other validations
return nil
}
o.Current = &raw
return nil
}
// bindRepo binds and validates parameter Repo from query.
func (o *ListReleasesParams) bindRepo(rawData []string, hasKey bool, formats strfmt.Registry) error {
if !hasKey {
return errors.Required("repo", "query", rawData)
}
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: true
// AllowEmptyValue: false
if err := validate.RequiredString("repo", "query", raw); err != nil {
return err
}
o.Repo = raw
return nil
}

View File

@@ -0,0 +1,135 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package release
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/runtime"
"github.com/minio/console/models"
)
// ListReleasesOKCode is the HTTP code returned for type ListReleasesOK
const ListReleasesOKCode int = 200
/*
ListReleasesOK A successful response.
swagger:response listReleasesOK
*/
type ListReleasesOK struct {
/*
In: Body
*/
Payload *models.ReleaseListResponse `json:"body,omitempty"`
}
// NewListReleasesOK creates ListReleasesOK with default headers values
func NewListReleasesOK() *ListReleasesOK {
return &ListReleasesOK{}
}
// WithPayload adds the payload to the list releases o k response
func (o *ListReleasesOK) WithPayload(payload *models.ReleaseListResponse) *ListReleasesOK {
o.Payload = payload
return o
}
// SetPayload sets the payload to the list releases o k response
func (o *ListReleasesOK) SetPayload(payload *models.ReleaseListResponse) {
o.Payload = payload
}
// WriteResponse to the client
func (o *ListReleasesOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(200)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}
/*
ListReleasesDefault Generic error response.
swagger:response listReleasesDefault
*/
type ListReleasesDefault struct {
_statusCode int
/*
In: Body
*/
Payload *models.Error `json:"body,omitempty"`
}
// NewListReleasesDefault creates ListReleasesDefault with default headers values
func NewListReleasesDefault(code int) *ListReleasesDefault {
if code <= 0 {
code = 500
}
return &ListReleasesDefault{
_statusCode: code,
}
}
// WithStatusCode adds the status to the list releases default response
func (o *ListReleasesDefault) WithStatusCode(code int) *ListReleasesDefault {
o._statusCode = code
return o
}
// SetStatusCode sets the status to the list releases default response
func (o *ListReleasesDefault) SetStatusCode(code int) {
o._statusCode = code
}
// WithPayload adds the payload to the list releases default response
func (o *ListReleasesDefault) WithPayload(payload *models.Error) *ListReleasesDefault {
o.Payload = payload
return o
}
// SetPayload sets the payload to the list releases default response
func (o *ListReleasesDefault) SetPayload(payload *models.Error) {
o.Payload = payload
}
// WriteResponse to the client
func (o *ListReleasesDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(o._statusCode)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}

View File

@@ -0,0 +1,126 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2023 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package release
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"errors"
"net/url"
golangswaggerpaths "path"
)
// ListReleasesURL generates an URL for the list releases operation
type ListReleasesURL struct {
Current *string
Repo string
_basePath string
// avoid unkeyed usage
_ struct{}
}
// WithBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *ListReleasesURL) WithBasePath(bp string) *ListReleasesURL {
o.SetBasePath(bp)
return o
}
// SetBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *ListReleasesURL) SetBasePath(bp string) {
o._basePath = bp
}
// Build a url path and query string
func (o *ListReleasesURL) Build() (*url.URL, error) {
var _result url.URL
var _path = "/releases/"
_basePath := o._basePath
if _basePath == "" {
_basePath = "/api/v1"
}
_result.Path = golangswaggerpaths.Join(_basePath, _path)
qs := make(url.Values)
var currentQ string
if o.Current != nil {
currentQ = *o.Current
}
if currentQ != "" {
qs.Set("current", currentQ)
}
repoQ := o.Repo
if repoQ != "" {
qs.Set("repo", repoQ)
}
_result.RawQuery = qs.Encode()
return &_result, nil
}
// Must is a helper function to panic when the url builder returns an error
func (o *ListReleasesURL) Must(u *url.URL, err error) *url.URL {
if err != nil {
panic(err)
}
if u == nil {
panic("url can't be nil")
}
return u
}
// String returns the string representation of the path with query string
func (o *ListReleasesURL) String() string {
return o.Must(o.Build()).String()
}
// BuildFull builds a full url with scheme, host, path and query string
func (o *ListReleasesURL) BuildFull(scheme, host string) (*url.URL, error) {
if scheme == "" {
return nil, errors.New("scheme is required for a full url on ListReleasesURL")
}
if host == "" {
return nil, errors.New("host is required for a full url on ListReleasesURL")
}
base, err := o.Build()
if err != nil {
return nil, err
}
base.Scheme = scheme
base.Host = host
return base, nil
}
// StringFull returns the string representation of a complete url
func (o *ListReleasesURL) StringFull(scheme, host string) string {
return o.Must(o.BuildFull(scheme, host)).String()
}

View File

@@ -3418,6 +3418,31 @@ paths:
$ref: "#/definitions/error"
tags:
- idp
/releases:
get:
summary: Get repo releases for a given version
operationId: ListReleases
parameters:
- name: repo
description: repo name
in: query
type: string
required: true
- name: current
description: Current Release
in: query
type: string
responses:
200:
description: A successful response.
schema:
$ref: "#/definitions/releaseListResponse"
default:
description: Generic error response.
schema:
$ref: "#/definitions/error"
tags:
- release
definitions:
accountChangePasswordRequest:
@@ -5798,3 +5823,27 @@ definitions:
properties:
restart:
type: boolean
releaseListResponse:
type: object
properties:
results:
type: array
items:
$ref: "#/definitions/releaseInfo"
releaseInfo:
type: object
properties:
tag:
type: string
name:
type: string
notesContent:
type: string
securityContent:
type: string
breakingChangesContent:
type: string
contextContent:
type: string
newFeaturesContent:
type: string