diff --git a/pkg/cleaning/cleanup.go b/pkg/cleaning/cleanup.go index aa34f94705..4b72a2e7a5 100644 --- a/pkg/cleaning/cleanup.go +++ b/pkg/cleaning/cleanup.go @@ -170,12 +170,12 @@ func (m *cleanupManager) run(ctx context.Context) error { func (m *cleanupManager) skipStageIDsThatAreUsedInKubernetes(ctx context.Context, deployedDockerImagesNames []string) error { handledDeployedStages := map[string]bool{} - handleTagFunc := func(tag, stageID string) { + handleTagFunc := func(tag, stageID string, f func()) { dockerImageName := fmt.Sprintf("%s:%s", m.StorageManager.GetStagesStorage().Address(), tag) for _, deployedDockerImageName := range deployedDockerImagesNames { if deployedDockerImageName == dockerImageName { if !handledDeployedStages[stageID] { - m.stageManager.MarkStageAsProtected(stageID) + f() logboek.Context(ctx).Default().LogFDetails(" tag: %s\n", tag) logboek.Context(ctx).LogOptionalLn() @@ -188,12 +188,22 @@ func (m *cleanupManager) skipStageIDsThatAreUsedInKubernetes(ctx context.Context } for _, stageID := range m.stageManager.GetStageIDList() { - handleTagFunc(stageID, stageID) + handleTagFunc(stageID, stageID, func() { + m.stageManager.MarkStageAsProtected(stageID) + }) } for stageID, customTagList := range m.stageManager.GetCustomTagsMetadata() { for _, customTag := range customTagList { - handleTagFunc(customTag, stageID) + handleTagFunc(customTag, stageID, func() { + if m.stageManager.IsStageExist(stageID) { + // keep existent stage and associated custom tags + m.stageManager.MarkStageAsProtected(stageID) + } else { + // keep custom tags that do not have associated existent stage + m.stageManager.ForgetCustomTagsByStageID(stageID) + } + }) } } diff --git a/pkg/cleaning/stage_manager/manager.go b/pkg/cleaning/stage_manager/manager.go index b03a1f2013..9b45ca6d6d 100644 --- a/pkg/cleaning/stage_manager/manager.go +++ b/pkg/cleaning/stage_manager/manager.go @@ -370,3 +370,7 @@ func (m *Manager) IsStageExist(stageID string) bool { func (m *Manager) GetCustomTagsMetadata() map[string][]string { return m.stageIDCustomTagList } + +func (m *Manager) ForgetCustomTagsByStageID(stageID string) { + delete(m.stageIDCustomTagList, stageID) +}