Skip to content

Commit

Permalink
add initial adoc export
Browse files Browse the repository at this point in the history
Signed-off-by: Christian Richter <crichter@owncloud.com>
  • Loading branch information
dragonchaser committed May 4, 2022
1 parent 4b70484 commit 78c0a4d
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 1 deletion.
3 changes: 2 additions & 1 deletion docs/extensions/_includes/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
*_configvars.md
*-example.yaml
*-example.yaml
adoc/*adoc
Empty file.
94 changes: 94 additions & 0 deletions docs/helpers/adoc-generator.go.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package main

import (
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"reflect"
"strings"
"text/template"

{{- range $key, $value := .}}
pkg{{$key}} "{{$value}}"
{{- end}})

type ConfigField struct {
Name string
DefaultValue string
Type string
Description string
VersionInfo string
}

func main() {
fmt.Println("Generating adoc documentation for environment variables:")
content, err := ioutil.ReadFile("../../docs/templates/ADOC.tmpl")
if err != nil {
log.Fatal(err)
}
replacer := strings.NewReplacer(
"github.com/owncloud/ocis/extensions/", "",
"/pkg/config/defaults", "",
)
var fields []ConfigField
var targetFile *os.File
tpl := template.Must(template.New("").Parse(string(content)))

m := map[string]interface{}{
{{- range $key, $value := .}}
"{{$value}}": *pkg{{$key}}.FullDefaultConfig(),
{{- end }}
}

targetFolder := "../../docs/extensions/_includes/adoc/"
for pkg, conf := range m {
fields = GetAnnotatedVariables(conf)
if len(fields) > 0 {
fmt.Printf("... %s\n", pkg)
targetFile, err = os.Create(filepath.Join(targetFolder, replacer.Replace(pkg) + "_configvars.adoc"))
if err != nil {
log.Fatalf("Failed to create target file: %s", err)
}
defer targetFile.Close()
if err := tpl.Execute(targetFile, fields); err != nil {
log.Fatalf("Failed to execute template: %s", err)
}
}
}
fmt.Println("done")
}

func GetAnnotatedVariables(s interface{}) []ConfigField {
t := reflect.TypeOf(s)
v := reflect.ValueOf(s)

var fields []ConfigField
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
value := v.Field(i)

switch value.Kind() {
default:
desc := field.Tag.Get("desc")
env, ok := field.Tag.Lookup("env")
if !ok {
continue
}
v := fmt.Sprintf("%v", value.Interface())
fields = append(fields, ConfigField{Name: strings.ReplaceAll(env, ";", "\n"), DefaultValue: v, Description: desc, Type: value.Type().Name()})
case reflect.Ptr:
// PolicySelectors in the Proxy are being skipped atm
// they are not configurable via env vars, if that changes
// they are probably added to the Sanitize() function
// and this should not be an issue then
if !value.IsZero() && value.Elem().CanInterface() {
fields = append(fields, GetAnnotatedVariables(value.Elem().Interface())...)
}
case reflect.Struct:
fields = append(fields, GetAnnotatedVariables(value.Interface())...)
}
}
return fields
}
1 change: 1 addition & 0 deletions docs/helpers/configenvextractor.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
)

var targets = map[string]string{
"adoc-generator.go.tmpl": "output/adoc/adoc-generator.go",
"example-config-generator.go.tmpl": "output/exampleconfig/example-config-generator.go",
"extractor.go.tmpl": "output/env/runner.go",
}
Expand Down
19 changes: 19 additions & 0 deletions docs/templates/ADOC.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[caption=]
.Environment variables for the frontend extension
[width="100%",cols="~,~,~,~,~",options="header"]
|===
| Name
| Type
| Default Value
| Description

{{- range .}}
| `{{.Name}}`
| {{.Type}}
| {{.DefaultValue}}
| {{.Description}}

{{- end }}
|===

Since Version: `+` added, `-` deprecated

0 comments on commit 78c0a4d

Please sign in to comment.