@@ -28,7 +28,6 @@ import (
2828 "golang.org/x/oauth2"
2929 "gopkg.in/src-d/go-git.v4"
3030 "gopkg.in/src-d/go-git.v4/plumbing/object"
31- "gopkg.in/src-d/go-git.v4/plumbing/transport"
3231 "gopkg.in/src-d/go-git.v4/plumbing/transport/http"
3332 "io/ioutil"
3433 "net/url"
@@ -49,6 +48,7 @@ type GitFactory struct {
4948 GitWorkingDir string
5049 logger * zap.SugaredLogger
5150 gitOpsRepository repository.GitOpsConfigRepository
51+ gitCliUtil * GitCliUtil
5252}
5353
5454func (factory * GitFactory ) Reload () error {
@@ -57,7 +57,7 @@ func (factory *GitFactory) Reload() error {
5757 if err != nil {
5858 return err
5959 }
60- gitService := NewGitServiceImpl (cfg , logger )
60+ gitService := NewGitServiceImpl (cfg , logger , factory . gitCliUtil )
6161 factory .gitService = gitService
6262 client , err := NewGitLabClient (cfg , logger , gitService )
6363 if err != nil {
@@ -68,12 +68,12 @@ func (factory *GitFactory) Reload() error {
6868 return nil
6969}
7070
71- func NewGitFactory (logger * zap.SugaredLogger , gitOpsRepository repository.GitOpsConfigRepository ) (* GitFactory , error ) {
71+ func NewGitFactory (logger * zap.SugaredLogger , gitOpsRepository repository.GitOpsConfigRepository , gitCliUtil * GitCliUtil ) (* GitFactory , error ) {
7272 cfg , err := GetGitConfig (gitOpsRepository )
7373 if err != nil {
7474 return nil , err
7575 }
76- gitService := NewGitServiceImpl (cfg , logger )
76+ gitService := NewGitServiceImpl (cfg , logger , gitCliUtil )
7777 client , err := NewGitLabClient (cfg , logger , gitService )
7878 if err != nil {
7979 return nil , err
@@ -84,18 +84,21 @@ func NewGitFactory(logger *zap.SugaredLogger, gitOpsRepository repository.GitOps
8484 gitService : gitService ,
8585 gitOpsRepository : gitOpsRepository ,
8686 GitWorkingDir : cfg .GitWorkingDir ,
87+ gitCliUtil : gitCliUtil ,
8788 }, nil
8889}
8990
9091type GitConfig struct {
91- GitlabGroupId string //local
92- GitlabGroupPath string //local
93- GitToken string `env:"GIT_TOKEN" ` //not null // public
94- GitUserName string `env:"GIT_USERNAME" ` //not null // public
95- GitWorkingDir string `env:"GIT_WORKING_DIRECTORY" envDefault:"/tmp/gitops/"` //working directory for git. might use pvc
92+ GitlabGroupId string //local
93+ GitlabGroupPath string //local
94+ GitToken string //not null // public
95+ GitUserName string //not null // public
96+ GitWorkingDir string //working directory for git. might use pvc
9697 GithubOrganization string
97- GitProvider string `env:"GIT_PROVIDER" envDefault:"GITHUB"` // SUPPORTED VALUES GITHUB, GITLAB
98- GitHost string `env:"GIT_HOST" envDefault:""`
98+ GitProvider string // SUPPORTED VALUES GITHUB, GITLAB
99+ GitHost string
100+ AzureToken string
101+ AzureProject string
99102}
100103
101104func GetGitConfig (gitOpsRepository repository.GitOpsConfigRepository ) (* GitConfig , error ) {
@@ -121,6 +124,8 @@ func GetGitConfig(gitOpsRepository repository.GitOpsConfigRepository) (*GitConfi
121124 GithubOrganization : gitOpsConfig .GitHubOrgId ,
122125 GitProvider : gitOpsConfig .Provider ,
123126 GitHost : gitOpsConfig .Host ,
127+ AzureToken : gitOpsConfig .Token ,
128+ AzureProject : gitOpsConfig .AzureProject ,
124129 }
125130 return cfg , err
126131}
@@ -190,9 +195,15 @@ func NewGitLabClient(config *GitConfig, logger *zap.SugaredLogger, gitService Gi
190195 logger : logger ,
191196 gitService : gitService ,
192197 }, nil
193- } else {
198+ } else if config . GitProvider == "GITHUB" {
194199 gitHubClient := NewGithubClient (config .GitToken , config .GithubOrganization , logger , gitService )
195200 return gitHubClient , nil
201+ } else if config .GitProvider == "AZURE_DEVOPS" {
202+ gitAzureClient := NewGitAzureClient (config .AzureToken , config .GitHost , config .AzureProject , logger , gitService )
203+ return gitAzureClient , nil
204+ } else {
205+ logger .Errorw ("no gitops config provided, gitops will not work " )
206+ return nil , nil
196207 }
197208}
198209
@@ -373,17 +384,19 @@ type GitService interface {
373384 Pull (repoRoot string ) (err error )
374385}
375386type GitServiceImpl struct {
376- Auth transport.AuthMethod
377- config * GitConfig
378- logger * zap.SugaredLogger
387+ Auth * http.BasicAuth
388+ config * GitConfig
389+ logger * zap.SugaredLogger
390+ gitCliUtil * GitCliUtil
379391}
380392
381- func NewGitServiceImpl (config * GitConfig , logger * zap.SugaredLogger ) * GitServiceImpl {
393+ func NewGitServiceImpl (config * GitConfig , logger * zap.SugaredLogger , GitCliUtil * GitCliUtil ) * GitServiceImpl {
382394 auth := & http.BasicAuth {Password : config .GitToken , Username : config .GitUserName }
383395 return & GitServiceImpl {
384- Auth : auth ,
385- logger : logger ,
386- config : config ,
396+ Auth : auth ,
397+ logger : logger ,
398+ config : config ,
399+ gitCliUtil : GitCliUtil ,
387400 }
388401}
389402
@@ -395,14 +408,14 @@ func (impl GitServiceImpl) GetCloneDirectory(targetDir string) (clonedDir string
395408func (impl GitServiceImpl ) Clone (url , targetDir string ) (clonedDir string , err error ) {
396409 impl .logger .Debugw ("git checkout " , "url" , url , "dir" , targetDir )
397410 clonedDir = filepath .Join (impl .config .GitWorkingDir , targetDir )
398- _ , err = git .PlainClone (clonedDir , false , & git.CloneOptions {
399- URL : url ,
400- Auth : impl .Auth ,
401- })
411+ _ , errorMsg , err := impl .gitCliUtil .Clone (clonedDir , url , impl .Auth .Username , impl .Auth .Password )
402412 if err != nil {
403- impl .logger .Errorw ("error in git checkout " , "url" , url , "targetDir" , targetDir , "err" , err )
413+ impl .logger .Errorw ("error in git checkout" , "url" , url , "targetDir" , targetDir , "err" , err )
404414 return "" , err
405415 }
416+ if errorMsg != "" {
417+ return "" , fmt .Errorf (errorMsg )
418+ }
406419 return clonedDir , nil
407420}
408421
0 commit comments