MCPcopy Index your code
hub / github.com/jetify-com/devbox / GenerateDevcontainer

Method GenerateDevcontainer

internal/devbox/devbox.go:464–511  ·  view source on GitHub ↗

GenerateDevcontainer generates devcontainer.json and Dockerfile for vscode run-in-container and GitHub Codespaces

(ctx context.Context, generateOpts devopt.GenerateOpts)

Source from the content-addressed store, hash-verified

462// GenerateDevcontainer generates devcontainer.json and Dockerfile for vscode run-in-container
463// and GitHub Codespaces
464func (d *Devbox) GenerateDevcontainer(ctx context.Context, generateOpts devopt.GenerateOpts) error {
465 ctx, task := trace.NewTask(ctx, "devboxGenerateDevcontainer")
466 defer task.End()
467
468 // construct path to devcontainer directory
469 devContainerPath := filepath.Join(d.projectDir, ".devcontainer/")
470 devContainerJSONPath := filepath.Join(devContainerPath, "devcontainer.json")
471 dockerfilePath := filepath.Join(devContainerPath, "Dockerfile")
472
473 // check if devcontainer.json or Dockerfile exist
474 filesExist := fileutil.Exists(devContainerJSONPath) || fileutil.Exists(dockerfilePath)
475 if !generateOpts.Force && filesExist {
476 return usererr.New(
477 "Files devcontainer.json or Dockerfile are already present in .devcontainer/. " +
478 "Remove the files or use --force to overwrite them.",
479 )
480 }
481
482 // create directory
483 err := os.MkdirAll(devContainerPath, os.ModePerm)
484 if err != nil {
485 return redact.Errorf("error creating dev container directory in <project>/%s: %w",
486 redact.Safe(filepath.Base(devContainerPath)), err)
487 }
488
489 // Setup generate parameters
490 gen := &generate.Options{
491 Path: devContainerPath,
492 RootUser: generateOpts.RootUser,
493 IsDevcontainer: true,
494 Pkgs: d.AllPackageNamesIncludingRemovedTriggerPackages(),
495 LocalFlakeDirs: d.getLocalFlakesDirs(),
496 }
497
498 // generate dockerfile
499 err = gen.CreateDockerfile(ctx, generate.CreateDockerfileOptions{})
500 if err != nil {
501 return redact.Errorf("error generating dev container Dockerfile in <project>/%s: %w",
502 redact.Safe(filepath.Base(devContainerPath)), err)
503 }
504 // generate devcontainer.json
505 err = gen.CreateDevcontainer(ctx)
506 if err != nil {
507 return redact.Errorf("error generating devcontainer.json in <project>/%s: %w",
508 redact.Safe(filepath.Base(devContainerPath)), err)
509 }
510 return nil
511}
512
513// GenerateDockerfile generates a Dockerfile that replicates the devbox shell
514func (d *Devbox) GenerateDockerfile(ctx context.Context, generateOpts devopt.GenerateOpts) error {

Callers 1

runGenerateCmdFunction · 0.80

Calls 9

getLocalFlakesDirsMethod · 0.95
CreateDockerfileMethod · 0.95
CreateDevcontainerMethod · 0.95
ExistsFunction · 0.92
NewFunction · 0.92
ErrorfFunction · 0.92
SafeFunction · 0.92
EndMethod · 0.80

Tested by

no test coverage detected