Skip to content
This repository was archived by the owner on Aug 5, 2025. It is now read-only.

Commit db1e660

Browse files
author
Taimoor Ahmad
authored
fix bug where repositories are attached unnecessarily causing error logs
1 parent 7bd2699 commit db1e660

8 files changed

Lines changed: 413 additions & 45 deletions

File tree

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
kind: Bugfix
2+
body: Fix bug where repositories were being attached unnecessarily, resulting in error
3+
logs
4+
time: 2024-04-02T15:01:18.219217-04:00

src/common/reconciler.go

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -365,52 +365,67 @@ func (r *ServiceReconciler) handleTools(service *opslevel.Service, registration
365365
}
366366

367367
func (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\tREASON: %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\tREASON: %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

Comments
 (0)