Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
f53b58a
ci pipeline get change
kartik-579 Feb 6, 2025
bf2b3c5
ci pipeline get change
kartik-579 Feb 6, 2025
08570eb
GetCiPipelineByIdWithDefaultTag change
kartik-579 Feb 7, 2025
cd26b82
deployment template get response
kartik-579 Feb 8, 2025
b0342db
cd pipeline get response change
kartik-579 Feb 8, 2025
cc2481c
oss etn change
kartik-579 Mar 6, 2025
f9e40a2
oss ent change
kartik-579 Mar 7, 2025
20e44d1
prom client in chart-sync
prkhrkat Mar 11, 2025
e048bd6
fix in yaml
prkhrkat Mar 12, 2025
ee3565f
APP_SYNC_SHUTDOWN_WAIT_DURATION env
prkhrkat Mar 16, 2025
b8e164a
APP_SYNC_SHUTDOWN_WAIT_DURATION env
prkhrkat Mar 16, 2025
dae4efc
vendor update in develop
vikramdevtron Mar 17, 2025
81e2abf
Merge pull request #6450 from devtron-labs/main-sync-develop-17mar
vikramdevtron Mar 17, 2025
a2b6047
fix: incorrect gitops metrics (#6444)
iamayushm Mar 17, 2025
eb92019
Merge branch 'develop' into app-template-oss-ent
kartik-579 Mar 17, 2025
04e5177
oss ent change
kartik-579 Mar 17, 2025
f87ac78
Merge branch 'develop' into prom-chart-sync
prkhrkat Mar 18, 2025
04c62d0
code cleaning
prkhrkat Mar 18, 2025
ec4eb2c
Merge remote-tracking branch 'origin/prom-chart-sync' into prom-chart…
prkhrkat Mar 18, 2025
f1559dd
Merge pull request #6442 from devtron-labs/prom-chart-sync
prkhrkat Mar 18, 2025
36cf273
name suggestion util
kartik-579 Mar 19, 2025
619006e
added supoort for preserve mode in update repo api
Ash-exp Mar 20, 2025
6e2047e
fix in CreateGrafanaDataSource
prkhrkat Mar 21, 2025
45fc38c
fix in CreateGrafanaDataSource
prkhrkat Mar 21, 2025
1e411fe
feat: Made ng labels env driven (#6438)
abhibhaw Mar 21, 2025
2493f2e
Merge branch 'develop' into grafana-fix
prkhrkat Mar 21, 2025
eb7868a
Merge pull request #6463 from devtron-labs/grafana-fix
prkhrkat Mar 21, 2025
d4d5fdb
updated timeout for git material save/update
Ash-exp Mar 23, 2025
bfe1ec7
fix: compile issue
Ash-exp Mar 23, 2025
378f008
updated protos version
Ash-exp Mar 23, 2025
8625d14
misc: Merge remote-tracking branch 'main' into develop
Ash-exp Mar 24, 2025
874ee33
Merge pull request #6467 from devtron-labs/develop-main-sync-24-mar
Ash-exp Mar 24, 2025
6e56f9f
Merge remote-tracking branch 'origin/develop' into chore-refactoring-…
Ash-exp Mar 24, 2025
1c29859
Merge pull request #6462 from devtron-labs/chore-refactoring-git-watcher
Ash-exp Mar 24, 2025
12e06dd
Merge branch 'develop' into app-template-oss-ent
kartik-579 Mar 24, 2025
28a659e
Merge pull request #6369 from devtron-labs/app-template-oss-ent
kartik-579 Mar 24, 2025
486e30d
added sql scripts
kartik-579 Mar 24, 2025
26c7555
Merge pull request #6469 from devtron-labs/sql-no-update-24mar
kartik-579 Mar 24, 2025
f33304b
main sync and vendor update
vikramdevtron Mar 24, 2025
952a12d
Merge pull request #6471 from devtron-labs/main-sync-develop-24mar
vikramdevtron Mar 24, 2025
934a351
sql no update
kartik-579 Mar 24, 2025
ccd40b3
Merge pull request #6472 from devtron-labs/sql-update-v32
kartik-579 Mar 24, 2025
d6d76fb
wip: optimisation (#6473)
iamayushm Mar 25, 2025
83c1f82
main sync rc
vikramdevtron Mar 27, 2025
5f69340
Merge pull request #6478 from devtron-labs/main-sync-rc32
vikramdevtron Mar 27, 2025
8580535
Merge pull request #6479 from devtron-labs/release-candidate-v0.32.0
vikramdevtron Mar 27, 2025
276a27c
vendor update
vikramdevtron Mar 27, 2025
d0ddb67
Merge pull request #6480 from devtron-labs/vendor-update-release-32
vikramdevtron Mar 27, 2025
e140316
feat: licensing changes (#6474)
Shivam-nagar23 Apr 1, 2025
1676a65
release: Compatibility Modifications for Enterprise and OSS Chart (#6…
akshatsinha007 Apr 1, 2025
7a7ac65
fix: for grafana URL
prkhrkat Apr 4, 2025
9d9440c
fix: for grafana URL
prkhrkat Apr 4, 2025
583057a
Merge pull request #6498 from devtron-labs/grafana-revert-patch
prkhrkat Apr 4, 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
Original file line number Diff line number Diff line change
Expand Up @@ -565,15 +565,12 @@ func (handler *PipelineConfigRestHandlerImpl) GetCiPipeline(w http.ResponseWrite
common.WriteJsonResp(w, fmt.Errorf("unauthorized user"), "Unauthorized User", http.StatusForbidden)
return
}
ciConf, err := handler.pipelineBuilder.GetCiPipeline(appId)
ciConf, err := handler.pipelineBuilder.GetCiPipelineRespResolved(appId)
if err != nil {
handler.Logger.Errorw("service err, GetCiPipeline", "err", err, "appId", appId)
handler.Logger.Errorw("service err, GetCiPipelineRespResolved", "appId", appId, "err", err)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
if ciConf == nil || ciConf.Id == 0 {
err = &util.ApiError{Code: "404", HttpStatusCode: 200, UserMessage: "no data found"}
}
common.WriteJsonResp(w, err, ciConf, http.StatusOK)
}

Expand Down Expand Up @@ -1286,13 +1283,12 @@ func (handler *PipelineConfigRestHandlerImpl) GetCIPipelineById(w http.ResponseW
}
}

ciPipeline, err := handler.pipelineBuilder.GetCiPipelineById(pipelineId)
ciPipeline, err := handler.pipelineBuilder.GetCiPipelineByIdWithDefaultTag(pipelineId)
if err != nil {
handler.Logger.Infow("service error, GetCIPipelineById", "err", err, "appId", appId, "pipelineId", pipelineId)
handler.Logger.Infow("service error, GetCiPipelineByIdWithDefaultTag", "err", err, "appId", appId, "pipelineId", pipelineId)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
ciPipeline.DefaultTag = []string{"{git_hash}", "{ci_pipeline_id}", "{global_counter}"}
common.WriteJsonResp(w, err, ciPipeline, http.StatusOK)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ import (
"github.com/devtron-labs/devtron/pkg/auth/authorisation/casbin"
"github.com/devtron-labs/devtron/pkg/bean"
"github.com/devtron-labs/devtron/pkg/generateManifest"
"github.com/devtron-labs/devtron/pkg/pipeline"
pipelineBean "github.com/devtron-labs/devtron/pkg/pipeline/bean"
resourceGroup2 "github.com/devtron-labs/devtron/pkg/resourceGroup"
"github.com/devtron-labs/devtron/pkg/resourceQualifiers"
Expand Down Expand Up @@ -718,48 +717,22 @@ func (handler *PipelineConfigRestHandlerImpl) EnvConfigOverrideCreate(w http.Res
return
}

createResp, err := handler.propertiesConfigService.CreateEnvironmentProperties(appId, &envConfigProperties)
if err != nil {
if err.Error() == bean4.NOCHARTEXIST {
ctx, cancel := context.WithCancel(r.Context())
if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) {
select {
case <-done:
case <-closed:
cancel()
}
}(ctx.Done(), cn.CloseNotify())
}
appMetrics := false
if envConfigProperties.AppMetrics != nil {
appMetrics = *envConfigProperties.AppMetrics
}
templateRequest := bean3.TemplateRequest{
AppId: appId,
ChartRefId: envConfigProperties.ChartRefId,
ValuesOverride: []byte("{}"),
UserId: userId,
IsAppMetricsEnabled: appMetrics,
ctx, cancel := context.WithCancel(r.Context())
if cn, ok := w.(http.CloseNotifier); ok {
go func(done <-chan struct{}, closed <-chan bool) {
select {
case <-done:
case <-closed:
cancel()
}
}(ctx.Done(), cn.CloseNotify())
}

_, err = handler.chartService.CreateChartFromEnvOverride(templateRequest, ctx)
if err != nil {
handler.Logger.Errorw("service err, EnvConfigOverrideCreate", "err", err, "payload", envConfigProperties)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
createResp, err = handler.propertiesConfigService.CreateEnvironmentProperties(appId, &envConfigProperties)
if err != nil {
handler.Logger.Errorw("service err, EnvConfigOverrideCreate", "err", err, "payload", envConfigProperties)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
} else {
handler.Logger.Errorw("service err, EnvConfigOverrideCreate", "err", err, "payload", envConfigProperties)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
createResp, err := handler.propertiesConfigService.CreateEnvironmentPropertiesAndBaseIfNeeded(ctx, appId, &envConfigProperties)
if err != nil {
handler.Logger.Errorw("service err, CreateEnvironmentPropertiesAndBaseIfNeeded", "payload", envConfigProperties, "err", err)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
common.WriteJsonResp(w, err, createResp, http.StatusOK)
}
Expand Down Expand Up @@ -1037,77 +1010,12 @@ func (handler *PipelineConfigRestHandlerImpl) GetDeploymentTemplate(w http.Respo
common.WriteJsonResp(w, fmt.Errorf("unauthorized user"), "Unauthorized User", http.StatusForbidden)
return
}

appConfigResponse := make(map[string]interface{})
appConfigResponse["globalConfig"] = nil

err = handler.chartRefService.CheckChartExists(chartRefId)
appConfigResponse, err := handler.chartService.GetDeploymentTemplateDataByAppIdAndCharRefId(appId, chartRefId)
if err != nil {
handler.Logger.Errorw("refChartDir Not Found err, JsonSchemaExtractFromFile", err)
common.WriteJsonResp(w, err, nil, http.StatusForbidden)
return
}

schema, readme, err := handler.chartRefService.GetSchemaAndReadmeForTemplateByChartRefId(chartRefId)
if err != nil {
handler.Logger.Errorw("err in getting schema and readme, GetDeploymentTemplate", "err", err, "appId", appId, "chartRefId", chartRefId)
}

template, err := handler.chartReadService.FindLatestChartForAppByAppId(appId)
if err != nil && pg.ErrNoRows != err {
handler.Logger.Errorw("service err, GetDeploymentTemplate", "err", err, "appId", appId, "chartRefId", chartRefId)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}

if pg.ErrNoRows == err {
appOverride, _, err := handler.chartRefService.GetAppOverrideForDefaultTemplate(chartRefId)
if err != nil {
handler.Logger.Errorw("service err, GetDeploymentTemplate", "err", err, "appId", appId, "chartRefId", chartRefId)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
appOverride["schema"] = json.RawMessage(schema)
appOverride["readme"] = string(readme)
mapB, err := json.Marshal(appOverride)
if err != nil {
handler.Logger.Errorw("marshal err, GetDeploymentTemplate", "err", err, "appId", appId, "chartRefId", chartRefId)
return
}
appConfigResponse["globalConfig"] = json.RawMessage(mapB)
} else {
if template.ChartRefId != chartRefId {
templateRequested, err := handler.chartService.GetByAppIdAndChartRefId(appId, chartRefId)
if err != nil && err != pg.ErrNoRows {
handler.Logger.Errorw("service err, GetDeploymentTemplate", "err", err, "appId", appId, "chartRefId", chartRefId)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}

if pg.ErrNoRows == err {
template.ChartRefId = chartRefId
template.Id = 0
template.Latest = false
} else {
template.ChartRefId = templateRequested.ChartRefId
template.Id = templateRequested.Id
template.ChartRepositoryId = templateRequested.ChartRepositoryId
template.RefChartTemplate = templateRequested.RefChartTemplate
template.RefChartTemplateVersion = templateRequested.RefChartTemplateVersion
template.Latest = templateRequested.Latest
}
}
template.Schema = schema
template.Readme = string(readme)
bytes, err := json.Marshal(template)
if err != nil {
handler.Logger.Errorw("marshal err, GetDeploymentTemplate", "err", err, "appId", appId, "chartRefId", chartRefId)
return
}
appOverride := json.RawMessage(bytes)
appConfigResponse["globalConfig"] = appOverride
}

common.WriteJsonResp(w, nil, appConfigResponse, http.StatusOK)
}

Expand Down Expand Up @@ -1992,15 +1900,9 @@ func (handler *PipelineConfigRestHandlerImpl) GetCdPipelineById(w http.ResponseW
return
}

cdPipeline, err := handler.pipelineBuilder.GetCdPipelineById(pipelineId)
if err != nil {
handler.Logger.Errorw("service err, GetCdPipelineById", "err", err, "appId", appId, "pipelineId", pipelineId)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
cdResp, err := pipeline.CreatePreAndPostStageResponse(cdPipeline, version)
cdResp, err := handler.pipelineBuilder.GetCdPipelineByIdResolved(pipelineId, version)
if err != nil {
handler.Logger.Errorw("service err, CheckForVersionAndCreatePreAndPostStagePayload", "err", err, "appId", appId, "pipelineId", pipelineId)
handler.Logger.Errorw("service err, GetCdPipelineByIdResolved", "appId", appId, "pipelineId", pipelineId, "err", err)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
security2 "github.com/devtron-labs/devtron/pkg/policyGovernance/security/imageScanning"
"github.com/devtron-labs/devtron/pkg/policyGovernance/security/imageScanning/read"
read3 "github.com/devtron-labs/devtron/pkg/team/read"
"github.com/devtron-labs/devtron/util/beHelper"
"io"
"net/http"
"strconv"
Expand All @@ -60,7 +61,6 @@ import (
"github.com/devtron-labs/devtron/pkg/bean"
"github.com/devtron-labs/devtron/pkg/pipeline"
"github.com/devtron-labs/devtron/pkg/team"
util2 "github.com/devtron-labs/devtron/util"
"github.com/devtron-labs/devtron/util/rbac"
"github.com/gorilla/mux"
"go.uber.org/zap"
Expand Down Expand Up @@ -663,7 +663,7 @@ func (handler *PipelineConfigRestHandlerImpl) PipelineNameSuggestion(w http.Resp
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
return
}
suggestedName := fmt.Sprintf("%s-%d-%s", pType, appId, util2.Generate(4))
suggestedName := beHelper.GetPipelineNameByPipelineType(pType, appId)
resourceName := handler.enforcerUtil.GetAppRBACName(app.AppName)
ok := handler.enforcerUtil.CheckAppRbacForAppOrJob(token, resourceName, casbin.ActionGet)
if !ok {
Expand Down
40 changes: 9 additions & 31 deletions api/restHandler/app/workflow/AppWorkflowRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,13 +188,6 @@ func (impl AppWorkflowRestHandlerImpl) FindAppWorkflow(w http.ResponseWriter, r
return
}
token := r.Header.Get("token")
app, err := impl.pipelineBuilder.GetApp(appId)
if err != nil {
impl.Logger.Errorw("bad request", "err", err)
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
return
}

v := r.URL.Query()
envIdsString := v.Get("envIds")
envIds := make([]int, 0)
Expand All @@ -207,16 +200,15 @@ func (impl AppWorkflowRestHandlerImpl) FindAppWorkflow(w http.ResponseWriter, r
}

// RBAC enforcer applying
object := impl.enforcerUtil.GetAppRBACName(app.AppName)
object := impl.enforcerUtil.GetAppRBACNameByAppId(appId)
impl.Logger.Debugw("rbac object for other environment list", "object", object)
ok := impl.enforcerUtil.CheckAppRbacForAppOrJob(token, object, casbin.ActionGet)
if !ok {
common.WriteJsonResp(w, err, "unauthorized user", http.StatusForbidden)
return
}
// RBAC enforcer Ends
workflows := make(map[string]interface{})
workflowsList, err := impl.appWorkflowService.FindAppWorkflows(appId)
//RBAC enforcer Ends
workflowsListResp, appType, err := impl.appWorkflowService.FindAppWorkflowsListResolvedResp(appId)
if err != nil {
impl.Logger.Errorw("error in fetching workflows for app", "err", err)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
Expand All @@ -231,7 +223,7 @@ func (impl AppWorkflowRestHandlerImpl) FindAppWorkflow(w http.ResponseWriter, r
return
}
triggerViewPayload := &bean2.TriggerViewWorkflowConfig{
Workflows: workflowsList,
Workflows: workflowsListResp.Workflows,
CdPipelines: cdPipelineWfData,
}
queryParam := bean2.NewWorkflowsFilterQuery().WithEnvIds(envIds)
Expand All @@ -242,12 +234,10 @@ func (impl AppWorkflowRestHandlerImpl) FindAppWorkflow(w http.ResponseWriter, r
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
workflowsList = response.Workflows
workflowsListResp.Workflows = response.Workflows
}

workflows["appId"] = app.Id
workflows["appName"] = app.AppName
if len(workflowsList) > 0 && app.AppType == helper.Job {
if len(workflowsListResp.Workflows) > 0 && appType == helper.Job {
// RBAC

var workflowNames []string
Expand All @@ -256,15 +246,15 @@ func (impl AppWorkflowRestHandlerImpl) FindAppWorkflow(w http.ResponseWriter, r
var rbacObjects []string
workNameObjectMap := make(map[string]bean2.AppWorkflowDto)

for _, workflow := range workflowsList {
for _, workflow := range workflowsListResp.Workflows {
workflowNames = append(workflowNames, workflow.Name)
workflowIds = append(workflowIds, workflow.Id)
}
workflowIdToObjectMap := impl.enforcerUtil.GetAllWorkflowRBACObjectsByAppId(appId, workflowNames, workflowIds)
itr := 0
for _, val := range workflowIdToObjectMap {
rbacObjects = append(rbacObjects, val)
workNameObjectMap[val] = workflowsList[itr]
workNameObjectMap[val] = workflowsListResp.Workflows[itr]
itr++
}

Expand All @@ -277,20 +267,8 @@ func (impl AppWorkflowRestHandlerImpl) FindAppWorkflow(w http.ResponseWriter, r
if len(updatedWorkflowList) == 0 {
updatedWorkflowList = []bean2.AppWorkflowDto{}
}
workflows[bean3.Workflows] = updatedWorkflowList
} else if len(workflowsList) > 0 {
workflows[bean3.Workflows] = workflowsList
} else {
workflows[bean3.Workflows] = []bean2.AppWorkflowDto{}
}
isAppLevelGitOpsConfigured, err := impl.chartService.IsGitOpsRepoConfiguredForDevtronApp(appId)
if err != nil && !util.IsErrNoRows(err) {
impl.Logger.Errorw("service err, IsGitOpsRepoConfiguredForDevtronApp", "appId", appId, "envIds", envIds, "err", err)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
workflows["isGitOpsRepoNotConfigured"] = !isAppLevelGitOpsConfigured
common.WriteJsonResp(w, nil, workflows, http.StatusOK)
common.WriteJsonResp(w, nil, workflowsListResp, http.StatusOK)
}

func (impl AppWorkflowRestHandlerImpl) FindAllWorkflows(w http.ResponseWriter, r *http.Request) {
Expand Down
2 changes: 1 addition & 1 deletion charts/devtron/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ keywords:
- argocd
- Hyperion
engine: gotpl
version: 0.22.87
version: 0.22.88
sources:
- https://github.com/devtron-labs/charts
dependencies:
Expand Down
12 changes: 9 additions & 3 deletions charts/devtron/templates/configmap-secret.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,13 @@ metadata:
data:
{{- if $.Values.configs }}
{{ toYaml $.Values.configs | indent 2 }}
{{- end }}
{{- if $.Values.devtronEnterprise.enabled }}
DEVTRON_INSTALLATION_TYPE: "enterprise"
{{- end }}
INSTALLATION_THROUGH_HELM: "True"
DEVTRON_HELM_RELEASE_NAME: {{ $.Release.Name }}
DEVTRON_HELM_RELEASE_NAMESPACE: {{ $.Release.Namespace }}
{{- if and ($.Values.minio.enabled) (not $.Values.configs.BLOB_STORAGE_PROVIDER) }}
BLOB_STORAGE_PROVIDER: "S3"
BLOB_STORAGE_S3_ENDPOINT: "http://devtron-minio.devtroncd:9000"
Expand Down Expand Up @@ -302,7 +306,8 @@ metadata:
data:
{{- if $.Values.global.configs }}
{{- toYaml $.Values.global.configs | nindent 2 }}
{{- end }}
{{- end }}
{{- if not $.Values.devtronEnterprise.enabled }}
---
apiVersion: v1
kind: ConfigMap
Expand All @@ -317,7 +322,7 @@ data:
{{- if $.Values.global.configs }}
{{- toYaml $.Values.global.configs | nindent 2 }}
{{- end }}

{{- end }}
{{- if $.Values.imagePullSecret }}
{{- if $.Values.imagePullSecret.create }}
---
Expand Down Expand Up @@ -356,7 +361,7 @@ metadata:
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: {{ include "imagePullSecret" . }}

{{- if not $.Values.devtronEnterprise.enabled }}
---
apiVersion: v1
kind: Secret
Expand All @@ -371,3 +376,4 @@ data:
{{- end }}
{{- end }}
{{- end }}
{{- end }}
3 changes: 3 additions & 0 deletions charts/devtron/templates/dashboard.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ metadata:
annotations:
"helm.sh/resource-policy": keep
data:
{{- if $.Values.devtronEnterprise.enabled }}
GATEKEEPER_URL: "https://license.devtron.ai/dashboard"
{{- end }}
{{- if .config }}
GA_ENABLED: {{ .config.analytics | default "false" | quote }}
HOTJAR_ENABLED: {{ .config.hotjar | default "false" | quote }}
Expand Down
Loading