From ef47a0d612cbaa4b42e99bf680e9458030564b79 Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Wed, 27 May 2020 11:06:10 +0200 Subject: [PATCH] Small codegen bits changes, add adoc template for events --- codegen/v2/actionlog/main.go | 2 +- codegen/v2/events/events.gen.adoc.tpl | 31 +++++++++++++++++ codegen/v2/events/events.gen.go.tpl | 2 ++ codegen/v2/events/main.go | 45 ++++++++++++++++++------- codegen/v2/internal/templating.go | 28 +++++++++++++-- system/service/event/application.gen.go | 4 ++- system/service/event/auth.gen.go | 2 +- system/service/event/mail.gen.go | 2 +- system/service/event/role.gen.go | 4 ++- system/service/event/role_member.gen.go | 2 +- system/service/event/sink.gen.go | 4 ++- system/service/event/system.gen.go | 2 +- system/service/event/user.gen.go | 4 ++- 13 files changed, 108 insertions(+), 24 deletions(-) create mode 100644 codegen/v2/events/events.gen.adoc.tpl diff --git a/codegen/v2/actionlog/main.go b/codegen/v2/actionlog/main.go index 159b03812..cd261e91f 100644 --- a/codegen/v2/actionlog/main.go +++ b/codegen/v2/actionlog/main.go @@ -267,7 +267,7 @@ func procDef(path, output string) { checkPlaceholders(e.Error, "log", e.Log) } - internal.WriteTo(tpl, tplData, "actions.gen.go.tpl", output) + internal.WriteFormattedTo(tpl, tplData, "actions.gen.go.tpl", output) } func (a actionDef) SeverityConstName() string { diff --git a/codegen/v2/events/events.gen.adoc.tpl b/codegen/v2/events/events.gen.adoc.tpl new file mode 100644 index 000000000..3d97dc634 --- /dev/null +++ b/codegen/v2/events/events.gen.adoc.tpl @@ -0,0 +1,31 @@ +// This is a autogenerated file +// +// Generated from: +// - corteza-server/src/{{$.Service}}/service/events.yaml +// - corteza-server/codegen/v2/events/events.gen.adoc.tpl +// +// To regenerate: +// ./event-gen --service {{$.Service}} --docs ../corteza-docs/src/extdev/development/events/ +// + += {{ $.ResourceString }} + + +.List of events on `{{ $.ResourceString }}` +{{- range $event := makeEvents $.Events }} +- `{{ $event }}` +{{- end }} + +.Event arguments for `{{ $.ResourceString }}` +[%header,cols=3*] +|=== +|Name +|Type +|Immutable + +{{- range $p := $.Events.Properties }} +|`{{ camelCase $p.Name }}` +|`{{ $p.Type }}` +|{{ $p.Immutable }} +{{- end }} +|=== diff --git a/codegen/v2/events/events.gen.go.tpl b/codegen/v2/events/events.gen.go.tpl index 2b94a9fa1..832a56d15 100644 --- a/codegen/v2/events/events.gen.go.tpl +++ b/codegen/v2/events/events.gen.go.tpl @@ -169,6 +169,8 @@ func (res *{{ camelCase .ResourceIdent "base" }}) Decode(results map[string][]by } } } + {{ else }} + // Do not decode {{ $prop.Name }}; marked as immutable {{ end -}} {{ end -}} diff --git a/codegen/v2/events/main.go b/codegen/v2/events/main.go index e18fdb9e1..5e439b95b 100644 --- a/codegen/v2/events/main.go +++ b/codegen/v2/events/main.go @@ -12,7 +12,7 @@ import ( ) const ( - templateFile = "codegen/v2/events/*.go.tpl" + templateFiles = "codegen/v2/events/*.tpl" ) type ( @@ -43,6 +43,7 @@ type ( Command string YAML string + Service string Package string // List of imports @@ -58,20 +59,26 @@ type ( } ) +// Use for generating .go and .adoc files from yaml +// +// To generate .go files, run for each service: +// ./event-gen --service messaging +// +// To generate .adoc files, run for each service + add path to docs +//// ./event-gen --service system --docs ../corteza-docs/src/extdev/development/events/ func main() { - tpl := template.New("").Funcs(map[string]interface{}{ "camelCase": internal.CamelCase, "makeEvents": makeEvents, }) - tpl = template.Must(tpl.ParseGlob(templateFile)) + tpl = template.Must(tpl.ParseGlob(templateFiles)) var ( definitionsPathStr string serviceStr string + docsPathStr string overwrite bool - // outputFile string decoder *yaml.Decoder @@ -88,8 +95,9 @@ func main() { ) flag.StringVar(&definitionsPathStr, "definitions", "", "Location of event definitions file (generated from service if omitted) and output dir") - flag.StringVar(&serviceStr, "service", "", "Comma separated list of imports") + flag.StringVar(&serviceStr, "service", "", "Service name (system, compose, messaging)") flag.BoolVar(&overwrite, "overwrite", false, "Overwrite all files") + flag.StringVar(&docsPathStr, "docs", "", "Path to docs (generates .adoc files with documentation)") flag.Parse() @@ -110,6 +118,7 @@ func main() { tplData.Command = "go run ./codegen/v2/events --service " + serviceStr tplData.YAML = definitionsPathStr + yamlDefFileName tplData.Package = "event" + tplData.Service = serviceStr defs := eventDefMap{} cli.HandleError(decoder.Decode(&defs)) @@ -174,17 +183,27 @@ func main() { tplData.Events = evDef - var ( - usrOutput = fmt.Sprintf("%s%s.go", definitionsPathStr, fname) - genOutput = fmt.Sprintf("%s/%s.gen.go", definitionsPathStr, fname) - ) + switch true { + case len(docsPathStr) > 0: + var ( + docOutput = fmt.Sprintf("%s/%s/%s.gen.adoc", docsPathStr, serviceStr, fname) + ) - _, err := os.Stat(usrOutput) - if overwrite || os.IsNotExist(err) { - internal.WriteTo(tpl, tplData, "events.go.tpl", usrOutput) + internal.WritePlainTo(tpl, tplData, "events.gen.adoc.tpl", docOutput) + default: + var ( + usrOutput = fmt.Sprintf("%s%s.go", definitionsPathStr, fname) + genOutput = fmt.Sprintf("%s/%s.gen.go", definitionsPathStr, fname) + ) + + _, err := os.Stat(usrOutput) + if overwrite || os.IsNotExist(err) { + internal.WriteFormattedTo(tpl, tplData, "events.go.tpl", usrOutput) + } + + internal.WriteFormattedTo(tpl, tplData, "events.gen.go.tpl", genOutput) } - internal.WriteTo(tpl, tplData, "events.gen.go.tpl", genOutput) } } diff --git a/codegen/v2/internal/templating.go b/codegen/v2/internal/templating.go index a0f1abca4..2ffd2b48b 100644 --- a/codegen/v2/internal/templating.go +++ b/codegen/v2/internal/templating.go @@ -10,11 +10,11 @@ import ( "text/template" ) -func WriteTo(tpl *template.Template, payload interface{}, name, dst string) { +func WriteFormattedTo(tpl *template.Template, payload interface{}, tplName, dst string) { var output io.WriteCloser buf := bytes.Buffer{} - if err := tpl.ExecuteTemplate(&buf, name, payload); err != nil { + if err := tpl.ExecuteTemplate(&buf, tplName, payload); err != nil { cli.HandleError(err) } else { fmtsrc, err := format.Source(buf.Bytes()) @@ -39,3 +39,27 @@ func WriteTo(tpl *template.Template, payload interface{}, name, dst string) { } } } + +func WritePlainTo(tpl *template.Template, payload interface{}, tplName, dst string) { + var output io.WriteCloser + buf := bytes.Buffer{} + + if err := tpl.ExecuteTemplate(&buf, tplName, payload); err != nil { + cli.HandleError(err) + } else { + if dst == "" || dst == "-" { + output = os.Stdout + } else { + // cli.HandleError(os.Remove(dst)) + if output, err = os.Create(dst); err != nil { + cli.HandleError(err) + } + + defer output.Close() + } + + if _, err := output.Write(buf.Bytes()); err != nil { + cli.HandleError(err) + } + } +} diff --git a/system/service/event/application.gen.go b/system/service/event/application.gen.go index e60afe475..9e1ffd33e 100644 --- a/system/service/event/application.gen.go +++ b/system/service/event/application.gen.go @@ -6,7 +6,7 @@ package event // system/service/event/events.yaml // // Regenerate with: -// go run codegen/v2/events.go --service system +// go run ./codegen/v2/events --service system // import ( @@ -448,6 +448,8 @@ func (res *applicationBase) Decode(results map[string][]byte) (err error) { } } + // Do not decode oldApplication; marked as immutable + if res.invoker != nil { if r, ok := results["invoker"]; ok { if err = json.Unmarshal(r, res.invoker); err != nil { diff --git a/system/service/event/auth.gen.go b/system/service/event/auth.gen.go index 46c016e6e..4729bcfec 100644 --- a/system/service/event/auth.gen.go +++ b/system/service/event/auth.gen.go @@ -6,7 +6,7 @@ package event // system/service/event/events.yaml // // Regenerate with: -// go run codegen/v2/events.go --service system +// go run ./codegen/v2/events --service system // import ( diff --git a/system/service/event/mail.gen.go b/system/service/event/mail.gen.go index 7ec0cbd24..561064bd2 100644 --- a/system/service/event/mail.gen.go +++ b/system/service/event/mail.gen.go @@ -6,7 +6,7 @@ package event // system/service/event/events.yaml // // Regenerate with: -// go run codegen/v2/events.go --service system +// go run ./codegen/v2/events --service system // import ( diff --git a/system/service/event/role.gen.go b/system/service/event/role.gen.go index 502eb63ef..30c4a1fe2 100644 --- a/system/service/event/role.gen.go +++ b/system/service/event/role.gen.go @@ -6,7 +6,7 @@ package event // system/service/event/events.yaml // // Regenerate with: -// go run codegen/v2/events.go --service system +// go run ./codegen/v2/events --service system // import ( @@ -448,6 +448,8 @@ func (res *roleBase) Decode(results map[string][]byte) (err error) { } } + // Do not decode oldRole; marked as immutable + if res.invoker != nil { if r, ok := results["invoker"]; ok { if err = json.Unmarshal(r, res.invoker); err != nil { diff --git a/system/service/event/role_member.gen.go b/system/service/event/role_member.gen.go index 94b8f4d68..23770aab4 100644 --- a/system/service/event/role_member.gen.go +++ b/system/service/event/role_member.gen.go @@ -6,7 +6,7 @@ package event // system/service/event/events.yaml // // Regenerate with: -// go run codegen/v2/events.go --service system +// go run ./codegen/v2/events --service system // import ( diff --git a/system/service/event/sink.gen.go b/system/service/event/sink.gen.go index b49345fd2..d6bc211c3 100644 --- a/system/service/event/sink.gen.go +++ b/system/service/event/sink.gen.go @@ -6,7 +6,7 @@ package event // system/service/event/events.yaml // // Regenerate with: -// go run codegen/v2/events.go --service system +// go run ./codegen/v2/events --service system // import ( @@ -160,6 +160,8 @@ func (res *sinkBase) Decode(results map[string][]byte) (err error) { } } + // Do not decode request; marked as immutable + if res.invoker != nil { if r, ok := results["invoker"]; ok { if err = json.Unmarshal(r, res.invoker); err != nil { diff --git a/system/service/event/system.gen.go b/system/service/event/system.gen.go index 3c8c50a99..78b500be3 100644 --- a/system/service/event/system.gen.go +++ b/system/service/event/system.gen.go @@ -6,7 +6,7 @@ package event // system/service/event/events.yaml // // Regenerate with: -// go run codegen/v2/events.go --service system +// go run ./codegen/v2/events --service system // import ( diff --git a/system/service/event/user.gen.go b/system/service/event/user.gen.go index db9e437f3..f423f5027 100644 --- a/system/service/event/user.gen.go +++ b/system/service/event/user.gen.go @@ -6,7 +6,7 @@ package event // system/service/event/events.yaml // // Regenerate with: -// go run codegen/v2/events.go --service system +// go run ./codegen/v2/events --service system // import ( @@ -448,6 +448,8 @@ func (res *userBase) Decode(results map[string][]byte) (err error) { } } + // Do not decode oldUser; marked as immutable + if res.invoker != nil { if r, ok := results["invoker"]; ok { if err = json.Unmarshal(r, res.invoker); err != nil {