github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/pkg/buildplan/filters.go (about)

     1  package buildplan
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/ActiveState/cli/internal/sliceutils"
     7  	"github.com/ActiveState/cli/pkg/buildplan/raw"
     8  	"github.com/ActiveState/cli/pkg/platform/api/buildplanner/types"
     9  	"github.com/go-openapi/strfmt"
    10  )
    11  
    12  type FilterArtifact func(a *Artifact) bool
    13  
    14  func FilterPlatformArtifacts(platformID strfmt.UUID) FilterArtifact {
    15  	return func(a *Artifact) bool {
    16  		if a.platforms == nil {
    17  			return false
    18  		}
    19  		return sliceutils.Contains(a.platforms, platformID)
    20  	}
    21  }
    22  
    23  func FilterBuildtimeArtifacts() FilterArtifact {
    24  	return func(a *Artifact) bool {
    25  		return a.isBuildtimeDependency
    26  	}
    27  }
    28  
    29  func FilterRuntimeArtifacts() FilterArtifact {
    30  	return func(a *Artifact) bool {
    31  		return a.isRuntimeDependency
    32  	}
    33  }
    34  
    35  func FilterArtifactIDs(ids ...strfmt.UUID) FilterArtifact {
    36  	filterMap := sliceutils.ToLookupMap(ids)
    37  	return func(a *Artifact) bool {
    38  		_, ok := filterMap[a.ArtifactID]
    39  		return ok
    40  	}
    41  }
    42  
    43  const NamespaceInternal = "internal"
    44  
    45  func FilterStateArtifacts() FilterArtifact {
    46  	return func(a *Artifact) bool {
    47  		internalIngredients := sliceutils.Filter(a.Ingredients, func(i *Ingredient) bool {
    48  			return i.Namespace == NamespaceInternal
    49  		})
    50  		if len(a.Ingredients) == len(internalIngredients) {
    51  			return false
    52  		}
    53  		if strings.Contains(a.URL, "as-builds/noop") {
    54  			return false
    55  		}
    56  		return raw.IsStateToolMimeType(a.MimeType)
    57  	}
    58  }
    59  
    60  func FilterSuccessfulArtifacts() FilterArtifact {
    61  	return func(a *Artifact) bool {
    62  		return a.Status == types.ArtifactSucceeded ||
    63  			a.Status == types.ArtifactBlocked ||
    64  			a.Status == types.ArtifactStarted ||
    65  			a.Status == types.ArtifactReady
    66  	}
    67  }