func()

in internal/engine/engine.go [148:207]


func (e *Engine) InteractWithScenario(scenario *common.Scenario) error {
	return fs.UsingDirectory(e.Configuration.WorkingDirectory, func() error {
		az.SetCorrelationId(e.Configuration.CorrelationId, scenario.Environment)

		stepsToExecute := filterDeletionCommands(scenario.Steps, e.Configuration.DoNotDelete)

		model, err := interactive.NewInteractiveModeModel(
			scenario.Name,
			e.Configuration.Subscription,
			e.Configuration.Environment,
			stepsToExecute,
			lib.CopyMap(scenario.Environment),
			scenario.GetSourceAsString(),
		)
		if err != nil {
			return err
		}

		common.Program = tea.NewProgram(model, tea.WithAltScreen(), tea.WithMouseCellMotion())

		var finalModel tea.Model
		var ok bool
		finalModel, err = common.Program.Run()

		model, ok = finalModel.(interactive.InteractiveModeModel)

		if environments.EnvironmentsAzure == e.Configuration.Environment {
			if !ok {
				return fmt.Errorf("failed to cast tea.Model to InteractiveModeModel")
			}

			logging.GlobalLogger.Info("Writing session output to stdout")
			fmt.Println(strings.Join(model.CommandLines, "\n"))
		}

		switch e.Configuration.Environment {
		case environments.EnvironmentsAzure, environments.EnvironmentsOCD:

			logging.GlobalLogger.Info(
				"Cleaning environment variable file located at /tmp/env-vars",
			)

			err := lib.CleanEnvironmentStateFile(lib.DefaultEnvironmentStateFile)
			if err != nil {
				logging.GlobalLogger.Errorf("Error cleaning environment variables: %s", err.Error())
				return err
			}

		default:
			lib.DeleteEnvironmentStateFile(lib.DefaultEnvironmentStateFile)
		}

		if err != nil {
			logging.GlobalLogger.Errorf("Failed to run program %s", err)
			return err
		}

		return nil
	})
}