app/cluster/update.go (62 lines of code) (raw):

package cluster import ( "ddm-admin-console/app/registry" "encoding/json" "fmt" "net/http" "time" "github.com/gin-gonic/gin" "github.com/go-playground/validator/v10" "github.com/pkg/errors" "ddm-admin-console/router" "ddm-admin-console/service/gerrit" ) type updateRequest struct { Branch string `form:"branch" binding:"required" json:"branch"` } func (a *App) clusterUpdate(ctx *gin.Context) (router.Response, error) { var ur updateRequest if err := ctx.ShouldBind(&ur); err != nil { validationErrors, ok := err.(validator.ValidationErrors) if !ok { return nil, errors.Wrap(err, "unable to parse registry form") } templateArgs, err := json.Marshal(gin.H{ "errorsMap": validationErrors, }) if err != nil { return nil, errors.Wrap(err, "unable to encode template arguments") } return router.MakeHTMLResponse(200, "cluster/edit.html", gin.H{ "page": "cluster", "errorsMap": validationErrors, "backupConf": BackupConfig{}, "templateArgs": string(templateArgs), }), nil } prj, err := a.Services.Gerrit.GetProject(ctx, a.Config.CodebaseName) if err != nil { return nil, errors.Wrap(err, "unable to get registry gerrit project") } cb, err := a.Codebase.Get(a.Config.CodebaseName) if err != nil { return nil, errors.Wrap(err, "unable to get cluster codebase") } if err := a.Services.Gerrit.CreateMergeRequest(ctx, &gerrit.MergeRequest{ CommitMessage: fmt.Sprintf("Update cluster to %s", ur.Branch), ProjectName: prj.Spec.Name, Name: fmt.Sprintf("%s-update-%d", a.Config.CodebaseName, time.Now().Unix()), AuthorName: ctx.GetString(router.UserNameSessionKey), AuthorEmail: ctx.GetString(router.UserEmailSessionKey), Labels: map[string]string{ registry.MRLabelTarget: registry.MRTargetClusterUpdate, registry.MRLabelAction: registry.MRLabelActionBranchMerge, registry.MRLabelSourceBranch: ur.Branch, registry.MRLabelTargetBranch: cb.Spec.DefaultBranch, }, }); err != nil { return nil, errors.Wrap(err, "unable to create update merge request") } return router.MakeRedirectResponse(http.StatusFound, "/admin/cluster/management"), nil }