Skip to content

Commit 5699fff

Browse files
committed
added layered fs to load os and embedded templates
1 parent 0214437 commit 5699fff

7 files changed

Lines changed: 109 additions & 19 deletions

File tree

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,12 @@ Usage:
5353
helm-values docs [flags]
5454
5555
Flags:
56-
-h, --help help for docs
56+
--chart-dir string path to the chart directory
57+
--dry-run don't write changes to disk
58+
--extra-templates string path to extra templates directory
59+
-h, --help help for docs
60+
--log-level string log level (debug, info, warn, error, fatal, panic) (default "warn")
61+
--schema-file string path to the schema-file file (default "values.schema.json")
62+
--stdout write to stdout
63+
--strict fail on doc comment parsing errors
5764
```

cmd/helm-schema/internal/commands/docs.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"helmschema/cmd/helm-schema/internal/config"
1010
"helmschema/cmd/helm-schema/internal/docs"
1111
"helmschema/cmd/helm-schema/internal/jsonschema"
12+
"os"
1213
"strings"
1314

1415
"github.com/sirupsen/logrus"
@@ -83,6 +84,8 @@ func generateDocs(logger *logrus.Logger, cfg *config.DocsConfig) error {
8384
if err != nil {
8485
return err
8586
}
87+
extraTemplates = append(extraTemplates, "templates/md.valuesTable.gotmpl")
88+
extraTemplates = append(extraTemplates, "templates/rst.valuesTable.gotmpl")
8689

8790
logger.Debugf(
8891
"%s: docs: loading template: %s",
@@ -93,8 +96,23 @@ func generateDocs(logger *logrus.Logger, cfg *config.DocsConfig) error {
9396
logger.Debugf("%s: docs: loading extra template: %s", plan.Chart().Details.Name, extraTemplate)
9497
}
9598

99+
root, err := os.OpenRoot("/")
100+
if err != nil {
101+
return err
102+
}
103+
// rootFS := root.FS()
104+
// f, err := rootFS.Open("Users/brahm.lower/development/helm-kiwix/charts/kiwix/README.md.gotmpl")
105+
// fmt.Printf("f: %v\n", f)
106+
// fmt.Printf("err: %s\n", err.Error())
107+
108+
layeredFs := docs.NewLayeredFS(
109+
docs.TemplateFS,
110+
root.FS(),
111+
)
112+
96113
t, err := docs.NewTemplator(
97114
logger,
115+
layeredFs,
98116
plan.Chart().Details.Name,
99117
plan.ReadmeTemplateFilePath(),
100118
extraTemplates,
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package docs
2+
3+
import "embed"
4+
5+
//go:embed all:templates
6+
var TemplateFS embed.FS
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package docs
2+
3+
import (
4+
"fmt"
5+
"io/fs"
6+
)
7+
8+
func NewLayeredFS(layers ...fs.FS) *LayeredFS {
9+
return &LayeredFS{
10+
layers: layers,
11+
}
12+
}
13+
14+
type LayeredFS struct {
15+
layers []fs.FS
16+
}
17+
18+
var _ fs.FS = (*LayeredFS)(nil)
19+
var _ fs.GlobFS = (*LayeredFS)(nil)
20+
var _ fs.ReadFileFS = (*LayeredFS)(nil)
21+
22+
func (l *LayeredFS) Open(name string) (fs.File, error) {
23+
var lastErr error
24+
var f fs.File
25+
for _, layer := range l.layers {
26+
f, lastErr = layer.Open(name)
27+
if lastErr == nil {
28+
return f, nil
29+
}
30+
}
31+
32+
return nil, lastErr
33+
}
34+
35+
func (l *LayeredFS) Glob(name string) ([]string, error) {
36+
return []string{name}, nil
37+
}
38+
39+
func (l *LayeredFS) ReadFile(name string) ([]byte, error) {
40+
var lastErr error
41+
var b []byte
42+
for _, layer := range l.layers {
43+
b, lastErr = fs.ReadFile(layer, name)
44+
if lastErr == nil {
45+
return b, nil
46+
}
47+
}
48+
49+
fmt.Printf("ReadFile error: %v, %s\n", lastErr, name)
50+
return nil, lastErr
51+
}

cmd/helm-schema/internal/docs/templates.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,28 @@ package docs
22

33
import (
44
"io"
5+
"io/fs"
56
"path/filepath"
7+
"strings"
68
"text/template"
79

810
"github.com/Masterminds/sprig/v3"
911
"github.com/sirupsen/logrus"
1012
)
1113

12-
func NewTemplator(logger *logrus.Logger, chartName string, path string, extraPaths []string) (*Templator, error) {
14+
func NewTemplator(logger *logrus.Logger, fsys fs.FS, chartName string, path string, extraPaths []string) (*Templator, error) {
1315
paths := append([]string{path}, extraPaths...)
16+
17+
// A ridiculously stupid hack to get file lookups working
18+
// through the Root.FS because full absolute paths don't seem
19+
// to work when the root directory itself is mounted.
20+
for i, p := range paths {
21+
paths[i] = strings.TrimPrefix(p, "/")
22+
}
23+
1424
t, err := template.New(filepath.Base(path)).
1525
Funcs(sprig.FuncMap()).
16-
ParseFiles(paths...)
26+
ParseFS(fsys, paths...)
1727
if err != nil {
1828
return nil, err
1929
}

cmd/helm-schema/internal/docs/templates/md.valuesTable.gotmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
{{- define "md.valuesTable" }}
33
| Key | Type | Default | Description |
44
|-----|------|---------|-------------|
5-
{{- range .Values }}
5+
{{- range .ValuesTable }}
66
{{- "\n| "}}{{ .Key }}
77
{{- " | "}}{{ .Type }}
88
{{- " | "}}{{ .Default }}

cmd/helm-schema/internal/plan.go

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -123,23 +123,21 @@ func (p *Plan) WriteSchema(logger *logrus.Logger, schema *jsonschema.Schema) err
123123
}
124124

125125
func (p *Plan) WriteReadme(logger *logrus.Logger, s string) error {
126-
if p.StdOut() {
127-
fmt.Println(s)
126+
if !p.DryRun() {
127+
logger.Debugf("%s: docs: opening readme file", p.Chart().Details.Name)
128+
f, err := os.Create(p.ReadmeFilePath())
129+
if err != nil {
130+
return err
131+
}
132+
defer f.Close()
133+
134+
if _, err = f.Write([]byte(s)); err != nil {
135+
return err
136+
}
128137
}
129138

130-
if p.DryRun() {
131-
return nil
132-
}
133-
134-
logger.Debugf("%s: docs: opening readme file", p.Chart().Details.Name)
135-
f, err := os.Create(p.ReadmeFilePath())
136-
if err != nil {
137-
return err
138-
}
139-
defer f.Close()
140-
141-
if _, err = f.Write([]byte(s)); err != nil {
142-
return err
139+
if p.StdOut() {
140+
fmt.Println(s)
143141
}
144142

145143
return nil

0 commit comments

Comments
 (0)