@@ -365,52 +365,67 @@ func (r *ServiceReconciler) handleTools(service *opslevel.Service, registration
365365}
366366
367367func (r * ServiceReconciler ) handleRepositories (service * opslevel.Service , registration opslevel_jq_parser.ServiceRegistration ) {
368- for _ , repositoryCreate := range registration .Repositories {
369- if repositoryCreate .Repository .Alias == nil || * repositoryCreate .Repository .Alias == "null" {
368+ for _ , inputRepository := range registration .Repositories {
369+ if inputRepository .Repository .Alias == nil || * inputRepository .Repository .Alias == "null" || * inputRepository . Repository . Alias == " " {
370370 continue
371371 }
372- repoCreateString := "repoCreate{}"
373- b , err := json .Marshal (repositoryCreate )
374- if err == nil {
375- repoCreateString = string (b )
376- }
377- foundRepository , foundRepositoryErr := r .client .GetRepositoryWithAlias (* repositoryCreate .Repository .Alias )
372+
373+ // setup logger to use for this repository
374+ repoLogger := log .With ().Str ("service" , service .Name ).Str ("repo" , * inputRepository .Repository .Alias ).Logger ()
375+ if inputRepository .BaseDirectory == nil {
376+ // case for when input is just 'github.com:OrgName/RepoName'
377+ repoLogger .Warn ().Msgf ("no base directory was associated with this repo - using root directory (/)" )
378+ inputRepository .BaseDirectory = opslevel .RefOf ("" )
379+ }
380+ repoLogger = repoLogger .With ().Str ("base_dir" , * inputRepository .BaseDirectory ).Logger ()
381+
382+ // look up the repository in OpsLevel - exit if it does not exist
383+ foundRepository , foundRepositoryErr := r .client .GetRepositoryWithAlias (* inputRepository .Repository .Alias )
378384 if foundRepositoryErr != nil {
379- log . Warn ().Msgf ("[%s] Repository with alias: '%s' not found so it cannot be attached to service ... skipping" , service . Name , repoCreateString )
385+ repoLogger . Error ().Err ( foundRepositoryErr ). Msgf ("fetching repository in OpsLevel resulted in an error ... skipping" )
380386 continue
381387 } else if foundRepository == nil {
382- log .Warn ().Msgf ("[%s] Repository with alias: '%s' call to GetRepositoryWithAlias unexpectedly returned nil - please submit a bug report ... skipping" , service . Name , repoCreateString )
388+ repoLogger .Warn ().Msgf ("repository not found in OpsLevel ... skipping" )
383389 continue
384390 }
385- var serviceRepository * opslevel.ServiceRepository
386- if repositoryCreate .BaseDirectory != nil {
387- serviceRepository = foundRepository .GetService (service .Id , * repositoryCreate .BaseDirectory )
388- }
391+
392+ // look up the ServiceRepository matching the base directory
393+ serviceRepository := foundRepository .GetService (service .Id , * inputRepository .BaseDirectory )
394+
395+ // if the ServiceRepository is found, update the fields on the ServiceRepository (currently just the display name)
389396 if serviceRepository != nil {
390- if repositoryCreate .DisplayName != nil && serviceRepository .DisplayName != * repositoryCreate .DisplayName {
391- repositoryUpdate := opslevel.ServiceRepositoryUpdateInput {
392- Id : serviceRepository .Id ,
393- DisplayName : repositoryCreate .DisplayName ,
394- }
395- err := r .client .UpdateServiceRepository (repositoryUpdate )
396- if err != nil {
397- log .Error ().Msgf ("[%s] Failed updating repository '%s'\n \t REASON: %v" , service .Name , repoCreateString , err .Error ())
398- continue
399- } else {
400- log .Info ().Msgf ("[%s] Updated repository '%s'" , service .Name , repoCreateString )
401- continue
402- }
397+ repoLogger .Debug ().Msgf ("found service repository (%s) has display name: '%s'" , serviceRepository .Id , serviceRepository .DisplayName )
398+
399+ // check to ensure that an update call is actually necessary
400+ repositoryUpdate := opslevel.ServiceRepositoryUpdateInput {Id : serviceRepository .Id , BaseDirectory : & serviceRepository .BaseDirectory }
401+ needsUpdate := false
402+ if inputRepository .DisplayName != nil && * inputRepository .DisplayName != "" && * inputRepository .DisplayName != serviceRepository .DisplayName {
403+ repositoryUpdate .DisplayName = inputRepository .DisplayName
404+ needsUpdate = true
403405 }
404- log .Debug ().Msgf ("[%s] Repository '%s' already attached to service ... skipping" , service .Name , repoCreateString )
406+ if ! needsUpdate {
407+ repoLogger .Info ().Msgf ("service repository (%s) does not require any updates" , serviceRepository .Id )
408+ continue
409+ }
410+
411+ // perform update
412+ serviceRepositoryUpdateErr := r .client .UpdateServiceRepository (repositoryUpdate )
413+ if serviceRepositoryUpdateErr != nil {
414+ repoLogger .Error ().Err (serviceRepositoryUpdateErr ).Msgf ("failed updating service repository (%s)" , serviceRepository .Id )
415+ continue
416+ }
417+ repoLogger .Info ().Msgf ("successfully updated service repository (%s)" , serviceRepository .Id )
405418 continue
406419 }
407- repositoryCreate .Service = opslevel.IdentifierInput {Id : & service .Id }
408- err = r .client .CreateServiceRepository (repositoryCreate )
420+
421+ // if the ServiceRepository is not found, create the ServiceRepository (assign the repository to the current service)
422+ inputRepository .Service = opslevel.IdentifierInput {Id : & service .Id }
423+ err := r .client .CreateServiceRepository (inputRepository )
409424 if err != nil {
410- log .Error ().Msgf ("[%s] Failed assigning repository '%s'\n \t REASON: %v" , service .Name , repoCreateString , err .Error ())
411- } else {
412- log .Info ().Msgf ("[%s] Attached repository '%s'" , service .Name , repoCreateString )
425+ repoLogger .Error ().Err (err ).Msgf ("failed creating a new service repository" )
426+ continue
413427 }
428+ repoLogger .Info ().Msgf ("successfully created a new service repository" )
414429 }
415430}
416431
0 commit comments