diff --git a/cli/azd/cmd/middleware/hooks.go b/cli/azd/cmd/middleware/hooks.go index 1d2a657c815..d43794fbeb4 100644 --- a/cli/azd/cmd/middleware/hooks.go +++ b/cli/azd/cmd/middleware/hooks.go @@ -14,27 +14,26 @@ import ( "github.com/azure/azure-dev/cli/azd/pkg/ext" "github.com/azure/azure-dev/cli/azd/pkg/input" "github.com/azure/azure-dev/cli/azd/pkg/ioc" - "github.com/azure/azure-dev/cli/azd/pkg/lazy" "github.com/azure/azure-dev/cli/azd/pkg/output/ux" "github.com/azure/azure-dev/cli/azd/pkg/project" ) type HooksMiddleware struct { - lazyEnvManager *lazy.Lazy[environment.Manager] - lazyEnv *lazy.Lazy[*environment.Environment] - lazyProjectConfig *lazy.Lazy[*project.ProjectConfig] - importManager *project.ImportManager - commandRunner exec.CommandRunner - console input.Console - options *Options - serviceLocator ioc.ServiceLocator + envManager environment.Manager + env *environment.Environment + projectConfig *project.ProjectConfig + importManager *project.ImportManager + commandRunner exec.CommandRunner + console input.Console + options *Options + serviceLocator ioc.ServiceLocator } // Creates a new instance of the Hooks middleware func NewHooksMiddleware( - lazyEnvManager *lazy.Lazy[environment.Manager], - lazyEnv *lazy.Lazy[*environment.Environment], - lazyProjectConfig *lazy.Lazy[*project.ProjectConfig], + envManager environment.Manager, + env *environment.Environment, + projectConfig *project.ProjectConfig, importManager *project.ImportManager, commandRunner exec.CommandRunner, console input.Console, @@ -42,74 +41,55 @@ func NewHooksMiddleware( serviceLocator ioc.ServiceLocator, ) Middleware { return &HooksMiddleware{ - lazyEnvManager: lazyEnvManager, - lazyEnv: lazyEnv, - lazyProjectConfig: lazyProjectConfig, - importManager: importManager, - commandRunner: commandRunner, - console: console, - options: options, - serviceLocator: serviceLocator, + envManager: envManager, + env: env, + projectConfig: projectConfig, + importManager: importManager, + commandRunner: commandRunner, + console: console, + options: options, + serviceLocator: serviceLocator, } } // Runs the Hooks middleware func (m *HooksMiddleware) Run(ctx context.Context, next NextFn) (*actions.ActionResult, error) { - env, err := m.lazyEnv.GetValue() - if err != nil { - log.Println("azd environment is not available, skipping all hook registrations.") - return next(ctx) - } - - projectConfig, err := m.lazyProjectConfig.GetValue() - if err != nil || projectConfig == nil { - log.Println("azd project is not available, skipping all hook registrations.") - return next(ctx) - } - // Validate hooks and display any warnings if !m.options.IsChildAction(ctx) { - if err := m.validateHooks(ctx, projectConfig); err != nil { + if err := m.validateHooks(ctx, m.projectConfig); err != nil { return nil, fmt.Errorf("failed validating hooks, %w", err) } } - if err := m.registerServiceHooks(ctx, env, projectConfig); err != nil { + if err := m.registerServiceHooks(ctx); err != nil { return nil, fmt.Errorf("failed registering service hooks, %w", err) } - return m.registerCommandHooks(ctx, env, projectConfig, next) + return m.registerCommandHooks(ctx, next) } // Register command level hooks for the executing cobra command & action // Invokes the middleware next function func (m *HooksMiddleware) registerCommandHooks( ctx context.Context, - env *environment.Environment, - projectConfig *project.ProjectConfig, next NextFn, ) (*actions.ActionResult, error) { - if len(projectConfig.Hooks) == 0 { + if len(m.projectConfig.Hooks) == 0 { log.Println( - "azd project is not available or does not contain any command hooks, skipping command hook registrations.", + "azd project does not contain any command hooks, skipping command hook registrations.", ) return next(ctx) } - envManager, err := m.lazyEnvManager.GetValue() - if err != nil { - return nil, fmt.Errorf("failed getting environment manager, %w", err) - } - - hooksManager := ext.NewHooksManager(projectConfig.Path, m.commandRunner) + hooksManager := ext.NewHooksManager(m.projectConfig.Path, m.commandRunner) hooksRunner := ext.NewHooksRunner( hooksManager, m.commandRunner, - envManager, + m.envManager, m.console, - projectConfig.Path, - projectConfig.Hooks, - env, + m.projectConfig.Path, + m.projectConfig.Hooks, + m.env, m.serviceLocator, ) @@ -118,7 +98,7 @@ func (m *HooksMiddleware) registerCommandHooks( commandNames := []string{m.options.CommandPath} commandNames = append(commandNames, m.options.Aliases...) - err = hooksRunner.Invoke(ctx, commandNames, func() error { + err := hooksRunner.Invoke(ctx, commandNames, func() error { result, err := next(ctx) if err != nil { return err @@ -137,17 +117,8 @@ func (m *HooksMiddleware) registerCommandHooks( // Registers event handlers for all services within the project configuration // Runs hooks for each matching event handler -func (m *HooksMiddleware) registerServiceHooks( - ctx context.Context, - env *environment.Environment, - projectConfig *project.ProjectConfig, -) error { - envManager, err := m.lazyEnvManager.GetValue() - if err != nil { - return fmt.Errorf("failed getting environment manager, %w", err) - } - - stableServices, err := m.importManager.ServiceStable(ctx, projectConfig) +func (m *HooksMiddleware) registerServiceHooks(ctx context.Context) error { + stableServices, err := m.importManager.ServiceStable(ctx, m.projectConfig) if err != nil { return fmt.Errorf("failed getting services: %w", err) } @@ -164,11 +135,11 @@ func (m *HooksMiddleware) registerServiceHooks( serviceHooksRunner := ext.NewHooksRunner( serviceHooksManager, m.commandRunner, - envManager, + m.envManager, m.console, service.Path(), service.Hooks, - env, + m.env, m.serviceLocator, ) diff --git a/cli/azd/cmd/middleware/hooks_test.go b/cli/azd/cmd/middleware/hooks_test.go index b1c350f4b35..f33d531d9dc 100644 --- a/cli/azd/cmd/middleware/hooks_test.go +++ b/cli/azd/cmd/middleware/hooks_test.go @@ -15,7 +15,6 @@ import ( "github.com/azure/azure-dev/cli/azd/pkg/environment/azdcontext" "github.com/azure/azure-dev/cli/azd/pkg/exec" "github.com/azure/azure-dev/cli/azd/pkg/ext" - "github.com/azure/azure-dev/cli/azd/pkg/lazy" "github.com/azure/azure-dev/cli/azd/pkg/project" "github.com/azure/azure-dev/cli/azd/test/mocks" "github.com/azure/azure-dev/cli/azd/test/mocks/mockenv" @@ -344,22 +343,10 @@ func runMiddleware( envManager.On("Save", mock.Anything, mock.Anything).Return(nil) envManager.On("Reload", mock.Anything, mock.Anything).Return(nil) - lazyEnvManager := lazy.NewLazy(func() (environment.Manager, error) { - return envManager, nil - }) - - lazyEnv := lazy.NewLazy(func() (*environment.Environment, error) { - return env, nil - }) - - lazyProjectConfig := lazy.NewLazy(func() (*project.ProjectConfig, error) { - return projectConfig, nil - }) - middleware := NewHooksMiddleware( - lazyEnvManager, - lazyEnv, - lazyProjectConfig, + envManager, + env, + projectConfig, project.NewImportManager(nil), mockContext.CommandRunner, mockContext.Console,