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 }