github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/cmd/state/internal/cmdtree/tutorial.go (about)

     1  package cmdtree
     2  
     3  import (
     4  	"github.com/ActiveState/cli/internal/analytics/constants"
     5  	"github.com/ActiveState/cli/internal/captain"
     6  	"github.com/ActiveState/cli/internal/errs"
     7  	"github.com/ActiveState/cli/internal/locale"
     8  	"github.com/ActiveState/cli/internal/primer"
     9  	"github.com/ActiveState/cli/internal/runners/tutorial"
    10  )
    11  
    12  func newTutorialCommand(prime *primer.Values) *captain.Command {
    13  	cmd := captain.NewCommand(
    14  		"tutorial",
    15  		locale.Tl("tutorial_title", "Running Tutorial"),
    16  		locale.Tl("tutorial_description", "Learn how to use the State Tool"),
    17  		prime,
    18  		nil,
    19  		nil,
    20  		func(ccmd *captain.Command, args []string) error {
    21  			prime.Output().Print(ccmd.UsageText())
    22  			return nil
    23  		},
    24  	)
    25  
    26  	cmd.SetHidden(true)
    27  
    28  	return cmd
    29  }
    30  
    31  func newTutorialProjectCommand(prime *primer.Values) *captain.Command {
    32  	runner := tutorial.New(prime)
    33  	params := tutorial.NewProjectParams{}
    34  
    35  	cmd := captain.NewCommand(
    36  		"new-project",
    37  		locale.Tl("tutorial_new_project", `Running "New Project" Tutorial`),
    38  		locale.Tl("tutorial_description", "Learn how to create new projects. (ie. virtual environments)"),
    39  		prime,
    40  		[]*captain.Flag{
    41  			{
    42  				Name:        "skip-intro",
    43  				Description: locale.Tl("arg_tutorial_showintro", "Skip Introduction Text"),
    44  				Value:       &params.SkipIntro,
    45  			},
    46  			{
    47  				Name:        "language",
    48  				Description: locale.Tl("arg_tutorial_language", "Language that this new project should use"),
    49  				Value:       &params.Language,
    50  			},
    51  		},
    52  		nil,
    53  		func(ccmd *captain.Command, args []string) error {
    54  			err := runner.RunNewProject(params)
    55  			if err != nil {
    56  				prime.Analytics().EventWithLabel(constants.CatTutorial, "error", errs.JoinMessage(err))
    57  			} else {
    58  				prime.Analytics().Event(constants.CatTutorial, "completed")
    59  			}
    60  			return err
    61  		},
    62  	)
    63  
    64  	return cmd
    65  }