github.com/anchore/syft@v1.38.2/internal/task/package_tasks.go (about)

     1  package task
     2  
     3  import (
     4  	"github.com/anchore/syft/syft/cataloging/pkgcataloging"
     5  	"github.com/anchore/syft/syft/pkg"
     6  	"github.com/anchore/syft/syft/pkg/cataloger/ai"
     7  	"github.com/anchore/syft/syft/pkg/cataloger/alpine"
     8  	"github.com/anchore/syft/syft/pkg/cataloger/arch"
     9  	"github.com/anchore/syft/syft/pkg/cataloger/binary"
    10  	bitnamiSbomCataloger "github.com/anchore/syft/syft/pkg/cataloger/bitnami"
    11  	"github.com/anchore/syft/syft/pkg/cataloger/conda"
    12  	"github.com/anchore/syft/syft/pkg/cataloger/cpp"
    13  	"github.com/anchore/syft/syft/pkg/cataloger/dart"
    14  	"github.com/anchore/syft/syft/pkg/cataloger/debian"
    15  	"github.com/anchore/syft/syft/pkg/cataloger/dotnet"
    16  	"github.com/anchore/syft/syft/pkg/cataloger/elixir"
    17  	"github.com/anchore/syft/syft/pkg/cataloger/erlang"
    18  	"github.com/anchore/syft/syft/pkg/cataloger/gentoo"
    19  	"github.com/anchore/syft/syft/pkg/cataloger/githubactions"
    20  	"github.com/anchore/syft/syft/pkg/cataloger/golang"
    21  	"github.com/anchore/syft/syft/pkg/cataloger/haskell"
    22  	"github.com/anchore/syft/syft/pkg/cataloger/homebrew"
    23  	"github.com/anchore/syft/syft/pkg/cataloger/java"
    24  	"github.com/anchore/syft/syft/pkg/cataloger/javascript"
    25  	"github.com/anchore/syft/syft/pkg/cataloger/kernel"
    26  	"github.com/anchore/syft/syft/pkg/cataloger/lua"
    27  	"github.com/anchore/syft/syft/pkg/cataloger/nix"
    28  	"github.com/anchore/syft/syft/pkg/cataloger/ocaml"
    29  	"github.com/anchore/syft/syft/pkg/cataloger/php"
    30  	"github.com/anchore/syft/syft/pkg/cataloger/python"
    31  	"github.com/anchore/syft/syft/pkg/cataloger/r"
    32  	"github.com/anchore/syft/syft/pkg/cataloger/redhat"
    33  	"github.com/anchore/syft/syft/pkg/cataloger/ruby"
    34  	"github.com/anchore/syft/syft/pkg/cataloger/rust"
    35  	sbomCataloger "github.com/anchore/syft/syft/pkg/cataloger/sbom"
    36  	"github.com/anchore/syft/syft/pkg/cataloger/snap"
    37  	"github.com/anchore/syft/syft/pkg/cataloger/swift"
    38  	"github.com/anchore/syft/syft/pkg/cataloger/swipl"
    39  	"github.com/anchore/syft/syft/pkg/cataloger/terraform"
    40  	"github.com/anchore/syft/syft/pkg/cataloger/wordpress"
    41  )
    42  
    43  const (
    44  	// Java ecosystem labels
    45  	Java  = "java"
    46  	Maven = "maven"
    47  
    48  	// Go ecosystem labels
    49  	Go     = "go"
    50  	Golang = "golang"
    51  
    52  	// JavaScript ecosystem labels
    53  	JavaScript = "javascript"
    54  	Node       = "node"
    55  	NPM        = "npm"
    56  
    57  	// Python ecosystem labels
    58  	Python = "python"
    59  )
    60  
    61  //nolint:funlen
    62  func DefaultPackageTaskFactories() Factories {
    63  	return []factory{
    64  		// OS package installed catalogers ///////////////////////////////////////////////////////////////////////////
    65  		newSimplePackageTaskFactory(arch.NewDBCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.OSTag, "linux", "alpm", "archlinux"),
    66  		newSimplePackageTaskFactory(alpine.NewDBCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.OSTag, "linux", "apk", "alpine"),
    67  		newSimplePackageTaskFactory(debian.NewDBCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.OSTag, "linux", "dpkg", "debian"),
    68  		newSimplePackageTaskFactory(gentoo.NewPortageCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.OSTag, "linux", "portage", "gentoo"),
    69  		newSimplePackageTaskFactory(redhat.NewDBCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.OSTag, "linux", "rpm", "redhat"),
    70  
    71  		// OS package declared catalogers ///////////////////////////////////////////////////////////////////////////
    72  		newSimplePackageTaskFactory(redhat.NewArchiveCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.OSTag, "linux", "rpm", "redhat"),
    73  		newSimplePackageTaskFactory(debian.NewArchiveCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.OSTag, "linux", "deb", "debian"),
    74  
    75  		// language-specific package installed catalogers ///////////////////////////////////////////////////////////////////////////
    76  		newSimplePackageTaskFactory(cpp.NewConanInfoCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "cpp", "conan"),
    77  		newSimplePackageTaskFactory(javascript.NewPackageCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, JavaScript, Node),
    78  		newSimplePackageTaskFactory(php.NewComposerInstalledCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "php", "composer"),
    79  		newSimplePackageTaskFactory(r.NewPackageCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, pkgcataloging.DirectoryTag, "r"),
    80  		newSimplePackageTaskFactory(ruby.NewInstalledGemSpecCataloger, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "ruby", "gem", "gemspec"),
    81  		newSimplePackageTaskFactory(rust.NewAuditBinaryCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "rust", "binary"),
    82  
    83  		// language-specific package declared catalogers ///////////////////////////////////////////////////////////////////////////
    84  		newSimplePackageTaskFactory(cpp.NewConanCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "cpp", "conan"),
    85  		newSimplePackageTaskFactory(dart.NewPubspecLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "dart"),
    86  		newSimplePackageTaskFactory(dart.NewPubspecCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "dart"),
    87  		newSimplePackageTaskFactory(elixir.NewMixLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "elixir"),
    88  		newSimplePackageTaskFactory(erlang.NewRebarLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "erlang"),
    89  		newSimplePackageTaskFactory(erlang.NewOTPCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "erlang", "otp"),
    90  		newSimplePackageTaskFactory(haskell.NewHackageCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "haskell", "hackage", "cabal"),
    91  		newPackageTaskFactory(
    92  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
    93  				return golang.NewGoModuleFileCataloger(cfg.PackagesConfig.Golang)
    94  			},
    95  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, Go, Golang, "gomod",
    96  		),
    97  		newSimplePackageTaskFactory(java.NewGradleLockfileCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, Java, "gradle"),
    98  		newPackageTaskFactory(
    99  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   100  				return java.NewPomCataloger(cfg.PackagesConfig.JavaArchive)
   101  			},
   102  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, Java, Maven,
   103  		),
   104  		newPackageTaskFactory(
   105  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   106  				return javascript.NewLockCataloger(cfg.PackagesConfig.JavaScript)
   107  			},
   108  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, JavaScript, Node, NPM,
   109  		),
   110  		newSimplePackageTaskFactory(php.NewComposerLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "php", "composer"),
   111  		newSimplePackageTaskFactory(php.NewPearCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, pkgcataloging.ImageTag, "php", "pear"),
   112  		newPackageTaskFactory(
   113  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   114  				return python.NewPackageCataloger(cfg.PackagesConfig.Python)
   115  			},
   116  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, Python,
   117  		),
   118  		newSimplePackageTaskFactory(ruby.NewGemFileLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "ruby", "gem"),
   119  		newSimplePackageTaskFactory(ruby.NewGemSpecCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "ruby", "gem", "gemspec"),
   120  		newSimplePackageTaskFactory(rust.NewCargoLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "rust", "cargo"),
   121  		newSimplePackageTaskFactory(swift.NewCocoapodsCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "swift", "cocoapods"),
   122  		newSimplePackageTaskFactory(swift.NewSwiftPackageManagerCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "swift", "spm"),
   123  		newSimplePackageTaskFactory(swipl.NewSwiplPackCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "swipl", "pack"),
   124  		newSimplePackageTaskFactory(ocaml.NewOpamPackageManagerCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "ocaml", "opam"),
   125  
   126  		// language-specific package for both image and directory scans (but not necessarily declared) ////////////////////////////////////////
   127  		newPackageTaskFactory(
   128  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   129  				return dotnet.NewDotnetDepsBinaryCataloger(cfg.PackagesConfig.Dotnet)
   130  			},
   131  			pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "dotnet", "c#",
   132  		),
   133  		newSimplePackageTaskFactory(dotnet.NewDotnetPackagesLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.ImageTag, pkgcataloging.DirectoryTag, pkgcataloging.LanguageTag, "dotnet", "c#"),
   134  		newSimplePackageTaskFactory(python.NewInstalledPackageCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, Python),
   135  		newPackageTaskFactory(
   136  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   137  				return golang.NewGoModuleBinaryCataloger(cfg.PackagesConfig.Golang)
   138  			},
   139  			pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, Go, Golang, "gomod", "binary",
   140  		),
   141  		newPackageTaskFactory(
   142  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   143  				return java.NewArchiveCataloger(cfg.PackagesConfig.JavaArchive)
   144  			},
   145  			pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, Java, Maven,
   146  		),
   147  		newSimplePackageTaskFactory(java.NewNativeImageCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, Java),
   148  		newPackageTaskFactory(
   149  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   150  				return nix.NewCataloger(cfg.PackagesConfig.Nix)
   151  			},
   152  			pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "nix",
   153  		),
   154  		newSimplePackageTaskFactory(lua.NewPackageCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, pkgcataloging.LanguageTag, "lua"),
   155  
   156  		// other package catalogers ///////////////////////////////////////////////////////////////////////////
   157  		newPackageTaskFactory(
   158  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   159  				return binary.NewClassifierCataloger(cfg.PackagesConfig.Binary)
   160  			},
   161  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "binary",
   162  		),
   163  		newSimplePackageTaskFactory(binary.NewELFPackageCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "binary", "elf-package", "elf"),
   164  		newSimplePackageTaskFactory(binary.NewPEPackageCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "binary", "pe-package", "pe", "dll", "exe"),
   165  		newSimplePackageTaskFactory(githubactions.NewActionUsageCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, "github", "github-actions"),
   166  		newSimplePackageTaskFactory(githubactions.NewWorkflowUsageCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, "github", "github-actions"),
   167  		newSimplePackageTaskFactory(java.NewJvmDistributionCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "java", "jvm", "jdk", "jre"),
   168  		newPackageTaskFactory(
   169  			func(cfg CatalogingFactoryConfig) pkg.Cataloger {
   170  				return kernel.NewLinuxKernelCataloger(cfg.PackagesConfig.LinuxKernel)
   171  			},
   172  			pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "linux", "kernel",
   173  		),
   174  		newSimplePackageTaskFactory(php.NewInterpreterCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "binary", "php"),
   175  		newSimplePackageTaskFactory(sbomCataloger.NewCataloger, "sbom"), // note: not evidence of installed packages
   176  		newSimplePackageTaskFactory(bitnamiSbomCataloger.NewCataloger, "bitnami", pkgcataloging.InstalledTag, pkgcataloging.ImageTag),
   177  		newSimplePackageTaskFactory(wordpress.NewWordpressPluginCataloger, pkgcataloging.DirectoryTag, pkgcataloging.ImageTag, "wordpress"),
   178  		newSimplePackageTaskFactory(terraform.NewLockCataloger, pkgcataloging.DeclaredTag, pkgcataloging.DirectoryTag, "terraform"),
   179  		newSimplePackageTaskFactory(homebrew.NewCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "homebrew"),
   180  		newSimplePackageTaskFactory(conda.NewCondaMetaCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.PackageTag, "conda"),
   181  		newSimplePackageTaskFactory(snap.NewCataloger, pkgcataloging.DirectoryTag, pkgcataloging.InstalledTag, pkgcataloging.ImageTag, "snap"),
   182  		newSimplePackageTaskFactory(ai.NewGGUFCataloger, pkgcataloging.DirectoryTag, pkgcataloging.ImageTag, "ai", "model", "gguf", "ml"),
   183  
   184  		// deprecated catalogers ////////////////////////////////////////
   185  		// these are catalogers that should not be selectable other than specific inclusion via name or "deprecated" tag (to remain backwards compatible)
   186  		newSimplePackageTaskFactory(dotnet.NewDotnetDepsCataloger, pkgcataloging.DeprecatedTag),               //nolint:staticcheck // TODO: remove in syft v2.0
   187  		newSimplePackageTaskFactory(dotnet.NewDotnetPortableExecutableCataloger, pkgcataloging.DeprecatedTag), //nolint:staticcheck // TODO: remove in syft v2.0
   188  		newSimplePackageTaskFactory(php.NewPeclCataloger, pkgcataloging.DeprecatedTag),                        //nolint:staticcheck // TODO: remove in syft v2.0
   189  		newSimplePackageTaskFactory(nix.NewStoreCataloger, pkgcataloging.DeprecatedTag),                       //nolint:staticcheck // TODO: remove in syft v2.0
   190  	}
   191  }