diff --git a/trainings/clone.go b/trainings/clone.go index 0a0c43b..05877ea 100644 --- a/trainings/clone.go +++ b/trainings/clone.go @@ -40,6 +40,8 @@ func (h *Handlers) Clone(ctx context.Context, executionID string) error { return errors.Wrap(err, "can't write training config") } + _ = addModuleToWorkspace(pwd, resp.Dir) + files := &genproto.NextExerciseResponse{ TrainingStatus: genproto.NextExerciseResponse_IN_PROGRESS, Dir: resp.Dir, diff --git a/trainings/init.go b/trainings/init.go index 6f04633..041a380 100644 --- a/trainings/init.go +++ b/trainings/init.go @@ -4,6 +4,8 @@ import ( "context" "fmt" "os" + "os/exec" + "path" "strings" "github.com/ThreeDotsLabs/cli/trainings/files" @@ -76,6 +78,8 @@ func (h *Handlers) startTraining(ctx context.Context, trainingName string) error cfg.TrainingName, ) } + } else { + _ = createGoWorkspace(trainingRoot) } _, err = h.newGrpcClient(ctx).StartTraining( @@ -124,6 +128,37 @@ func writeGitignore(trainingRootFs *afero.BasePathFs) error { return nil } +func createGoWorkspace(trainingRoot string) error { + cmd := exec.Command("go", "work", "init") + cmd.Dir = trainingRoot + + if err := cmd.Run(); err != nil { + return errors.Wrap(err, "can't run go work init") + } + + return nil +} + +func hasGoWorkspace(trainingRoot string) bool { + _, err := os.Stat(path.Join(trainingRoot, "go.work")) + return err == nil +} + +func addModuleToWorkspace(trainingRoot string, modulePath string) error { + if !hasGoWorkspace(trainingRoot) { + return nil + } + + cmd := exec.Command("go", "work", "use", ".") + cmd.Dir = path.Join(trainingRoot, modulePath) + + if err := cmd.Run(); err != nil { + return errors.Wrap(err, "can't run go work use") + } + + return nil +} + func (h *Handlers) showTrainingStartPrompt() error { pwd, err := os.Getwd() if err != nil { diff --git a/trainings/next.go b/trainings/next.go index 13269dd..1ede912 100644 --- a/trainings/next.go +++ b/trainings/next.go @@ -45,6 +45,8 @@ func (h *Handlers) nextExercise(ctx context.Context, currentExerciseID string) ( return false, err } + _ = addModuleToWorkspace(trainingRoot, resp.Dir) + if resp.IsTextOnly { printTextOnlyExerciseInfo( h.config.TrainingConfig(trainingRootFs).TrainingName,