Skip to content

feat: build edit v1beta2 #6694

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 28 commits into from
Jul 31, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
d936815
feat: build edit v2 refactoring
Ash-exp Jun 25, 2025
7913950
Merge remote-tracking branch 'origin/develop' into feat/bulk-edit-v1b…
Ash-exp Jun 27, 2025
1841839
feat: added migration support for build edit v2 new table
Ash-exp Jun 29, 2025
4a3a809
Merge branch 'develop' into feat/bulk-edit-v1beta2
Ash-exp Jun 29, 2025
243220f
chore: updated method names
Ash-exp Jun 30, 2025
1111cc9
chore: common refactoring for bulk edit v2
Ash-exp Jul 7, 2025
bac664b
feat: added dryrun bulk edit v1beta2
Ash-exp Jul 12, 2025
13360bf
chore: oss ent refactorings
Ash-exp Jul 13, 2025
a4ae89b
chore: code restructurings
Ash-exp Jul 14, 2025
9325b2f
Merge remote-tracking branch 'origin/develop' into feat/bulk-edit-v1b…
Ash-exp Jul 14, 2025
4fe2e84
feat: add JSONPathVersion and enhance optional pointer handling in te…
Ash-exp Jul 14, 2025
56faf8e
feat: implement GetLatestEnvironmentProperties method in ChartService…
Ash-exp Jul 15, 2025
b392a66
updated migration script
Ash-exp Jul 15, 2025
04ec183
updated migration script
Ash-exp Jul 15, 2025
19bb1a0
feat: update schema and SQL migration for batch API versioning and ki…
Ash-exp Jul 16, 2025
fedeef8
feat: enhance bulk edit functionality for v1beta2 with improved selec…
Ash-exp Jul 19, 2025
45f135f
feat: feat: refine bulk edit documentation for v1beta2 by improving f…
Ash-exp Jul 19, 2025
998c591
Merge remote-tracking branch 'origin/develop' into feat/bulk-edit-v1b…
Ash-exp Jul 20, 2025
1078d3f
feat: refactor bulk edit SQL migration for improved structure and cla…
Ash-exp Jul 21, 2025
3b3dba8
feat: fix error handling in bulk update response and utility function
Ash-exp Jul 22, 2025
04c03ab
fix: JSON schema for selectors
Ash-exp Jul 22, 2025
84650b3
chore: review comments incorporated
Ash-exp Jul 22, 2025
8d97acc
chore: review comments incorporated
Ash-exp Jul 22, 2025
006d7bf
feat: update receiver type for EnvConfigOverrideReadServiceImpl metho…
Ash-exp Jul 26, 2025
b0a3cfd
Merge branch 'develop' into feat/bulk-edit-v1beta2
Ash-exp Jul 29, 2025
19faed1
feat: enhance bulk edit script for v1beta2 with detailed introduction…
Ash-exp Jul 31, 2025
12c1281
Merge remote-tracking branch 'origin/develop' into feat/bulk-edit-v1b…
Ash-exp Jul 31, 2025
343373f
chore: rename bulk edit SQL migration files for consistency
Ash-exp Jul 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions Wire.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ import (
app2 "github.com/devtron-labs/devtron/internal/sql/repository/app"
appStatusRepo "github.com/devtron-labs/devtron/internal/sql/repository/appStatus"
appWorkflow2 "github.com/devtron-labs/devtron/internal/sql/repository/appWorkflow"
"github.com/devtron-labs/devtron/internal/sql/repository/bulkUpdate"
"github.com/devtron-labs/devtron/internal/sql/repository/chartConfig"
dockerRegistryRepository "github.com/devtron-labs/devtron/internal/sql/repository/dockerRegistry"
"github.com/devtron-labs/devtron/internal/sql/repository/helper"
Expand All @@ -128,6 +127,7 @@ import (
"github.com/devtron-labs/devtron/pkg/build"
"github.com/devtron-labs/devtron/pkg/build/artifacts/imageTagging"
pipeline6 "github.com/devtron-labs/devtron/pkg/build/pipeline"
repository11 "github.com/devtron-labs/devtron/pkg/bulkAction/repository"
"github.com/devtron-labs/devtron/pkg/bulkAction/service"
"github.com/devtron-labs/devtron/pkg/chart"
"github.com/devtron-labs/devtron/pkg/chart/gitOpsConfig"
Expand Down Expand Up @@ -268,8 +268,8 @@ func InitializeApp() (*App, error) {
app.NewAppService,
wire.Bind(new(app.AppService), new(*app.AppServiceImpl)),

bulkUpdate.NewBulkUpdateRepository,
wire.Bind(new(bulkUpdate.BulkUpdateRepository), new(*bulkUpdate.BulkUpdateRepositoryImpl)),
repository11.NewBulkEditRepository,
wire.Bind(new(repository11.BulkEditRepository), new(*repository11.BulkEditRepositoryImpl)),

chartConfig.NewEnvConfigOverrideRepository,
wire.Bind(new(chartConfig.EnvConfigOverrideRepository), new(*chartConfig.EnvConfigOverrideRepositoryImpl)),
Expand Down Expand Up @@ -372,6 +372,8 @@ func InitializeApp() (*App, error) {
wire.Bind(new(chart.ChartService), new(*chart.ChartServiceImpl)),
read2.NewChartReadServiceImpl,
wire.Bind(new(read2.ChartReadService), new(*read2.ChartReadServiceImpl)),

service.NewBulkUpdateServiceEntImpl,
service.NewBulkUpdateServiceImpl,
wire.Bind(new(service.BulkUpdateService), new(*service.BulkUpdateServiceImpl)),

Expand Down
105 changes: 48 additions & 57 deletions api/restHandler/BulkUpdateRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ package restHandler
import (
"encoding/json"
"fmt"
bean4 "github.com/devtron-labs/devtron/pkg/auth/user/bean"
util2 "github.com/devtron-labs/devtron/pkg/auth/user/util"
"github.com/devtron-labs/devtron/pkg/build/git/gitMaterial/repository"
"github.com/devtron-labs/devtron/pkg/build/git/gitProvider"
"github.com/devtron-labs/devtron/pkg/bulkAction/bean"
Expand All @@ -40,25 +40,37 @@ import (
"github.com/devtron-labs/devtron/pkg/auth/user"
"github.com/devtron-labs/devtron/pkg/chart"
"github.com/devtron-labs/devtron/pkg/pipeline"
"github.com/devtron-labs/devtron/pkg/team"
"github.com/devtron-labs/devtron/util/rbac"
"github.com/gorilla/mux"
"go.uber.org/zap"
"gopkg.in/go-playground/validator.v9"
)

type BulkUpdateRestHandler interface {
FindBulkUpdateReadme(w http.ResponseWriter, r *http.Request)
GetImpactedAppsName(w http.ResponseWriter, r *http.Request)
BulkUpdate(w http.ResponseWriter, r *http.Request)

//deprecated
BulkHibernate(w http.ResponseWriter, r *http.Request)
BulkHibernateV1(w http.ResponseWriter, r *http.Request)
BulkUnHibernate(w http.ResponseWriter, r *http.Request)
BulkDeploy(w http.ResponseWriter, r *http.Request)
BulkBuildTrigger(w http.ResponseWriter, r *http.Request)

HandleCdPipelineBulkAction(w http.ResponseWriter, r *http.Request)
BulkEditRestHandler
}

type BulkEditRestHandler interface {
BulkEditV1Beta1RestHandler
// BulkEditV1Beta2RestHandlerEnt interface that defines the methods for bulk edit v1beta2.
// v1beta2 is an Ent only version, so it does not have a separate interface.
BulkEditV1Beta2RestHandlerEnt
}

type BulkEditV1Beta1RestHandler interface {
GetBulkEditConfig(w http.ResponseWriter, r *http.Request)
DryRunBulkEdit(w http.ResponseWriter, r *http.Request)
BulkEdit(w http.ResponseWriter, r *http.Request)
}

type BulkUpdateRestHandlerImpl struct {
pipelineBuilder pipeline.PipelineBuilder
ciPipelineRepository pipelineConfig.CiPipelineRepository
Expand All @@ -69,7 +81,6 @@ type BulkUpdateRestHandlerImpl struct {
propertiesConfigService pipeline.PropertiesConfigService
userAuthService user.UserService
validator *validator.Validate
teamService team.TeamService
enforcer casbin.Enforcer
gitSensorClient gitSensor.Client
pipelineRepository pipelineConfig.PipelineRepository
Expand All @@ -78,7 +89,7 @@ type BulkUpdateRestHandlerImpl struct {
envService environment.EnvironmentService
gitRegistryConfig gitProvider.GitRegistryConfig
dockerRegistryConfig pipeline.DockerRegistryConfig
cdHandelr pipeline.CdHandler
cdHandler pipeline.CdHandler
appCloneService appClone.AppCloneService
materialRepository repository.MaterialRepository
}
Expand All @@ -88,15 +99,14 @@ func NewBulkUpdateRestHandlerImpl(pipelineBuilder pipeline.PipelineBuilder, logg
chartService chart.ChartService,
propertiesConfigService pipeline.PropertiesConfigService,
userAuthService user.UserService,
teamService team.TeamService,
enforcer casbin.Enforcer,
ciHandler pipeline.CiHandler,
validator *validator.Validate,
gitSensorClient gitSensor.Client,
ciPipelineRepository pipelineConfig.CiPipelineRepository, pipelineRepository pipelineConfig.PipelineRepository,
enforcerUtil rbac.EnforcerUtil, envService environment.EnvironmentService,
gitRegistryConfig gitProvider.GitRegistryConfig, dockerRegistryConfig pipeline.DockerRegistryConfig,
cdHandelr pipeline.CdHandler,
cdHandler pipeline.CdHandler,
appCloneService appClone.AppCloneService,
appWorkflowService appWorkflow.AppWorkflowService,
materialRepository repository.MaterialRepository,
Expand All @@ -109,7 +119,6 @@ func NewBulkUpdateRestHandlerImpl(pipelineBuilder pipeline.PipelineBuilder, logg
propertiesConfigService: propertiesConfigService,
userAuthService: userAuthService,
validator: validator,
teamService: teamService,
enforcer: enforcer,
ciHandler: ciHandler,
gitSensorClient: gitSensorClient,
Expand All @@ -119,26 +128,24 @@ func NewBulkUpdateRestHandlerImpl(pipelineBuilder pipeline.PipelineBuilder, logg
envService: envService,
gitRegistryConfig: gitRegistryConfig,
dockerRegistryConfig: dockerRegistryConfig,
cdHandelr: cdHandelr,
cdHandler: cdHandler,
appCloneService: appCloneService,
appWorkflowService: appWorkflowService,
materialRepository: materialRepository,
}
}

func (handler BulkUpdateRestHandlerImpl) FindBulkUpdateReadme(w http.ResponseWriter, r *http.Request) {
var operation string
func (handler BulkUpdateRestHandlerImpl) GetBulkEditConfig(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
apiVersion := vars["apiVersion"]
kind := vars["kind"]
operation = fmt.Sprintf("%s/%s", apiVersion, kind)
response, err := handler.bulkUpdateService.FindBulkUpdateReadme(operation)
response, err := handler.bulkUpdateService.GetBulkEditConfig(apiVersion, kind)
if err != nil {
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
//auth free, only login required
var responseArr []*bean.BulkUpdateSeeExampleResponse
// auth free, only login required
var responseArr []*bean.BulkEditConfigResponse
responseArr = append(responseArr, response)
common.WriteJsonResp(w, nil, responseArr, http.StatusOK)
}
Expand All @@ -158,7 +165,8 @@ func (handler BulkUpdateRestHandlerImpl) CheckAuthForImpactedObjects(AppId int,
return true

}
func (handler BulkUpdateRestHandlerImpl) GetImpactedAppsName(w http.ResponseWriter, r *http.Request) {

func (handler BulkUpdateRestHandlerImpl) DryRunBulkEdit(w http.ResponseWriter, r *http.Request) {
decoder := json.NewDecoder(r.Body)
var script bean.BulkUpdateScript
err := decoder.Decode(&script)
Expand All @@ -173,34 +181,34 @@ func (handler BulkUpdateRestHandlerImpl) GetImpactedAppsName(w http.ResponseWrit
return
}
token := r.Header.Get("token")
impactedApps, err := handler.bulkUpdateService.GetBulkAppName(script.Spec)
impactedObjects, err := handler.bulkUpdateService.DryRunBulkEdit(script.Spec)
if err != nil {
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
appResourceObjects, envResourceObjects := handler.enforcerUtil.GetRbacObjectsForAllAppsAndEnvironments()
for _, deploymentTemplateImpactedApp := range impactedApps.DeploymentTemplate {
for _, deploymentTemplateImpactedApp := range impactedObjects.DeploymentTemplate {
ok := handler.CheckAuthForImpactedObjects(deploymentTemplateImpactedApp.AppId, deploymentTemplateImpactedApp.EnvId, appResourceObjects, envResourceObjects, token)
if !ok {
common.WriteJsonResp(w, fmt.Errorf("unauthorized user"), "Unauthorized User", http.StatusForbidden)
return
}
}
for _, configMapImpactedApp := range impactedApps.ConfigMap {
for _, configMapImpactedApp := range impactedObjects.ConfigMap {
ok := handler.CheckAuthForImpactedObjects(configMapImpactedApp.AppId, configMapImpactedApp.EnvId, appResourceObjects, envResourceObjects, token)
if !ok {
common.WriteJsonResp(w, fmt.Errorf("unauthorized user"), "Unauthorized User", http.StatusForbidden)
return
}
}
for _, secretImpactedApp := range impactedApps.Secret {
for _, secretImpactedApp := range impactedObjects.Secret {
ok := handler.CheckAuthForImpactedObjects(secretImpactedApp.AppId, secretImpactedApp.EnvId, appResourceObjects, envResourceObjects, token)
if !ok {
common.WriteJsonResp(w, fmt.Errorf("unauthorized user"), "Unauthorized User", http.StatusForbidden)
return
}
}
common.WriteJsonResp(w, err, impactedApps, http.StatusOK)
common.WriteJsonResp(w, nil, impactedObjects, http.StatusOK)
}

func (handler BulkUpdateRestHandlerImpl) CheckAuthForBulkUpdate(AppId int, EnvId int, AppName string, rbacObjects map[int]string, token string) bool {
Expand All @@ -217,7 +225,8 @@ func (handler BulkUpdateRestHandlerImpl) CheckAuthForBulkUpdate(AppId int, EnvId
return true

}
func (handler BulkUpdateRestHandlerImpl) BulkUpdate(w http.ResponseWriter, r *http.Request) {

func (handler BulkUpdateRestHandlerImpl) BulkEdit(w http.ResponseWriter, r *http.Request) {
userId, err := handler.userAuthService.GetLoggedInUser(r)
if userId == 0 || err != nil {
common.WriteJsonResp(w, err, "Unauthorized User", http.StatusUnauthorized)
Expand All @@ -237,41 +246,36 @@ func (handler BulkUpdateRestHandlerImpl) BulkUpdate(w http.ResponseWriter, r *ht
return
}
token := r.Header.Get("token")
impactedApps, err := handler.bulkUpdateService.GetBulkAppName(script.Spec)
impactedObjects, err := handler.bulkUpdateService.DryRunBulkEdit(script.Spec)
if err != nil {
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
rbacObjects := handler.enforcerUtil.GetRbacObjectsForAllApps(helper.CustomApp)
for _, deploymentTemplateImpactedApp := range impactedApps.DeploymentTemplate {
for _, deploymentTemplateImpactedApp := range impactedObjects.DeploymentTemplate {
ok := handler.CheckAuthForBulkUpdate(deploymentTemplateImpactedApp.AppId, deploymentTemplateImpactedApp.EnvId, deploymentTemplateImpactedApp.AppName, rbacObjects, token)
if !ok {
common.WriteJsonResp(w, fmt.Errorf("unauthorized user"), "Unauthorized User", http.StatusForbidden)
return
}
}
for _, configMapImpactedApp := range impactedApps.ConfigMap {
ok := handler.CheckAuthForBulkUpdate(configMapImpactedApp.AppId, configMapImpactedApp.EnvId, configMapImpactedApp.AppName, rbacObjects, token)
for _, impactedConfigMap := range impactedObjects.ConfigMap {
ok := handler.CheckAuthForBulkUpdate(impactedConfigMap.AppId, impactedConfigMap.EnvId, impactedConfigMap.AppName, rbacObjects, token)
if !ok {
common.WriteJsonResp(w, fmt.Errorf("unauthorized user"), "Unauthorized User", http.StatusForbidden)
return
}
}
for _, secretImpactedApp := range impactedApps.Secret {
ok := handler.CheckAuthForBulkUpdate(secretImpactedApp.AppId, secretImpactedApp.EnvId, secretImpactedApp.AppName, rbacObjects, token)
for _, impactedSecret := range impactedObjects.Secret {
ok := handler.CheckAuthForBulkUpdate(impactedSecret.AppId, impactedSecret.EnvId, impactedSecret.AppName, rbacObjects, token)
if !ok {
common.WriteJsonResp(w, fmt.Errorf("unauthorized user"), "Unauthorized User", http.StatusForbidden)
return
}
}
isSuperAdmin := handler.enforcer.Enforce(token, casbin.ResourceGlobal, casbin.ActionCreate, "*")
userEmail := util.GetEmailFromContext(r.Context())
userMetadata := &bean4.UserMetadata{
UserEmailId: userEmail,
IsUserSuperAdmin: isSuperAdmin,
UserId: userId,
}
response := handler.bulkUpdateService.BulkUpdate(script.Spec, userMetadata)
userMetadata := util2.GetUserMetadata(r.Context(), userId, isSuperAdmin)
response := handler.bulkUpdateService.BulkEdit(r.Context(), script.Spec, userMetadata)
common.WriteJsonResp(w, nil, response, http.StatusOK)
}

Expand All @@ -282,12 +286,7 @@ func (handler BulkUpdateRestHandlerImpl) BulkHibernate(w http.ResponseWriter, r
}
token := r.Header.Get("token")
isSuperAdmin := handler.enforcer.Enforce(token, casbin.ResourceGlobal, casbin.ActionCreate, "*")
userEmail := util.GetEmailFromContext(r.Context())
userMetadata := &bean4.UserMetadata{
UserEmailId: userEmail,
IsUserSuperAdmin: isSuperAdmin,
UserId: request.UserId,
}
userMetadata := util2.GetUserMetadata(r.Context(), request.UserId, isSuperAdmin)

response, err := handler.bulkUpdateService.BulkHibernate(r.Context(), request, handler.checkAuthForBulkHibernateAndUnhibernate, userMetadata)
if err != nil {
Expand Down Expand Up @@ -327,19 +326,15 @@ func (handler BulkUpdateRestHandlerImpl) BulkUnHibernate(w http.ResponseWriter,
}
token := r.Header.Get("token")
isSuperAdmin := handler.enforcer.Enforce(token, casbin.ResourceGlobal, casbin.ActionCreate, "*")
userEmail := util.GetEmailFromContext(r.Context())
userMetadata := &bean4.UserMetadata{
UserEmailId: userEmail,
IsUserSuperAdmin: isSuperAdmin,
UserId: request.UserId,
}
userMetadata := util2.GetUserMetadata(r.Context(), request.UserId, isSuperAdmin)
response, err := handler.bulkUpdateService.BulkUnHibernate(r.Context(), request, handler.checkAuthForBulkHibernateAndUnhibernate, userMetadata)
if err != nil {
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
common.WriteJsonResp(w, nil, response, http.StatusOK)
}

func (handler BulkUpdateRestHandlerImpl) BulkDeploy(w http.ResponseWriter, r *http.Request) {
token := r.Header.Get("token")
userId, err := handler.userAuthService.GetLoggedInUser(r)
Expand All @@ -361,14 +356,10 @@ func (handler BulkUpdateRestHandlerImpl) BulkDeploy(w http.ResponseWriter, r *ht
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
return
}
ctx := util.NewRequestCtx(r.Context())
isSuperAdmin := handler.enforcer.Enforce(token, casbin.ResourceGlobal, casbin.ActionCreate, "*")
userEmail := util.GetEmailFromContext(r.Context())
userMetadata := &bean4.UserMetadata{
UserEmailId: userEmail,
IsUserSuperAdmin: isSuperAdmin,
UserId: userId,
}
response, err := handler.bulkUpdateService.BulkDeploy(&request, token, handler.checkAuthBatch, userMetadata)
userMetadata := util2.GetUserMetadata(ctx, userId, isSuperAdmin)
response, err := handler.bulkUpdateService.BulkDeploy(ctx, &request, handler.checkAuthBatch, userMetadata)
if err != nil {
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
Expand Down
16 changes: 16 additions & 0 deletions api/restHandler/BulkUpdateRestHandler_ent.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/*
* Copyright (c) 2024. Devtron Inc.
*/

package restHandler

import (
"net/http"
)

type BulkEditV1Beta2RestHandlerEnt interface {
}

func (handler BulkUpdateRestHandlerImpl) BulkHibernateV1(w http.ResponseWriter, r *http.Request) {
handler.BulkHibernate(w, r) // For backward compatibility, redirect to the new handler
}
24 changes: 19 additions & 5 deletions api/router/BulkUpdateRouter.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,31 @@ func NewBulkUpdateRouterImpl(handler restHandler.BulkUpdateRestHandler) *BulkUpd
}
return router
}

func (router BulkUpdateRouterImpl) initBulkUpdateRouter(bulkRouter *mux.Router) {
bulkRouter.Path("/{apiVersion}/{kind}/readme").HandlerFunc(router.restHandler.FindBulkUpdateReadme).Methods("GET")
bulkRouter.Path("/v1beta1/application/dryrun").HandlerFunc(router.restHandler.GetImpactedAppsName).Methods("POST")
bulkRouter.Path("/v1beta1/application").HandlerFunc(router.restHandler.BulkUpdate).Methods("POST")
bulkRouter.Path("/{apiVersion}/{kind}/readme").HandlerFunc(router.restHandler.GetBulkEditConfig).Methods("GET")
// Initialize v1beta1 routes
router.initV1beta1Router(bulkRouter)
// Initialize v1beta2 routes
router.initV1beta2Router(bulkRouter)
// Initialize Ent routes
router.initBulkUpdateRouterEnt(bulkRouter)
}

func (router BulkUpdateRouterImpl) initV1beta1Router(bulkRouter *mux.Router) {
bulkRouter.Path("/v1beta1/application/dryrun").HandlerFunc(router.restHandler.DryRunBulkEdit).Methods("POST")
bulkRouter.Path("/v1beta1/application").HandlerFunc(router.restHandler.BulkEdit).Methods("POST")

bulkRouter.Path("/v1beta1/hibernate").HandlerFunc(router.restHandler.BulkHibernate).Methods("POST")
bulkRouter.Path("/v1beta1/unhibernate").HandlerFunc(router.restHandler.BulkUnHibernate).Methods("POST")
bulkRouter.Path("/v1beta2/hibernate").HandlerFunc(router.restHandler.BulkHibernate).Methods("POST")
bulkRouter.Path("/v1beta2/unhibernate").HandlerFunc(router.restHandler.BulkUnHibernate).Methods("POST")
bulkRouter.Path("/v1beta1/deploy").HandlerFunc(router.restHandler.BulkDeploy).Methods("POST")
bulkRouter.Path("/v1beta1/build").HandlerFunc(router.restHandler.BulkBuildTrigger).Methods("POST")
bulkRouter.Path("/v1beta1/cd-pipeline").HandlerFunc(router.restHandler.HandleCdPipelineBulkAction).Methods("POST")
}

func (router BulkUpdateRouterImpl) initV1beta2Router(bulkRouter *mux.Router) {
bulkRouter.Path("/v1beta2/unhibernate").HandlerFunc(router.restHandler.BulkUnHibernate).Methods("POST")
bulkRouter.Path("/v1beta2/hibernate").HandlerFunc(router.restHandler.BulkHibernateV1).Methods("POST")
// Initialize v1beta2 routes for Ent
router.initV1beta2RouterEnt(bulkRouter)
}
Loading
Loading