Skip to content

Commit 761efaa

Browse files
authored
feat: gitops support for oci repositories (#5577)
* parsing requirements.yaml for oci * wip * fixing hard coded path in reference charts * repo secret * wip * wip * wire fix * wip * reverting ref chart changes * wip: pr review changes * refactoring * adding back argocd assets * refactoring changes * common lib update * wip * fix after sanity * common lib update
1 parent c4428c7 commit 761efaa

File tree

23 files changed

+559
-44
lines changed

23 files changed

+559
-44
lines changed

Wire.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ import (
115115
"github.com/devtron-labs/devtron/pkg/appStore/installedApp/service/FullMode/deploymentTypeChange"
116116
"github.com/devtron-labs/devtron/pkg/appStore/installedApp/service/FullMode/resource"
117117
"github.com/devtron-labs/devtron/pkg/appWorkflow"
118+
"github.com/devtron-labs/devtron/pkg/argoRepositoryCreds"
118119
"github.com/devtron-labs/devtron/pkg/asyncProvider"
119120
"github.com/devtron-labs/devtron/pkg/attributes"
120121
"github.com/devtron-labs/devtron/pkg/build"
@@ -989,6 +990,9 @@ func InitializeApp() (*App, error) {
989990
common.NewDeploymentConfigServiceImpl,
990991
wire.Bind(new(common.DeploymentConfigService), new(*common.DeploymentConfigServiceImpl)),
991992

993+
argoRepositoryCreds.NewRepositorySecret,
994+
wire.Bind(new(argoRepositoryCreds.RepositorySecret), new(*argoRepositoryCreds.RepositorySecretImpl)),
995+
992996
repocreds.NewServiceClientImpl,
993997
wire.Bind(new(repocreds.ServiceClient), new(*repocreds.ServiceClientImpl)),
994998
)

cmd/external-app/wire.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import (
6666
repository4 "github.com/devtron-labs/devtron/pkg/appStore/chartGroup/repository"
6767
"github.com/devtron-labs/devtron/pkg/appStore/installedApp/service/EAMode"
6868
"github.com/devtron-labs/devtron/pkg/appStore/installedApp/service/FullMode/deployment"
69+
"github.com/devtron-labs/devtron/pkg/argoRepositoryCreds"
6970
"github.com/devtron-labs/devtron/pkg/attributes"
7071
delete2 "github.com/devtron-labs/devtron/pkg/delete"
7172
"github.com/devtron-labs/devtron/pkg/deployment/common"
@@ -244,6 +245,11 @@ func InitializeApp() (*App, error) {
244245

245246
common.NewDeploymentConfigServiceImpl,
246247
wire.Bind(new(common.DeploymentConfigService), new(*common.DeploymentConfigServiceImpl)),
248+
249+
wire.Bind(new(util4.K8sService), new(*util4.K8sServiceImpl)),
250+
251+
argoRepositoryCreds.NewRepositorySecret,
252+
wire.Bind(new(argoRepositoryCreds.RepositorySecret), new(*argoRepositoryCreds.RepositorySecretImpl)),
247253
)
248254
return &App{}, nil
249255
}

cmd/external-app/wire_gen.go

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ require (
2222
github.com/davecgh/go-spew v1.1.1
2323
github.com/deckarep/golang-set v1.8.0
2424
github.com/devtron-labs/authenticator v0.4.35-0.20240607135426-c86e868ecee1
25-
github.com/devtron-labs/common-lib v0.0.25-0.20240802103040-a6b975ffa69e
25+
github.com/devtron-labs/common-lib v0.0.25-0.20240808104611-3301505b68a7
2626
github.com/devtron-labs/go-bitbucket v0.9.60-beta
2727
github.com/devtron-labs/protos v0.0.3-0.20240802105333-92ee9bb85d80
2828
github.com/evanphx/json-patch v5.7.0+incompatible

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ github.com/denisenkom/go-mssqldb v0.0.0-20200428022330-06a60b6afbbc h1:VRRKCwnzq
197197
github.com/denisenkom/go-mssqldb v0.0.0-20200428022330-06a60b6afbbc/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
198198
github.com/devtron-labs/authenticator v0.4.35-0.20240607135426-c86e868ecee1 h1:qdkpTAo2Kr0ZicZIVXfNwsGSshpc9OB9j9RzmKYdIwY=
199199
github.com/devtron-labs/authenticator v0.4.35-0.20240607135426-c86e868ecee1/go.mod h1:IkKPPEfgLCMR29he5yv2OCC6iM2R7K5/0AA3k8b9XNc=
200-
github.com/devtron-labs/common-lib v0.0.25-0.20240802103040-a6b975ffa69e h1:oC1KJ4jeIebSRWtBarETQPmSVhbK06EWAE49g9VukEY=
201-
github.com/devtron-labs/common-lib v0.0.25-0.20240802103040-a6b975ffa69e/go.mod h1:3GN9TABx4D+hVuF69vGYUUx+H8/WelcKw0lUt8aELok=
200+
github.com/devtron-labs/common-lib v0.0.25-0.20240808104611-3301505b68a7 h1:No5VWdDCPhX9rJP5FfKkJz2hMO64GddeEldSDqYE3WU=
201+
github.com/devtron-labs/common-lib v0.0.25-0.20240808104611-3301505b68a7/go.mod h1:3GN9TABx4D+hVuF69vGYUUx+H8/WelcKw0lUt8aELok=
202202
github.com/devtron-labs/go-bitbucket v0.9.60-beta h1:VEx1jvDgdtDPS6A1uUFoaEi0l1/oLhbr+90xOwr6sDU=
203203
github.com/devtron-labs/go-bitbucket v0.9.60-beta/go.mod h1:GnuiCesvh8xyHeMCb+twm8lBR/kQzJYSKL28ZfObp1Y=
204204
github.com/devtron-labs/protos v0.0.3-0.20240802105333-92ee9bb85d80 h1:xwbTeijNTf4/j1v+tSfwVqwLVnReas/NqEKeQHvSTys=

pkg/appStore/chartGroup/ChartGroupService.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -963,7 +963,17 @@ func (impl *ChartGroupServiceImpl) performDeployStageOnAcd(installedAppVersion *
963963
installedAppVersion.Status == appStoreBean.GIT_ERROR {
964964
//step 2 git operation pull push
965965
//TODO: save git Timeline here
966-
appStoreGitOpsResponse, err := impl.fullModeDeploymentService.GenerateManifestAndPerformGitOperations(installedAppVersion)
966+
appStoreAppVersion, err := impl.appStoreApplicationVersionRepository.FindById(installedAppVersion.AppStoreVersion)
967+
if err != nil {
968+
impl.logger.Errorw("fetching error", "err", err)
969+
return nil, err
970+
}
971+
err = impl.fullModeDeploymentService.CreateArgoRepoSecretIfNeeded(appStoreAppVersion)
972+
if err != nil {
973+
impl.logger.Errorw("error in creating argo app repository secret", "appStoreApplicationVersionId", appStoreAppVersion.Id, "err", err)
974+
return nil, err
975+
}
976+
appStoreGitOpsResponse, err := impl.fullModeDeploymentService.GenerateManifestAndPerformGitOperations(installedAppVersion, appStoreAppVersion)
967977
if err != nil {
968978
impl.logger.Errorw(" error", "err", err)
969979
_, err = impl.appStoreDeploymentDBService.AppStoreDeployOperationStatusUpdate(installedAppVersion.InstalledAppId, appStoreBean.GIT_ERROR)

pkg/appStore/installedApp/service/AppStoreDeploymentDBService.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -623,11 +623,6 @@ func (impl *AppStoreDeploymentDBServiceImpl) createAppForAppStore(createRequest
623623
func (impl *AppStoreDeploymentDBServiceImpl) validateAndGetOverrideDeploymentAppType(installAppVersionRequest *appStoreBean.InstallAppVersionDTO, isGitOpsConfigured bool) (overrideDeploymentType string, err error) {
624624
// initialise OverrideDeploymentType to the given DeploymentType
625625
overrideDeploymentType = installAppVersionRequest.DeploymentAppType
626-
appStoreAppVersion, err := impl.appStoreApplicationVersionRepository.FindById(installAppVersionRequest.AppStoreVersion)
627-
if err != nil {
628-
impl.logger.Errorw("error in fetching app store application version", "err", err)
629-
return overrideDeploymentType, err
630-
}
631626

632627
// virtual environments only supports Manifest Download
633628
if installAppVersionRequest.Environment.IsVirtualEnvironment && util.IsManifestPush(installAppVersionRequest.DeploymentAppType) {
@@ -641,8 +636,7 @@ func (impl *AppStoreDeploymentDBServiceImpl) validateAndGetOverrideDeploymentApp
641636
}
642637

643638
// OCI chart currently supports HELM installation only
644-
isOCIRepo := appStoreAppVersion.AppStore.DockerArtifactStore != nil
645-
if isOCIRepo || getAppInstallationMode(installAppVersionRequest.AppOfferingMode) == globalUtil.SERVER_MODE_HYPERION {
639+
if getAppInstallationMode(installAppVersionRequest.AppOfferingMode) == globalUtil.SERVER_MODE_HYPERION {
646640
overrideDeploymentType = util.PIPELINE_DEPLOYMENT_TYPE_HELM
647641
} else {
648642
overrideDeploymentType, err = impl.deploymentTypeOverrideService.ValidateAndOverrideDeploymentAppType(overrideDeploymentType, isGitOpsConfigured, installAppVersionRequest.EnvironmentId)

pkg/appStore/installedApp/service/AppStoreDeploymentService.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,21 @@ func (impl *AppStoreDeploymentServiceImpl) InstallApp(installAppVersionRequest *
164164

165165
var gitOpsResponse *bean2.AppStoreGitOpsResponse
166166
if installedAppDeploymentAction.PerformGitOps {
167-
manifest, err := impl.fullModeDeploymentService.GenerateManifest(installAppVersionRequest)
167+
appStoreAppVersion, err := impl.appStoreApplicationVersionRepository.FindById(installAppVersionRequest.AppStoreVersion)
168+
if err != nil {
169+
impl.logger.Errorw("fetching error", "err", err)
170+
return nil, err
171+
}
172+
manifest, err := impl.fullModeDeploymentService.GenerateManifest(installAppVersionRequest, appStoreAppVersion)
168173
if err != nil {
169174
impl.logger.Errorw("error in performing manifest and git operations", "err", err)
170175
return nil, err
171176
}
177+
err = impl.fullModeDeploymentService.CreateArgoRepoSecretIfNeeded(appStoreAppVersion)
178+
if err != nil {
179+
impl.logger.Errorw("error in creating argo app repository secret", "appStoreApplicationVersionId", appStoreAppVersion.Id, "err", err)
180+
return nil, err
181+
}
172182
gitOpsResponse, err = impl.fullModeDeploymentService.GitOpsOperations(manifest, installAppVersionRequest)
173183
if err != nil {
174184
impl.logger.Errorw("error in doing gitops operation", "err", err)
@@ -729,12 +739,17 @@ func (impl *AppStoreDeploymentServiceImpl) UpdateInstalledApp(ctx context.Contex
729739
// manifest contains ChartRepoName where the valuesConfig and requirementConfig files will get committed
730740
// and that gitOpsRepoUrl is extracted from db inside GenerateManifest func and not from the current
731741
// orchestrator cm prefix and appName.
732-
manifest, err := impl.fullModeDeploymentService.GenerateManifest(upgradeAppRequest)
742+
manifest, err := impl.fullModeDeploymentService.GenerateManifest(upgradeAppRequest, appStoreAppVersion)
733743
if err != nil {
734744
impl.logger.Errorw("error in generating manifest for helm apps", "err", err)
735745
_ = impl.appStoreDeploymentDBService.UpdateInstalledAppVersionHistoryStatus(upgradeAppRequest.InstalledAppVersionHistoryId, pipelineConfig.WorkflowFailed)
736746
return nil, err
737747
}
748+
err = impl.fullModeDeploymentService.CreateArgoRepoSecretIfNeeded(appStoreAppVersion)
749+
if err != nil {
750+
impl.logger.Errorw("error in creating argo app repository secret", "appStoreApplicationVersionId", appStoreAppVersion.Id, "err", err)
751+
return nil, err
752+
}
738753
// required if gitOps repo name is changed, gitOps repo name will change if env variable which we use as suffix changes
739754
monoRepoMigrationRequired = impl.checkIfMonoRepoMigrationRequired(installedApp, deploymentConfig)
740755
argocdAppName := installedApp.App.AppName + "-" + installedApp.Environment.Name

pkg/appStore/installedApp/service/EAMode/EAModeDeploymentService.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,11 +414,11 @@ func (impl *EAModeDeploymentServiceImpl) GitOpsOperations(manifestResponse *bean
414414
return nil, errors.New("this is not implemented")
415415
}
416416

417-
func (impl *EAModeDeploymentServiceImpl) GenerateManifestAndPerformGitOperations(installAppVersionRequest *appStoreBean.InstallAppVersionDTO) (*bean.AppStoreGitOpsResponse, error) {
417+
func (impl *EAModeDeploymentServiceImpl) GenerateManifestAndPerformGitOperations(installAppVersionRequest *appStoreBean.InstallAppVersionDTO, appStoreApplicationVersion *appStoreDiscoverRepository.AppStoreApplicationVersion) (*bean.AppStoreGitOpsResponse, error) {
418418
return nil, errors.New("this is not implemented")
419419
}
420420

421-
func (impl *EAModeDeploymentServiceImpl) GenerateManifest(installAppVersionRequest *appStoreBean.InstallAppVersionDTO) (manifestResponse *bean.AppStoreManifestResponse, err error) {
421+
func (impl *EAModeDeploymentServiceImpl) GenerateManifest(installAppVersionRequest *appStoreBean.InstallAppVersionDTO, appStoreApplicationVersion *appStoreDiscoverRepository.AppStoreApplicationVersion) (manifestResponse *bean.AppStoreManifestResponse, err error) {
422422
return nil, errors.New("this is not implemented")
423423
}
424424

@@ -445,3 +445,7 @@ func (impl *EAModeDeploymentServiceImpl) DeleteACD(acdAppName string, ctx contex
445445
func (impl *EAModeDeploymentServiceImpl) GetAcdAppGitOpsRepoURL(appName string, environmentName string) (string, error) {
446446
return "", errors.New("this is not implemented")
447447
}
448+
449+
func (impl *EAModeDeploymentServiceImpl) CreateArgoRepoSecretIfNeeded(appStoreApplicationVersion *appStoreDiscoverRepository.AppStoreApplicationVersion) error {
450+
return errors.New("this is not implemented")
451+
}

pkg/appStore/installedApp/service/FullMode/deployment/FullModeDeploymentService.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
client "github.com/devtron-labs/devtron/api/helm-app/service"
2626
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig/bean/timelineStatus"
2727
"github.com/devtron-labs/devtron/pkg/appStore/installedApp/service/common"
28+
"github.com/devtron-labs/devtron/pkg/argoRepositoryCreds"
2829
repository5 "github.com/devtron-labs/devtron/pkg/cluster/repository"
2930
"github.com/devtron-labs/devtron/pkg/deployment/common"
3031
commonBean "github.com/devtron-labs/devtron/pkg/deployment/gitOps/common/bean"
@@ -102,6 +103,7 @@ type FullModeDeploymentServiceImpl struct {
102103
environmentRepository repository5.EnvironmentRepository
103104
deploymentConfigService common.DeploymentConfigService
104105
chartTemplateService util.ChartTemplateService
106+
RepositorySecretService argoRepositoryCreds.RepositorySecret
105107
}
106108

107109
func NewFullModeDeploymentServiceImpl(
@@ -127,7 +129,8 @@ func NewFullModeDeploymentServiceImpl(
127129
gitOpsValidationService validation.GitOpsValidationService,
128130
environmentRepository repository5.EnvironmentRepository,
129131
deploymentConfigService common.DeploymentConfigService,
130-
chartTemplateService util.ChartTemplateService) *FullModeDeploymentServiceImpl {
132+
chartTemplateService util.ChartTemplateService,
133+
RepositorySecretService argoRepositoryCreds.RepositorySecret) *FullModeDeploymentServiceImpl {
131134
return &FullModeDeploymentServiceImpl{
132135
Logger: logger,
133136
acdClient: acdClient,
@@ -152,6 +155,7 @@ func NewFullModeDeploymentServiceImpl(
152155
environmentRepository: environmentRepository,
153156
deploymentConfigService: deploymentConfigService,
154157
chartTemplateService: chartTemplateService,
158+
RepositorySecretService: RepositorySecretService,
155159
}
156160
}
157161

0 commit comments

Comments
 (0)