@@ -61,6 +61,7 @@ type Devbox struct {
61
61
pure bool
62
62
allowInsecureAdds bool
63
63
customProcessComposeFile string
64
+ GenerateOpts * devopt.GenerateOpts
64
65
65
66
// Possible TODO: hardcode this to stderr. Allowing the caller to specify the
66
67
// writer is error prone. Since it is almost always stderr, we should default
@@ -93,6 +94,10 @@ func Open(opts *devopt.Opts) (*Devbox, error) {
93
94
pure : opts .Pure ,
94
95
customProcessComposeFile : opts .CustomProcessComposeFile ,
95
96
allowInsecureAdds : opts .AllowInsecureAdds ,
97
+ GenerateOpts : & devopt.GenerateOpts {
98
+ Force : opts .GenerateOpts .Force ,
99
+ RootUser : opts .GenerateOpts .RootUser ,
100
+ },
96
101
}
97
102
98
103
lock , err := lock .GetFile (box )
@@ -370,7 +375,7 @@ func (d *Devbox) Info(ctx context.Context, pkg string, markdown bool) error {
370
375
371
376
// GenerateDevcontainer generates devcontainer.json and Dockerfile for vscode run-in-container
372
377
// and GitHub Codespaces
373
- func (d * Devbox ) GenerateDevcontainer (ctx context.Context , force bool , rootUser bool ) error {
378
+ func (d * Devbox ) GenerateDevcontainer (ctx context.Context ) error {
374
379
ctx , task := trace .NewTask (ctx , "devboxGenerateDevcontainer" )
375
380
defer task .End ()
376
381
@@ -381,7 +386,7 @@ func (d *Devbox) GenerateDevcontainer(ctx context.Context, force bool, rootUser
381
386
382
387
// check if devcontainer.json or Dockerfile exist
383
388
filesExist := fileutil .Exists (devContainerJSONPath ) || fileutil .Exists (dockerfilePath )
384
- if ! force && filesExist {
389
+ if ! d . GenerateOpts . Force && filesExist {
385
390
return usererr .New (
386
391
"Files devcontainer.json or Dockerfile are already present in .devcontainer/. " +
387
392
"Remove the files or use --force to overwrite them." ,
@@ -394,21 +399,24 @@ func (d *Devbox) GenerateDevcontainer(ctx context.Context, force bool, rootUser
394
399
return redact .Errorf ("error creating dev container directory in <project>/%s: %w" ,
395
400
redact .Safe (filepath .Base (devContainerPath )), err )
396
401
}
397
- isDevcontainer := true
398
402
399
403
// Setup generate parameters
400
- g := generate .Open (
401
- ctx , devContainerPath , rootUser , isDevcontainer , d .Packages (), d .getLocalFlakesDirs (),
402
- )
404
+ g := & generate.Options {
405
+ Path : devContainerPath ,
406
+ RootUser : d .GenerateOpts .RootUser ,
407
+ IsDevcontainer : true ,
408
+ Pkgs : d .Packages (),
409
+ LocalFlakeDirs : d .getLocalFlakesDirs (),
410
+ }
403
411
404
412
// generate dockerfile
405
- err = g .CreateDockerfile ()
413
+ err = g .CreateDockerfile (ctx )
406
414
if err != nil {
407
415
return redact .Errorf ("error generating dev container Dockerfile in <project>/%s: %w" ,
408
416
redact .Safe (filepath .Base (devContainerPath )), err )
409
417
}
410
418
// generate devcontainer.json
411
- err = g .CreateDevcontainer ()
419
+ err = g .CreateDevcontainer (ctx )
412
420
if err != nil {
413
421
return redact .Errorf ("error generating devcontainer.json in <project>/%s: %w" ,
414
422
redact .Safe (filepath .Base (devContainerPath )), err )
@@ -417,28 +425,31 @@ func (d *Devbox) GenerateDevcontainer(ctx context.Context, force bool, rootUser
417
425
}
418
426
419
427
// GenerateDockerfile generates a Dockerfile that replicates the devbox shell
420
- func (d * Devbox ) GenerateDockerfile (ctx context.Context , force bool , rootUser bool ) error {
428
+ func (d * Devbox ) GenerateDockerfile (ctx context.Context ) error {
421
429
ctx , task := trace .NewTask (ctx , "devboxGenerateDockerfile" )
422
430
defer task .End ()
423
431
424
432
dockerfilePath := filepath .Join (d .projectDir , "Dockerfile" )
425
433
// check if Dockerfile doesn't exist
426
434
filesExist := fileutil .Exists (dockerfilePath )
427
- if ! force && filesExist {
435
+ if ! d . GenerateOpts . Force && filesExist {
428
436
return usererr .New (
429
437
"Dockerfile is already present in the current directory. " +
430
438
"Remove it or use --force to overwrite it." ,
431
439
)
432
440
}
433
- isDevcontainer := false
434
441
435
442
// Setup Generate parameters
436
- g := generate .Open (
437
- ctx , d .projectDir , rootUser , isDevcontainer , d .Packages (), d .getLocalFlakesDirs (),
438
- )
443
+ g := & generate.Options {
444
+ Path : d .projectDir ,
445
+ RootUser : d .GenerateOpts .RootUser ,
446
+ IsDevcontainer : false ,
447
+ Pkgs : d .Packages (),
448
+ LocalFlakeDirs : d .getLocalFlakesDirs (),
449
+ }
439
450
440
451
// generate dockerfile
441
- return errors .WithStack (g .CreateDockerfile ())
452
+ return errors .WithStack (g .CreateDockerfile (ctx ))
442
453
}
443
454
444
455
func PrintEnvrcContent (w io.Writer , envFlags devopt.EnvFlags ) error {
0 commit comments