Skip to content

Commit acf1072

Browse files
authored
[filegen] move devcontainer_util.go into package filegen; make tmplFS internal (#1190)
## Summary This moves the `devcontainer_util.go` file into `filegen`. I didn't like `impl` code calling into `boxcli/generate`. The direction should be `boxcli` -> `impl` -> `{helper packages}`. Also, would be nice to keep `boxcli` for `cobra.Command` logic. We can now also make `filegen.TmplFS` internal i.e. `filegen.tmplFS` Needed to create `filegen.EnvrcContent` since it was inlined in `impl/devbox.go`. **RFC**: Arguably, this is unrelated to the rest of `filegen` which has to do with generating `flake.nix` and `scripts` files in aid of `PrintEnv`. So, we can also move into its own self-contained package. Let me know if that's preferable (and suggest a package name!) ## How was it tested? compiles
1 parent 69fe132 commit acf1072

File tree

3 files changed

+20
-24
lines changed

3 files changed

+20
-24
lines changed

internal/boxcli/generate/devcontainer_util.go renamed to internal/filegen/devcontainer_util.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
// Copyright 2023 Jetpack Technologies Inc and contributors. All rights reserved.
22
// Use of this source code is governed by the license in the LICENSE file.
33

4-
package generate
5-
6-
// TODO move this to package filegen at impl/filegen
7-
// no need to be in `boxcli`.
4+
package filegen
85

96
import (
107
"context"
11-
"embed"
128
"encoding/json"
139
"html/template"
10+
"io"
1411
"os"
1512
"path/filepath"
1613
"regexp"
@@ -47,7 +44,7 @@ type dockerfileData struct {
4744
}
4845

4946
// CreateDockerfile creates a Dockerfile in path and writes devcontainerDockerfile.tmpl's content into it
50-
func CreateDockerfile(ctx context.Context, tmplFS embed.FS, path string, localFlakeDirs []string, isDevcontainer bool) error {
47+
func CreateDockerfile(ctx context.Context, path string, localFlakeDirs []string, isDevcontainer bool) error {
5148
defer trace.StartRegion(ctx, "createDockerfile").End()
5249

5350
// create dockerfile
@@ -87,7 +84,7 @@ func CreateDevcontainer(ctx context.Context, path string, pkgs []string) error {
8784
return err
8885
}
8986

90-
func CreateEnvrc(ctx context.Context, tmplFS embed.FS, path string) error {
87+
func CreateEnvrc(ctx context.Context, path string) error {
9188
defer trace.StartRegion(ctx, "createEnvrc").End()
9289

9390
// create .envrc file
@@ -152,3 +149,9 @@ func getDevcontainerContent(pkgs []string) *devcontainerObject {
152149
}
153150
return devcontainerContent
154151
}
152+
153+
func EnvrcContent(w io.Writer) error {
154+
tmplName := "envrcContent.tmpl"
155+
t := template.Must(template.ParseFS(tmplFS, "tmpl/"+tmplName))
156+
return t.Execute(w, nil)
157+
}

internal/filegen/generate.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,8 @@ import (
2222
"go.jetpack.io/devbox/internal/planner/plansdk"
2323
)
2424

25-
// TmplFS docblock to satisfy silly linter.
26-
// TODO savil: move package generate in boxcli into this filegen package, and then make `TmplFS` internal
27-
//
2825
//go:embed tmpl/*
29-
var TmplFS embed.FS
26+
var tmplFS embed.FS
3027

3128
var shellFiles = []string{"shell.nix"}
3229

@@ -81,7 +78,7 @@ func writeFromTemplate(path string, plan any, tmplName string) error {
8178
tmpl.Funcs(templateFuncs)
8279

8380
var err error
84-
tmpl, err = tmpl.ParseFS(TmplFS, "tmpl/"+tmplKey)
81+
tmpl, err = tmpl.ParseFS(tmplFS, "tmpl/"+tmplKey)
8582
if err != nil {
8683
return errors.WithStack(err)
8784
}

internal/impl/devbox.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@ import (
1616
"strconv"
1717
"strings"
1818
"text/tabwriter"
19-
"text/template"
2019

2120
"github.com/pkg/errors"
2221
"github.com/samber/lo"
2322
"go.jetpack.io/devbox/internal/filegen"
2423
"golang.org/x/exp/slices"
2524

26-
"go.jetpack.io/devbox/internal/boxcli/generate"
2725
"go.jetpack.io/devbox/internal/boxcli/usererr"
2826
"go.jetpack.io/devbox/internal/cmdutil"
2927
"go.jetpack.io/devbox/internal/conf"
@@ -421,14 +419,14 @@ func (d *Devbox) GenerateDevcontainer(ctx context.Context, force bool) error {
421419
redact.Safe(filepath.Base(devContainerPath)), err)
422420
}
423421
// generate dockerfile
424-
err = generate.CreateDockerfile(ctx,
425-
filegen.TmplFS, devContainerPath, d.getLocalFlakesDirs(), true /* isDevcontainer */)
422+
err = filegen.CreateDockerfile(ctx,
423+
devContainerPath, d.getLocalFlakesDirs(), true /* isDevcontainer */)
426424
if err != nil {
427425
return redact.Errorf("error generating dev container Dockerfile in <project>/%s: %w",
428426
redact.Safe(filepath.Base(devContainerPath)), err)
429427
}
430428
// generate devcontainer.json
431-
err = generate.CreateDevcontainer(ctx, devContainerPath, d.Packages())
429+
err = filegen.CreateDevcontainer(ctx, devContainerPath, d.Packages())
432430
if err != nil {
433431
return redact.Errorf("error generating devcontainer.json in <project>/%s: %w",
434432
redact.Safe(filepath.Base(devContainerPath)), err)
@@ -452,15 +450,13 @@ func (d *Devbox) GenerateDockerfile(ctx context.Context, force bool) error {
452450
}
453451

454452
// generate dockerfile
455-
return errors.WithStack(generate.CreateDockerfile(ctx,
456-
filegen.TmplFS, d.projectDir, d.getLocalFlakesDirs(), false /* isDevcontainer */))
453+
return errors.WithStack(
454+
filegen.CreateDockerfile(ctx,
455+
d.projectDir, d.getLocalFlakesDirs(), false /* isDevcontainer */))
457456
}
458457

459458
func PrintEnvrcContent(w io.Writer) error {
460-
tmplName := "envrcContent.tmpl"
461-
t := template.Must(template.ParseFS(filegen.TmplFS, "tmpl/"+tmplName))
462-
// write content into file
463-
return t.Execute(w, nil)
459+
return filegen.EnvrcContent(w)
464460
}
465461

466462
// GenerateEnvrcFile generates a .envrc file that makes direnv integration convenient
@@ -489,7 +485,7 @@ func (d *Devbox) GenerateEnvrcFile(ctx context.Context, force bool) error {
489485
}
490486

491487
// .envrc file creation
492-
err := generate.CreateEnvrc(ctx, filegen.TmplFS, d.projectDir)
488+
err := filegen.CreateEnvrc(ctx, d.projectDir)
493489
if err != nil {
494490
return errors.WithStack(err)
495491
}

0 commit comments

Comments
 (0)