mirror of
https://github.com/anchore/syft.git
synced 2026-10-30 22:12:28 +01:00
Fix passing "--key" to the attest command. Additionally, pull in an update to the clio CLI library to permit unit testing that flags and env vars are parsed to the correct field on command options structs. This testing strategy was needed here because testing attestation in an end to end test requires a prohibitive amount of setup. --------- Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> Signed-off-by: Will Murphy <will.murphy@anchore.com> Co-authored-by: Alex Goodman <wagoodman@users.noreply.github.com>
56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package internal
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/anchore/clio"
|
|
"github.com/anchore/stereoscope"
|
|
ui2 "github.com/anchore/syft/cmd/syft/cli/ui"
|
|
"github.com/anchore/syft/cmd/syft/internal/ui"
|
|
"github.com/anchore/syft/internal/bus"
|
|
"github.com/anchore/syft/internal/log"
|
|
"github.com/anchore/syft/internal/redact"
|
|
)
|
|
|
|
func AppClioSetupConfig(id clio.Identification, out io.Writer) *clio.SetupConfig {
|
|
clioCfg := clio.NewSetupConfig(id).
|
|
WithGlobalConfigFlag(). // add persistent -c <path> for reading an application config from
|
|
WithGlobalLoggingFlags(). // add persistent -v and -q flags tied to the logging config
|
|
WithConfigInRootHelp(). // --help on the root command renders the full application config in the help text
|
|
WithUIConstructor(
|
|
// select a UI based on the logging configuration and state of stdin (if stdin is a tty)
|
|
func(cfg clio.Config) ([]clio.UI, error) {
|
|
noUI := ui.None(out, cfg.Log.Quiet)
|
|
if !cfg.Log.AllowUI(os.Stdin) || cfg.Log.Quiet {
|
|
return []clio.UI{noUI}, nil
|
|
}
|
|
|
|
return []clio.UI{
|
|
ui.New(out, cfg.Log.Quiet,
|
|
ui2.New(ui2.DefaultHandlerConfig()),
|
|
),
|
|
noUI,
|
|
}, nil
|
|
},
|
|
).
|
|
WithInitializers(
|
|
func(state *clio.State) error {
|
|
// clio is setting up and providing the bus, redact store, and logger to the application. Once loaded,
|
|
// we can hoist them into the internal packages for global use.
|
|
stereoscope.SetBus(state.Bus)
|
|
bus.Set(state.Bus)
|
|
|
|
redact.Set(state.RedactStore)
|
|
|
|
log.Set(state.Logger)
|
|
stereoscope.SetLogger(state.Logger)
|
|
return nil
|
|
},
|
|
).
|
|
WithPostRuns(func(state *clio.State, err error) {
|
|
stereoscope.Cleanup()
|
|
})
|
|
return clioCfg
|
|
}
|