-
Notifications
You must be signed in to change notification settings - Fork 577
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Replace core SBOM-creation API with builder pattern #1383
Conversation
57a9877
to
64f7af5
Compare
Benchmark Test ResultsBenchmark results from the latest changes vs base branch
|
64f7af5
to
99f9d1e
Compare
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
d36be02
to
efb97f4
Compare
624ff9f
to
f8aaae5
Compare
Signed-off-by: Alex Goodman <[email protected]>
Signed-off-by: Alex Goodman <[email protected]>
} | ||
}) | ||
|
||
result, err := digestsCataloger.Catalog(resolver, coordinates...) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
from @willmurphyscode , blocking: we need to explicitly pass all coordinates, since there is no guarantee to have any results from a owned-files indication
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm going to fix the functional problem in this PR, but to address the signature and generator issue I really should break that into a separate PR that I follow up with after this PR
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this will have some play into the solution here #2487
Signed-off-by: Alex Goodman <[email protected]>
Signed-off-by: Alex Goodman <[email protected]>
Signed-off-by: Alex Goodman <[email protected]>
Signed-off-by: Alex Goodman <[email protected]>
Signed-off-by: Alex Goodman <[email protected]>
Signed-off-by: Alex Goodman <[email protected]>
Signed-off-by: Alex Goodman <[email protected]>
Signed-off-by: Alex Goodman <[email protected]>
Signed-off-by: Alex Goodman <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for all the careful thought in making the API and configs easier to use for the future.
* remove existing cataloging API Signed-off-by: Alex Goodman <[email protected]> * add file cataloging config Signed-off-by: Alex Goodman <[email protected]> * add package cataloging config Signed-off-by: Alex Goodman <[email protected]> * add configs for cross-cutting concerns Signed-off-by: Alex Goodman <[email protected]> * rename CLI option configs to not require import aliases later Signed-off-by: Alex Goodman <[email protected]> * update all nested structs for the Catalog struct Signed-off-by: Alex Goodman <[email protected]> * update Catalog cli options - add new cataloger selection options (selection and default) - remove the excludeBinaryOverlapByOwnership - deprecate "catalogers" flag - add new javascript configuration Signed-off-by: Alex Goodman <[email protected]> * migrate relationship capabilities to separate internal package Signed-off-by: Alex Goodman <[email protected]> * refactor golang cataloger to use configuration options when creating packages Signed-off-by: Alex Goodman <[email protected]> * create internal object to facilitate reading from and writing to an SBOM Signed-off-by: Alex Goodman <[email protected]> * create a command-like object (task) to facilitate partial SBOM creation Signed-off-by: Alex Goodman <[email protected]> * add cataloger selection capability - be able to parse string expressions into a set of resolved actions against sets - be able to use expressions to select/add/remove tasks to/from the final set of tasks to run Signed-off-by: Alex Goodman <[email protected]> * add package, file, and environment related tasks Signed-off-by: Alex Goodman <[email protected]> * update existing file catalogers to use nested UI elements Signed-off-by: Alex Goodman <[email protected]> * add CreateSBOMConfig that drives the SBOM creation process Signed-off-by: Alex Goodman <[email protected]> * capture SBOM creation info as a struct Signed-off-by: Alex Goodman <[email protected]> * add CreateSBOM() function Signed-off-by: Alex Goodman <[email protected]> * fix tests Signed-off-by: Alex Goodman <[email protected]> * update docs with SBOM selection help + breaking changes Signed-off-by: Alex Goodman <[email protected]> * fix multiple override default inputs Signed-off-by: Alex Goodman <[email protected]> * fix deprecation flag printing to stdout Signed-off-by: Alex Goodman <[email protected]> * refactor cataloger selection description to separate object Signed-off-by: Alex Goodman <[email protected]> * address review comments Signed-off-by: Alex Goodman <[email protected]> * keep expression errors and show specific suggestions only Signed-off-by: Alex Goodman <[email protected]> * address additional review feedback Signed-off-by: Alex Goodman <[email protected]> * address more review comments Signed-off-by: Alex Goodman <[email protected]> * addressed additional PR review feedback Signed-off-by: Alex Goodman <[email protected]> * fix file selection references Signed-off-by: Alex Goodman <[email protected]> * remove guess language data generation option Signed-off-by: Alex Goodman <[email protected]> * add tests for coordinatesForSelection Signed-off-by: Alex Goodman <[email protected]> * rename relationship attributes Signed-off-by: Alex Goodman <[email protected]> * add descriptions to relationships config fields Signed-off-by: Alex Goodman <[email protected]> * improve documentation around configuration options Signed-off-by: Alex Goodman <[email protected]> * add explicit errors around legacy config entries Signed-off-by: Alex Goodman <[email protected]> --------- Signed-off-by: Alex Goodman <[email protected]>
Adds a top-level replacement for the syft API. The idea is to allow for encapsulation of more kinds of cataloging without the need to share a data interface. This allows for file-base cataloging and package-based cataloging to share the same approach to selection and configuration.
The existing cataloging functions have been removed, which is why this is a breaking change. I initially attempted to keep both schemes in place, however, the configuration management became ultimately confusing.
This PR adds high-level configuration:
syft/cataloging/*.go
: cross-cutting configuration that could affect all catalogers, the artifacts they produce, or add downstream artifacts based on these descriptions. This is a set of configurations NOT capabilities (e.g. behavior, such as catalogers themselves).syft/cataloging/pkgcataloging/*.go
: wires up configurations for all package catalogerssyft/cataloging/filecataloging/*.go
: wires up all configurations for file catalogersThis PR removes the existing configurations:
syft/pkg/cataloger/config.go
From a high-level, the
CreateSBOMConfig
is the entrypoint to all cataloging. The configuration itself describes what should be done. Ultimately all capabilities (file cataloging, pkg cataloging, linux distro identification, and cross-cutting relationship additions) are expressed as "tasks". Tasks act like a facade, similar to the command pattern, and encapsulates pre-configured behavior that ultimately writes to an SBOM. The notion of "tasks" has not been exported to the public API.Secondarily, this PR makes the following adjustments:
relationship
packageexclude-binary-overlap-by-ownership
has been moved topackage.exclude-binary-overlap-by-ownership
default-image-pull-source
has been moved tosource.image.default-pull-source
Minimal example of using the new API:
or
Leveraging a little more of the API:
Today when the cataloging process is run, the application configuration is captured to show the exact input. I've changed this some to instead capture an API-level construct instead of a construct that is in the
cmd
package. Here is an example of thesyft-json
descriptor
section:click to see all options in an example
This beats the current approach of using the catalogers: https://gist.github.com/wagoodman/57ed59a6d57600c23913071b8470175b
PRs broken off of this one
Follow up PRs
Partially implements #558
Fixes #2136
Closes #1731
Closes #1039
Closes #477