diff --git a/cmd/trivy/main.go b/cmd/trivy/main.go index eedc77d532..d33addd010 100644 --- a/cmd/trivy/main.go +++ b/cmd/trivy/main.go @@ -3,7 +3,7 @@ package main import ( "os" - "github.com/aquasecurity/trivy/internal" + "github.com/aquasecurity/trivy/pkg/commands" "github.com/aquasecurity/trivy/pkg/log" ) @@ -12,7 +12,7 @@ var ( ) func main() { - app := internal.NewApp(version) + app := commands.NewApp(version) err := app.Run(os.Args) if err != nil { log.Fatal(err) diff --git a/integration/client_server_test.go b/integration/client_server_test.go index 46807be2a7..dc50b6543a 100644 --- a/integration/client_server_test.go +++ b/integration/client_server_test.go @@ -18,7 +18,7 @@ import ( testcontainers "github.com/testcontainers/testcontainers-go" "github.com/urfave/cli/v2" - "github.com/aquasecurity/trivy/internal" + "github.com/aquasecurity/trivy/pkg/commands" "github.com/aquasecurity/trivy/pkg/report" ) @@ -484,7 +484,7 @@ func setup(t *testing.T, options setupOptions) (*cli.App, string, string) { go func() { // Setup CLI App - app := internal.NewApp(version) + app := commands.NewApp(version) app.Writer = ioutil.Discard osArgs := setupServer(addr, options.token, options.tokenHeader, cacheDir, options.cacheBackend) @@ -497,7 +497,7 @@ func setup(t *testing.T, options setupOptions) (*cli.App, string, string) { assert.NoError(t, err) // Setup CLI App - app := internal.NewApp(version) + app := commands.NewApp(version) app.Writer = ioutil.Discard return app, addr, cacheDir diff --git a/integration/docker_engine_test.go b/integration/docker_engine_test.go index 8f7b27b859..0a04145f08 100644 --- a/integration/docker_engine_test.go +++ b/integration/docker_engine_test.go @@ -10,12 +10,12 @@ import ( "strings" "testing" - "github.com/stretchr/testify/require" - - "github.com/aquasecurity/trivy/internal" "github.com/docker/docker/api/types" "github.com/docker/docker/client" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/aquasecurity/trivy/pkg/commands" ) func TestRun_WithDockerEngine(t *testing.T) { @@ -283,7 +283,7 @@ func TestRun_WithDockerEngine(t *testing.T) { defer os.Remove(of.Name()) // run trivy - app := internal.NewApp("dev") + app := commands.NewApp("dev") trivyArgs := []string{"trivy"} trivyArgs = append(trivyArgs, "--cache-dir", cacheDir) if tc.withImageSubcommand { diff --git a/integration/integration_test.go b/integration/integration_test.go index da14cf7fab..4b0da114ee 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -14,8 +14,9 @@ import ( "path/filepath" "time" - "github.com/aquasecurity/trivy-db/pkg/db" "github.com/spf13/afero" + + "github.com/aquasecurity/trivy-db/pkg/db" ) var update = flag.Bool("update", false, "update golden files") diff --git a/integration/registry_test.go b/integration/registry_test.go index 448449c9ba..f3e405de66 100644 --- a/integration/registry_test.go +++ b/integration/registry_test.go @@ -24,7 +24,7 @@ import ( _ "github.com/aquasecurity/fanal/analyzer" testdocker "github.com/aquasecurity/trivy/integration/docker" - "github.com/aquasecurity/trivy/internal" + "github.com/aquasecurity/trivy/pkg/commands" "github.com/aquasecurity/trivy/pkg/report" ) @@ -254,7 +254,7 @@ func scan(imageRef name.Reference, baseDir, goldenFile string, opt registryOptio defer unsetEnv() // Setup CLI App - app := internal.NewApp("dev") + app := commands.NewApp("dev") app.Writer = ioutil.Discard osArgs := []string{"trivy", "--cache-dir", cacheDir, "--format", "json", "--skip-update", "--output", outputFile, imageRef.Name()} diff --git a/integration/standalone_tar_test.go b/integration/standalone_tar_test.go index 07770b7bf9..3070560856 100644 --- a/integration/standalone_tar_test.go +++ b/integration/standalone_tar_test.go @@ -11,7 +11,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/aquasecurity/trivy/internal" + "github.com/aquasecurity/trivy/pkg/commands" ) func TestRun_WithTar(t *testing.T) { @@ -378,7 +378,7 @@ func TestRun_WithTar(t *testing.T) { defer os.RemoveAll(cacheDir) // Setup CLI App - app := internal.NewApp("dev") + app := commands.NewApp("dev") app.Writer = ioutil.Discard for _, c := range cases { diff --git a/internal/app.go b/pkg/commands/app.go similarity index 98% rename from internal/app.go rename to pkg/commands/app.go index c4d4abca3d..e6f316e0b6 100644 --- a/internal/app.go +++ b/pkg/commands/app.go @@ -1,4 +1,4 @@ -package internal +package commands import ( "encoding/json" @@ -13,10 +13,10 @@ import ( "github.com/aquasecurity/trivy-db/pkg/db" "github.com/aquasecurity/trivy-db/pkg/types" - "github.com/aquasecurity/trivy/internal/artifact" - "github.com/aquasecurity/trivy/internal/client" - "github.com/aquasecurity/trivy/internal/plugin" - "github.com/aquasecurity/trivy/internal/server" + "github.com/aquasecurity/trivy/pkg/commands/artifact" + "github.com/aquasecurity/trivy/pkg/commands/client" + "github.com/aquasecurity/trivy/pkg/commands/plugin" + "github.com/aquasecurity/trivy/pkg/commands/server" tdb "github.com/aquasecurity/trivy/pkg/db" "github.com/aquasecurity/trivy/pkg/utils" "github.com/aquasecurity/trivy/pkg/vulnerability" diff --git a/internal/app_test.go b/pkg/commands/app_test.go similarity index 99% rename from internal/app_test.go rename to pkg/commands/app_test.go index 6edce005b1..4986204f78 100644 --- a/internal/app_test.go +++ b/pkg/commands/app_test.go @@ -1,4 +1,4 @@ -package internal +package commands import ( "bytes" @@ -9,13 +9,11 @@ import ( "testing" "time" + "github.com/spf13/afero" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/spf13/afero" - "github.com/aquasecurity/trivy-db/pkg/db" - - "github.com/stretchr/testify/assert" ) func Test_showVersion(t *testing.T) { diff --git a/internal/artifact/config/config.go b/pkg/commands/artifact/config.go similarity index 91% rename from internal/artifact/config/config.go rename to pkg/commands/artifact/config.go index 869b41f105..b06bff046a 100644 --- a/internal/artifact/config/config.go +++ b/pkg/commands/artifact/config.go @@ -1,10 +1,10 @@ -package config +package artifact import ( "github.com/urfave/cli/v2" "golang.org/x/xerrors" - "github.com/aquasecurity/trivy/internal/config" + "github.com/aquasecurity/trivy/pkg/commands/config" ) // Config holds the artifact config @@ -24,8 +24,8 @@ type Config struct { autoRefresh bool } -// New is the factory method to return config -func New(c *cli.Context) (Config, error) { +// NewConfig is the factory method to return config +func NewConfig(c *cli.Context) (Config, error) { gc, err := config.NewGlobalConfig(c) if err != nil { return Config{}, xerrors.Errorf("failed to initialize global options: %w", err) diff --git a/internal/artifact/config/config_test.go b/pkg/commands/artifact/config_test.go similarity index 98% rename from internal/artifact/config/config_test.go rename to pkg/commands/artifact/config_test.go index fac4c75c32..b84b15ae76 100644 --- a/internal/artifact/config/config_test.go +++ b/pkg/commands/artifact/config_test.go @@ -1,4 +1,4 @@ -package config +package artifact import ( "flag" @@ -12,7 +12,7 @@ import ( "go.uber.org/zap/zaptest/observer" dbTypes "github.com/aquasecurity/trivy-db/pkg/types" - "github.com/aquasecurity/trivy/internal/config" + "github.com/aquasecurity/trivy/pkg/commands/config" ) func TestConfig_Init(t *testing.T) { @@ -188,7 +188,7 @@ func TestConfig_Init(t *testing.T) { ctx := cli.NewContext(app, set, nil) _ = set.Parse(tt.args) - c, err := New(ctx) + c, err := NewConfig(ctx) require.NoError(t, err, err) c.GlobalConfig.Logger = logger.Sugar() @@ -204,6 +204,7 @@ func TestConfig_Init(t *testing.T) { // test the error switch { case tt.wantErr != "": + require.NotNil(t, err) assert.Contains(t, err.Error(), tt.wantErr, tt.name) return default: diff --git a/internal/artifact/fs.go b/pkg/commands/artifact/fs.go similarity index 91% rename from internal/artifact/fs.go rename to pkg/commands/artifact/fs.go index ffd5802db4..fd7df25c56 100644 --- a/internal/artifact/fs.go +++ b/pkg/commands/artifact/fs.go @@ -9,7 +9,6 @@ import ( "github.com/aquasecurity/fanal/analyzer" "github.com/aquasecurity/fanal/cache" - "github.com/aquasecurity/trivy/internal/artifact/config" "github.com/aquasecurity/trivy/pkg/scanner" ) @@ -24,7 +23,7 @@ func filesystemScanner(ctx context.Context, dir string, ac cache.ArtifactCache, // FilesystemRun runs scan on filesystem func FilesystemRun(cliCtx *cli.Context) error { - c, err := config.New(cliCtx) + c, err := NewConfig(cliCtx) if err != nil { return err } diff --git a/internal/artifact/image.go b/pkg/commands/artifact/image.go similarity index 94% rename from internal/artifact/image.go rename to pkg/commands/artifact/image.go index 47ae382416..bdbfc1b37e 100644 --- a/internal/artifact/image.go +++ b/pkg/commands/artifact/image.go @@ -9,7 +9,6 @@ import ( "github.com/aquasecurity/fanal/analyzer" "github.com/aquasecurity/fanal/cache" - "github.com/aquasecurity/trivy/internal/artifact/config" "github.com/aquasecurity/trivy/pkg/scanner" ) @@ -34,7 +33,7 @@ func dockerScanner(ctx context.Context, imageName string, ac cache.ArtifactCache // ImageRun runs scan on docker image func ImageRun(cliCtx *cli.Context) error { - c, err := config.New(cliCtx) + c, err := NewConfig(cliCtx) if err != nil { return err } diff --git a/internal/artifact/inject.go b/pkg/commands/artifact/inject.go similarity index 100% rename from internal/artifact/inject.go rename to pkg/commands/artifact/inject.go diff --git a/internal/artifact/repository.go b/pkg/commands/artifact/repository.go similarity index 91% rename from internal/artifact/repository.go rename to pkg/commands/artifact/repository.go index acde0a62b4..3ce355e0e3 100644 --- a/internal/artifact/repository.go +++ b/pkg/commands/artifact/repository.go @@ -9,7 +9,6 @@ import ( "github.com/aquasecurity/fanal/analyzer" "github.com/aquasecurity/fanal/cache" - "github.com/aquasecurity/trivy/internal/artifact/config" "github.com/aquasecurity/trivy/pkg/scanner" ) @@ -25,7 +24,7 @@ func repositoryScanner(ctx context.Context, dir string, ac cache.ArtifactCache, // RepositoryRun runs scan on repository func RepositoryRun(cliCtx *cli.Context) error { - c, err := config.New(cliCtx) + c, err := NewConfig(cliCtx) if err != nil { return err } diff --git a/internal/artifact/run.go b/pkg/commands/artifact/run.go similarity index 87% rename from internal/artifact/run.go rename to pkg/commands/artifact/run.go index 1f868b3a49..fc3148818e 100644 --- a/internal/artifact/run.go +++ b/pkg/commands/artifact/run.go @@ -12,8 +12,7 @@ import ( "github.com/aquasecurity/fanal/analyzer" "github.com/aquasecurity/fanal/cache" "github.com/aquasecurity/trivy-db/pkg/db" - "github.com/aquasecurity/trivy/internal/artifact/config" - "github.com/aquasecurity/trivy/internal/operation" + "github.com/aquasecurity/trivy/pkg/commands/operation" "github.com/aquasecurity/trivy/pkg/log" "github.com/aquasecurity/trivy/pkg/report" "github.com/aquasecurity/trivy/pkg/scanner" @@ -27,14 +26,14 @@ var errSkipScan = errors.New("skip subsequent processes") type InitializeScanner func(context.Context, string, cache.ArtifactCache, cache.LocalArtifactCache, time.Duration, []analyzer.Type) (scanner.Scanner, func(), error) -func run(conf config.Config, initializeScanner InitializeScanner) error { +func run(conf Config, initializeScanner InitializeScanner) error { ctx, cancel := context.WithTimeout(context.Background(), conf.Timeout) defer cancel() return runWithContext(ctx, conf, initializeScanner) } -func runWithContext(ctx context.Context, conf config.Config, initializeScanner InitializeScanner) error { +func runWithContext(ctx context.Context, conf Config, initializeScanner InitializeScanner) error { if err := log.InitLogger(conf.Debug, conf.Quiet); err != nil { l.Fatal(err) } @@ -75,7 +74,7 @@ func runWithContext(ctx context.Context, conf config.Config, initializeScanner I return nil } -func initCache(c config.Config) (operation.Cache, error) { +func initCache(c Config) (operation.Cache, error) { utils.SetCacheDir(c.CacheDir) cache, err := operation.NewCache(c.CacheBackend) if err != nil { @@ -100,7 +99,7 @@ func initCache(c config.Config) (operation.Cache, error) { return cache, nil } -func initDB(c config.Config) error { +func initDB(c Config) error { // download the database file noProgress := c.Quiet || c.NoProgress if err := operation.DownloadDB(c.AppVersion, c.CacheDir, noProgress, c.Light, c.SkipUpdate); err != nil { @@ -117,7 +116,7 @@ func initDB(c config.Config) error { return nil } -func scan(ctx context.Context, conf config.Config, initializeScanner InitializeScanner, cacheClient cache.Cache) ( +func scan(ctx context.Context, conf Config, initializeScanner InitializeScanner, cacheClient cache.Cache) ( report.Results, error) { target := conf.Target if conf.Input != "" { @@ -152,7 +151,7 @@ func scan(ctx context.Context, conf config.Config, initializeScanner InitializeS return results, nil } -func filter(ctx context.Context, conf config.Config, results report.Results) (report.Results, error) { +func filter(ctx context.Context, conf Config, results report.Results) (report.Results, error) { vulnClient := initializeVulnerabilityClient() for i := range results { vulnClient.FillInfo(results[i].Vulnerabilities, results[i].Type) @@ -166,7 +165,7 @@ func filter(ctx context.Context, conf config.Config, results report.Results) (re return results, nil } -func exit(c config.Config, results report.Results) { +func exit(c Config, results report.Results) { if c.ExitCode != 0 { for _, result := range results { if len(result.Vulnerabilities) > 0 { diff --git a/internal/artifact/wire_gen.go b/pkg/commands/artifact/wire_gen.go similarity index 100% rename from internal/artifact/wire_gen.go rename to pkg/commands/artifact/wire_gen.go diff --git a/internal/client/config/config.go b/pkg/commands/client/config.go similarity index 90% rename from internal/client/config/config.go rename to pkg/commands/client/config.go index 9aad8efb8c..68d5a67edf 100644 --- a/internal/client/config/config.go +++ b/pkg/commands/client/config.go @@ -1,4 +1,4 @@ -package config +package client import ( "net/http" @@ -7,7 +7,7 @@ import ( "github.com/urfave/cli/v2" "golang.org/x/xerrors" - "github.com/aquasecurity/trivy/internal/config" + "github.com/aquasecurity/trivy/pkg/commands/config" ) // Config holds the Trivy client config @@ -26,8 +26,8 @@ type Config struct { CustomHeaders http.Header } -// New is the factory method for Config -func New(c *cli.Context) (Config, error) { +// NewConfig is the factory method for Config +func NewConfig(c *cli.Context) (Config, error) { gc, err := config.NewGlobalConfig(c) if err != nil { return Config{}, xerrors.Errorf("failed to initialize global options: %w", err) diff --git a/internal/client/config/config_test.go b/pkg/commands/client/config_test.go similarity index 98% rename from internal/client/config/config_test.go rename to pkg/commands/client/config_test.go index 8868e2f479..585cb5ac55 100644 --- a/internal/client/config/config_test.go +++ b/pkg/commands/client/config_test.go @@ -1,4 +1,4 @@ -package config +package client import ( "flag" @@ -14,7 +14,7 @@ import ( "go.uber.org/zap/zaptest/observer" dbTypes "github.com/aquasecurity/trivy-db/pkg/types" - "github.com/aquasecurity/trivy/internal/config" + "github.com/aquasecurity/trivy/pkg/commands/config" ) func TestConfig_Init(t *testing.T) { @@ -228,7 +228,7 @@ func TestConfig_Init(t *testing.T) { ctx := cli.NewContext(app, set, nil) _ = set.Parse(tt.args) - c, err := New(ctx) + c, err := NewConfig(ctx) require.NoError(t, err, err) c.GlobalConfig.Logger = logger.Sugar() @@ -244,6 +244,7 @@ func TestConfig_Init(t *testing.T) { // test the error switch { case tt.wantErr != "": + require.NotNil(t, err) assert.Contains(t, err.Error(), tt.wantErr, tt.name) return default: diff --git a/internal/client/inject.go b/pkg/commands/client/inject.go similarity index 100% rename from internal/client/inject.go rename to pkg/commands/client/inject.go diff --git a/internal/client/run.go b/pkg/commands/client/run.go similarity index 89% rename from internal/client/run.go rename to pkg/commands/client/run.go index 09a74744da..a230cb0e6c 100644 --- a/internal/client/run.go +++ b/pkg/commands/client/run.go @@ -8,7 +8,6 @@ import ( "golang.org/x/xerrors" "github.com/aquasecurity/fanal/analyzer" - "github.com/aquasecurity/trivy/internal/client/config" "github.com/aquasecurity/trivy/pkg/cache" "github.com/aquasecurity/trivy/pkg/log" "github.com/aquasecurity/trivy/pkg/report" @@ -20,21 +19,21 @@ import ( // Run runs the scan func Run(cliCtx *cli.Context) error { - c, err := config.New(cliCtx) + c, err := NewConfig(cliCtx) if err != nil { return err } return run(c) } -func run(conf config.Config) error { +func run(conf Config) error { ctx, cancel := context.WithTimeout(context.Background(), conf.Timeout) defer cancel() return runWithContext(ctx, conf) } -func runWithContext(ctx context.Context, conf config.Config) error { +func runWithContext(ctx context.Context, conf Config) error { if err := initialize(&conf); err != nil { return xerrors.Errorf("initialize error: %w", err) } @@ -80,7 +79,7 @@ func runWithContext(ctx context.Context, conf config.Config) error { return nil } -func initialize(conf *config.Config) error { +func initialize(conf *Config) error { // Initialize logger if err := log.InitLogger(conf.Debug, conf.Quiet); err != nil { return xerrors.Errorf("failed to initialize a logger: %w", err) @@ -98,7 +97,7 @@ func initialize(conf *config.Config) error { return nil } -func initializeScanner(ctx context.Context, conf config.Config) (scanner.Scanner, func(), error) { +func initializeScanner(ctx context.Context, conf Config) (scanner.Scanner, func(), error) { remoteCache := cache.NewRemoteCache(cache.RemoteURL(conf.RemoteAddr), conf.CustomHeaders) // By default, apk commands are not analyzed. @@ -127,7 +126,7 @@ func initializeScanner(ctx context.Context, conf config.Config) (scanner.Scanner return s, cleanup, nil } -func exit(c config.Config, results report.Results) { +func exit(c Config, results report.Results) { if c.ExitCode != 0 { for _, result := range results { if len(result.Vulnerabilities) > 0 { diff --git a/internal/client/wire_gen.go b/pkg/commands/client/wire_gen.go similarity index 100% rename from internal/client/wire_gen.go rename to pkg/commands/client/wire_gen.go diff --git a/internal/config/artifact.go b/pkg/commands/config/artifact.go similarity index 100% rename from internal/config/artifact.go rename to pkg/commands/config/artifact.go diff --git a/internal/config/artifact_test.go b/pkg/commands/config/artifact_test.go similarity index 96% rename from internal/config/artifact_test.go rename to pkg/commands/config/artifact_test.go index 95608b8dd9..0d91645b82 100644 --- a/internal/config/artifact_test.go +++ b/pkg/commands/config/artifact_test.go @@ -4,7 +4,7 @@ import ( "flag" "testing" - "github.com/aquasecurity/trivy/internal/config" + "github.com/aquasecurity/trivy/pkg/commands/config" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/urfave/cli/v2" diff --git a/internal/config/cache.go b/pkg/commands/config/cache.go similarity index 100% rename from internal/config/cache.go rename to pkg/commands/config/cache.go diff --git a/internal/config/cache_test.go b/pkg/commands/config/cache_test.go similarity index 96% rename from internal/config/cache_test.go rename to pkg/commands/config/cache_test.go index b16ee7dea1..7172c09cda 100644 --- a/internal/config/cache_test.go +++ b/pkg/commands/config/cache_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/urfave/cli/v2" - "github.com/aquasecurity/trivy/internal/config" + "github.com/aquasecurity/trivy/pkg/commands/config" ) func TestNewCacheConfig(t *testing.T) { diff --git a/internal/config/db.go b/pkg/commands/config/db.go similarity index 100% rename from internal/config/db.go rename to pkg/commands/config/db.go diff --git a/internal/config/db_test.go b/pkg/commands/config/db_test.go similarity index 96% rename from internal/config/db_test.go rename to pkg/commands/config/db_test.go index 333d5b2612..3551e61123 100644 --- a/internal/config/db_test.go +++ b/pkg/commands/config/db_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/urfave/cli/v2" - "github.com/aquasecurity/trivy/internal/config" + "github.com/aquasecurity/trivy/pkg/commands/config" ) func TestNewDBConfig(t *testing.T) { diff --git a/internal/config/global.go b/pkg/commands/config/global.go similarity index 100% rename from internal/config/global.go rename to pkg/commands/config/global.go diff --git a/internal/config/global_test.go b/pkg/commands/config/global_test.go similarity index 94% rename from internal/config/global_test.go rename to pkg/commands/config/global_test.go index ceb89be5ae..543cfda53b 100644 --- a/internal/config/global_test.go +++ b/pkg/commands/config/global_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" "github.com/urfave/cli/v2" - "github.com/aquasecurity/trivy/internal/config" + "github.com/aquasecurity/trivy/pkg/commands/config" ) func TestNewGlobalConfig(t *testing.T) { diff --git a/internal/config/image.go b/pkg/commands/config/image.go similarity index 100% rename from internal/config/image.go rename to pkg/commands/config/image.go diff --git a/internal/config/report.go b/pkg/commands/config/report.go similarity index 100% rename from internal/config/report.go rename to pkg/commands/config/report.go diff --git a/internal/config/report_test.go b/pkg/commands/config/report_test.go similarity index 100% rename from internal/config/report_test.go rename to pkg/commands/config/report_test.go diff --git a/internal/operation/inject.go b/pkg/commands/operation/inject.go similarity index 100% rename from internal/operation/inject.go rename to pkg/commands/operation/inject.go diff --git a/internal/operation/operation.go b/pkg/commands/operation/operation.go similarity index 100% rename from internal/operation/operation.go rename to pkg/commands/operation/operation.go diff --git a/internal/operation/wire_gen.go b/pkg/commands/operation/wire_gen.go similarity index 100% rename from internal/operation/wire_gen.go rename to pkg/commands/operation/wire_gen.go diff --git a/internal/plugin/plugin.go b/pkg/commands/plugin/plugin.go similarity index 98% rename from internal/plugin/plugin.go rename to pkg/commands/plugin/plugin.go index 32d71fcd81..609ac6841f 100644 --- a/internal/plugin/plugin.go +++ b/pkg/commands/plugin/plugin.go @@ -6,7 +6,7 @@ import ( "github.com/urfave/cli/v2" "golang.org/x/xerrors" - "github.com/aquasecurity/trivy/internal/config" + "github.com/aquasecurity/trivy/pkg/commands/config" "github.com/aquasecurity/trivy/pkg/log" "github.com/aquasecurity/trivy/pkg/plugin" ) diff --git a/internal/server/config/config.go b/pkg/commands/server/config.go similarity index 82% rename from internal/server/config/config.go rename to pkg/commands/server/config.go index 074e3e1944..766cb68904 100644 --- a/internal/server/config/config.go +++ b/pkg/commands/server/config.go @@ -1,9 +1,9 @@ -package config +package server import ( "github.com/urfave/cli/v2" - "github.com/aquasecurity/trivy/internal/config" + "github.com/aquasecurity/trivy/pkg/commands/config" ) // Config holds the Trivy config @@ -17,8 +17,8 @@ type Config struct { TokenHeader string } -// New is the factory method to return config -func New(c *cli.Context) Config { +// NewConfig is the factory method to return config +func NewConfig(c *cli.Context) Config { // the error is ignored because logger is unnecessary gc, _ := config.NewGlobalConfig(c) // nolint: errcheck return Config{ diff --git a/internal/server/config/config_test.go b/pkg/commands/server/config_test.go similarity index 90% rename from internal/server/config/config_test.go rename to pkg/commands/server/config_test.go index 11d5f13b3c..a8ed668eb2 100644 --- a/internal/server/config/config_test.go +++ b/pkg/commands/server/config_test.go @@ -1,4 +1,4 @@ -package config_test +package server_test import ( "flag" @@ -8,20 +8,20 @@ import ( "github.com/stretchr/testify/require" "github.com/urfave/cli/v2" - "github.com/aquasecurity/trivy/internal/config" - c "github.com/aquasecurity/trivy/internal/server/config" + "github.com/aquasecurity/trivy/pkg/commands/config" + "github.com/aquasecurity/trivy/pkg/commands/server" ) func TestNew(t *testing.T) { tests := []struct { name string args []string - want c.Config + want server.Config }{ { name: "happy path", args: []string{"-quiet", "--no-progress", "--reset", "--skip-update", "--listen", "localhost:8080"}, - want: c.Config{ + want: server.Config{ GlobalConfig: config.GlobalConfig{ Quiet: true, }, @@ -49,7 +49,7 @@ func TestNew(t *testing.T) { tt.want.GlobalConfig.Context = ctx - got := c.New(ctx) + got := server.NewConfig(ctx) assert.Equal(t, tt.want.GlobalConfig.Quiet, got.Quiet, tt.name) assert.Equal(t, tt.want.DBConfig, got.DBConfig, tt.name) assert.Equal(t, tt.want.Listen, got.Listen, tt.name) @@ -88,7 +88,7 @@ func TestConfig_Init(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - c := &c.Config{ + c := &server.Config{ DBConfig: tt.dbConfig, } diff --git a/internal/server/run.go b/pkg/commands/server/run.go similarity index 78% rename from internal/server/run.go rename to pkg/commands/server/run.go index c76afb6b32..cd4d74308e 100644 --- a/internal/server/run.go +++ b/pkg/commands/server/run.go @@ -5,19 +5,18 @@ import ( "golang.org/x/xerrors" "github.com/aquasecurity/trivy-db/pkg/db" - "github.com/aquasecurity/trivy/internal/operation" - "github.com/aquasecurity/trivy/internal/server/config" + "github.com/aquasecurity/trivy/pkg/commands/operation" "github.com/aquasecurity/trivy/pkg/log" - "github.com/aquasecurity/trivy/pkg/rpc/server" + rpcServer "github.com/aquasecurity/trivy/pkg/rpc/server" "github.com/aquasecurity/trivy/pkg/utils" ) // Run runs the scan func Run(ctx *cli.Context) error { - return run(config.New(ctx)) + return run(NewConfig(ctx)) } -func run(c config.Config) (err error) { +func run(c Config) (err error) { if err = log.InitLogger(c.Debug, c.Quiet); err != nil { return xerrors.Errorf("failed to initialize a logger: %w", err) } @@ -53,5 +52,6 @@ func run(c config.Config) (err error) { return xerrors.Errorf("error in vulnerability DB initialize: %w", err) } - return server.ListenAndServe(c, cache) + server := rpcServer.NewServer(c.AppVersion, c.Listen, c.CacheDir, c.Token, c.TokenHeader) + return server.ListenAndServe(cache) } diff --git a/pkg/rpc/server/listen.go b/pkg/rpc/server/listen.go index 3c9f641e94..7749205406 100644 --- a/pkg/rpc/server/listen.go +++ b/pkg/rpc/server/listen.go @@ -14,7 +14,6 @@ import ( "github.com/aquasecurity/fanal/cache" "github.com/aquasecurity/trivy-db/pkg/db" - "github.com/aquasecurity/trivy/internal/server/config" dbFile "github.com/aquasecurity/trivy/pkg/db" "github.com/aquasecurity/trivy/pkg/log" "github.com/aquasecurity/trivy/pkg/utils" @@ -28,26 +27,46 @@ var DBWorkerSuperSet = wire.NewSet( newDBWorker, ) +// Server represents Trivy server +type Server struct { + appVersion string + addr string + cacheDir string + token string + tokenHeader string +} + +// NewServer returns an instance of Server +func NewServer(appVersion, addr, cacheDir, token, tokenHeader string) Server { + return Server{ + appVersion: appVersion, + addr: addr, + cacheDir: cacheDir, + token: token, + tokenHeader: tokenHeader, + } +} + // ListenAndServe starts Trivy server -func ListenAndServe(c config.Config, serverCache cache.Cache) error { +func (s Server) ListenAndServe(serverCache cache.Cache) error { requestWg := &sync.WaitGroup{} dbUpdateWg := &sync.WaitGroup{} go func() { - worker := initializeDBWorker(c.CacheDir, true) + worker := initializeDBWorker(s.cacheDir, true) ctx := context.Background() for { time.Sleep(1 * time.Hour) - if err := worker.update(ctx, c.AppVersion, c.CacheDir, dbUpdateWg, requestWg); err != nil { + if err := worker.update(ctx, s.appVersion, s.cacheDir, dbUpdateWg, requestWg); err != nil { log.Logger.Errorf("%+v\n", err) } } }() - mux := newServeMux(serverCache, dbUpdateWg, requestWg, c.Token, c.TokenHeader) - log.Logger.Infof("Listening %s...", c.Listen) + mux := newServeMux(serverCache, dbUpdateWg, requestWg, s.token, s.tokenHeader) + log.Logger.Infof("Listening %s...", s.addr) - return http.ListenAndServe(c.Listen, mux) + return http.ListenAndServe(s.addr, mux) } func newServeMux(serverCache cache.Cache, dbUpdateWg, requestWg *sync.WaitGroup, token, tokenHeader string) *http.ServeMux {