From fab1ba384ea71f962556ebda119146d55605ee88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Jul 2025 14:41:31 +0000 Subject: [PATCH 01/11] Bump golang.org/x/text from 0.25.0 to 0.26.0 in the all group Bumps the all group with 1 update: [golang.org/x/text](https://github.com/golang/text). Updates `golang.org/x/text` from 0.25.0 to 0.26.0 - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.25.0...v0.26.0) --- updated-dependencies: - dependency-name: golang.org/x/text dependency-version: 0.26.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index caf9679..014efb1 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/gobuffalo/flect v1.0.3 github.com/mattn/go-isatty v0.0.20 github.com/spf13/cobra v1.9.1 - golang.org/x/text v0.25.0 + golang.org/x/text v0.26.0 ) require ( diff --git a/go.sum b/go.sum index fc489c1..2000b32 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,8 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= -golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From 2fe86e231fe3a6bf47d8968117f145f5bea62f58 Mon Sep 17 00:00:00 2001 From: frag223 Date: Mon, 14 Jul 2025 08:08:07 +1000 Subject: [PATCH 02/11] wip upgrades --- .golangci.yaml | 54 ++++++++++++++++-------------------------------- .idea/.gitignore | 8 +++++++ go.mod | 2 +- 3 files changed, 27 insertions(+), 37 deletions(-) create mode 100644 .idea/.gitignore diff --git a/.golangci.yaml b/.golangci.yaml index 40ca9a6..8c3d50f 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -1,37 +1,19 @@ # Options for analysis running. -run: - # The default concurrency value is the number of available CPU. - concurrency: 4 - # Timeout for analysis, e.g. 30s, 5m. - # Default: 1m - timeout: 30s - # Exit code when at least one issue was found. - # Default: 1 - issues-exit-code: 2 - # Include test files or not. - # Default: true - tests: false - # Which dirs to skip: issues from them won't be reported. - # Can use regexp here: `generated.*`, regexp is applied on full path, - # including the path prefix if one is set. - # Default value is empty list, - # but default dirs are skipped independently of this option's value (see skip-dirs-use-default). - # "/" will be replaced by current OS file path separator to properly work on Windows. - skip-dirs: - - example - # Enables skipping of directories: - # - vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ - # Default: true - skip-dirs-use-default: false - # If set we pass it to "go list -mod={option}". From "go help modules": - # If invoked with -mod=readonly, the go command is disallowed from the implicit - # automatic updating of go.mod described above. Instead, it fails when any changes - # to go.mod are needed. This setting is most useful to check that go.mod does - # not need updates, such as in a continuous integration and testing system. - # If invoked with -mod=vendor, the go command assumes that the vendor - # directory holds the correct copies of dependencies and ignores - # the dependency descriptions in go.mod. - # - # Allowed values: readonly|vendor|mod - # By default, it isn't set. - modules-download-mode: readonly \ No newline at end of file +version: "2" +linters: + enable: + - cyclop + - nestif + - bodyclose + - iface + - gosec + + exclusions: + paths: "example/*" + rules: + - path: '(.+)_test\.go' + linters: + - gosec + + + diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/go.mod b/go.mod index 014efb1..1933540 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/code-gorilla-au/pyrotic -go 1.24.1 +go 1.24.4 require ( github.com/code-gorilla-au/odize v1.3.4 From a74cfc3f7158b4e71d716f492198970124601b8c Mon Sep 17 00:00:00 2001 From: frag223 Date: Thu, 7 Aug 2025 21:11:12 +1000 Subject: [PATCH 03/11] wip fixing --- internal/engine/engine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/engine/engine.go b/internal/engine/engine.go index 693c3ea..4cb2aa4 100644 --- a/internal/engine/engine.go +++ b/internal/engine/engine.go @@ -45,7 +45,7 @@ func (c *Core) Generate(data Data) error { } for _, item := range parsedOutput { - switch item.ParseData.Action { + switch item.Action { case parser.ActionAppend: if err := c.fwr.AppendFile(item.To, item.Output); err != nil { log.Println("error appending file ", err) From e79944e0563b8962a1d70794694ce3d2d7f8a380 Mon Sep 17 00:00:00 2001 From: frag223 Date: Thu, 7 Aug 2025 21:12:40 +1000 Subject: [PATCH 04/11] wip lints --- internal/parser/lexer.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/parser/lexer.go b/internal/parser/lexer.go index 86820b2..b87a61c 100644 --- a/internal/parser/lexer.go +++ b/internal/parser/lexer.go @@ -103,7 +103,7 @@ func hydrateData(meta []string, data TemplateData) (TemplateData, error) { Name: data.Name, ParseData: data.ParseData, } - result.ParseData.Action = ActionCreate + result.Action = ActionCreate tmp := map[string]string{} for _, item := range meta { @@ -116,19 +116,19 @@ func hydrateData(meta []string, data TemplateData) (TemplateData, error) { case fieldTo: result.To = strings.TrimSpace(tokens[1]) case fieldAfter: - result.ParseData.InjectClause = InjectAfter - result.ParseData.InjectMatcher = strings.TrimSpace(tokens[1]) + result.InjectClause = InjectAfter + result.InjectMatcher = strings.TrimSpace(tokens[1]) case fieldBefore: - result.ParseData.InjectClause = InjectBefore - result.ParseData.InjectMatcher = strings.TrimSpace(tokens[1]) + result.InjectClause = InjectBefore + result.InjectMatcher = strings.TrimSpace(tokens[1]) case fieldAppend: - result.ParseData.Action = ActionAppend + result.Action = ActionAppend stringAppend := strings.TrimSpace(tokens[1]) if _, err := strconv.ParseBool(stringAppend); err != nil { return result, ErrParsingBool } case fieldInject: - result.ParseData.Action = ActionInject + result.Action = ActionInject stringAppend := strings.TrimSpace(tokens[1]) if _, err := strconv.ParseBool(stringAppend); err != nil { return result, ErrParsingBool From b24e205a1fd8834b7cffef69cf2d9d15d3e2f59f Mon Sep 17 00:00:00 2001 From: frag223 Date: Thu, 7 Aug 2025 21:25:08 +1000 Subject: [PATCH 05/11] refactoring --- .idea/golinter.xml | 7 ++++++ .idea/modules.xml | 8 +++++++ .idea/pyrotic.iml | 9 ++++++++ .idea/vcs.xml | 6 +++++ internal/parser/lexer.go | 41 +++++++++++++++++++++++++---------- internal/parser/lexer_test.go | 2 +- 6 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 .idea/golinter.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/pyrotic.iml create mode 100644 .idea/vcs.xml diff --git a/.idea/golinter.xml b/.idea/golinter.xml new file mode 100644 index 0000000..00b449d --- /dev/null +++ b/.idea/golinter.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..8f6abd5 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/pyrotic.iml b/.idea/pyrotic.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/.idea/pyrotic.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/internal/parser/lexer.go b/internal/parser/lexer.go index b87a61c..fc8ed4d 100644 --- a/internal/parser/lexer.go +++ b/internal/parser/lexer.go @@ -70,7 +70,7 @@ func generateParseData(tmplName string, meta []string, data TemplateData, funcs parsedMeta = append(parsedMeta, buf.String()) } - return hydrateData(parsedMeta, data) + return hydrateTemplateData(parsedMeta, data) } @@ -98,7 +98,7 @@ func generateTemplate(tmplName, tmplOutput string, data TemplateData, funcs temp return buf.Bytes(), nil } -func hydrateData(meta []string, data TemplateData) (TemplateData, error) { +func hydrateTemplateData(meta []string, data TemplateData) (TemplateData, error) { result := TemplateData{ Name: data.Name, ParseData: data.ParseData, @@ -112,30 +112,36 @@ func hydrateData(meta []string, data TemplateData) (TemplateData, error) { return result, fmt.Errorf("%w : %s", ErrMalformedTemplate, item) } - switch strings.TrimSpace(tokens[0]) { + field := strings.TrimSpace(tokens[0]) + value := strings.TrimSpace(tokens[1]) + + if !hasMatchingField(field) { + key := field + tmp[key] = value + continue + } + + switch field { case fieldTo: - result.To = strings.TrimSpace(tokens[1]) + result.To = value case fieldAfter: result.InjectClause = InjectAfter - result.InjectMatcher = strings.TrimSpace(tokens[1]) + result.InjectMatcher = value case fieldBefore: result.InjectClause = InjectBefore - result.InjectMatcher = strings.TrimSpace(tokens[1]) + result.InjectMatcher = value case fieldAppend: result.Action = ActionAppend - stringAppend := strings.TrimSpace(tokens[1]) + stringAppend := value if _, err := strconv.ParseBool(stringAppend); err != nil { return result, ErrParsingBool } case fieldInject: result.Action = ActionInject - stringAppend := strings.TrimSpace(tokens[1]) + stringAppend := value if _, err := strconv.ParseBool(stringAppend); err != nil { return result, ErrParsingBool } - default: - key := strings.TrimSpace(tokens[0]) - tmp[key] = strings.TrimSpace(tokens[1]) } } @@ -171,3 +177,16 @@ func extractMetaDataFromTemplate(template string) ([]string, string) { } return meta, strings.Join(output, tokenNewLine) } + +func hasMatchingField(maybeField string) bool { + repo := map[string]struct{}{ + fieldTo: {}, + fieldAppend: {}, + fieldInject: {}, + fieldAfter: {}, + fieldBefore: {}, + } + + _, ok := repo[maybeField] + return ok +} diff --git a/internal/parser/lexer_test.go b/internal/parser/lexer_test.go index b62658b..1a02ae2 100644 --- a/internal/parser/lexer_test.go +++ b/internal/parser/lexer_test.go @@ -224,7 +224,7 @@ func Test_hydrateData(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := hydrateData(tt.args.meta, tt.args.data) + got, err := hydrateTemplateData(tt.args.meta, tt.args.data) if tt.wantErr { odize.AssertTrue(t, errors.Is(err, tt.err)) } From 71293bb4854f8205af07633ecbd77a1bcaccc8ee Mon Sep 17 00:00:00 2001 From: frag223 Date: Thu, 7 Aug 2025 22:00:44 +1000 Subject: [PATCH 06/11] refactoring --- internal/parser/errors.go | 1 + internal/parser/lexer.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/internal/parser/errors.go b/internal/parser/errors.go index 679ebbd..e78709f 100644 --- a/internal/parser/errors.go +++ b/internal/parser/errors.go @@ -5,4 +5,5 @@ import "errors" var ( ErrParsingBool = errors.New("unable to parse bool") ErrMalformedTemplate = errors.New("malformed template data") + ErrNoMatchingField = errors.New("no matching field") ) diff --git a/internal/parser/lexer.go b/internal/parser/lexer.go index fc8ed4d..965af55 100644 --- a/internal/parser/lexer.go +++ b/internal/parser/lexer.go @@ -155,6 +155,35 @@ func hydrateTemplateData(meta []string, data TemplateData) (TemplateData, error) return result, nil } +func extractParsedData(field, value string) (ParseData, error) { + result := ParseData{} + + switch field { + case fieldAfter: + result.InjectClause = InjectAfter + result.InjectMatcher = value + case fieldBefore: + result.InjectClause = InjectBefore + result.InjectMatcher = value + case fieldAppend: + result.Action = ActionAppend + stringAppend := value + if _, err := strconv.ParseBool(stringAppend); err != nil { + return result, ErrParsingBool + } + case fieldInject: + result.Action = ActionInject + stringAppend := value + if _, err := strconv.ParseBool(stringAppend); err != nil { + return result, ErrParsingBool + } + default: + return result, ErrNoMatchingField + } + + return result, nil +} + func extractMetaDataFromTemplate(template string) ([]string, string) { rawOut := strings.Split(template, tokenNewLine) meta := []string{} From ffa9568c0f927b9c377d61e9c76ee060b6e8a2c0 Mon Sep 17 00:00:00 2001 From: frag223 Date: Thu, 7 Aug 2025 22:21:19 +1000 Subject: [PATCH 07/11] wip --- internal/parser/lexer.go | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/internal/parser/lexer.go b/internal/parser/lexer.go index 965af55..72f60cb 100644 --- a/internal/parser/lexer.go +++ b/internal/parser/lexer.go @@ -112,7 +112,7 @@ func hydrateTemplateData(meta []string, data TemplateData) (TemplateData, error) return result, fmt.Errorf("%w : %s", ErrMalformedTemplate, item) } - field := strings.TrimSpace(tokens[0]) + field := strings.ToLower(strings.TrimSpace(tokens[0])) value := strings.TrimSpace(tokens[1]) if !hasMatchingField(field) { @@ -155,8 +155,7 @@ func hydrateTemplateData(meta []string, data TemplateData) (TemplateData, error) return result, nil } -func extractParsedData(field, value string) (ParseData, error) { - result := ParseData{} +func extractParsedData(field, value string, result ParseData) (ParseData, error) { switch field { case fieldAfter: @@ -177,8 +176,6 @@ func extractParsedData(field, value string) (ParseData, error) { if _, err := strconv.ParseBool(stringAppend); err != nil { return result, ErrParsingBool } - default: - return result, ErrNoMatchingField } return result, nil @@ -186,8 +183,8 @@ func extractParsedData(field, value string) (ParseData, error) { func extractMetaDataFromTemplate(template string) ([]string, string) { rawOut := strings.Split(template, tokenNewLine) - meta := []string{} - output := []string{} + var meta []string + var output []string count := 0 for index, s := range rawOut { trimmed := strings.TrimSpace(s) From d44b9c615f4c4fcdfbad3b8b4d6ede3a79140698 Mon Sep 17 00:00:00 2001 From: frag223 Date: Fri, 8 Aug 2025 06:53:24 +1000 Subject: [PATCH 08/11] wip --- internal/parser/lexer_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/parser/lexer_test.go b/internal/parser/lexer_test.go index 1a02ae2..5cfc285 100644 --- a/internal/parser/lexer_test.go +++ b/internal/parser/lexer_test.go @@ -265,7 +265,7 @@ func Test_extractMeta(t *testing.T) { to: foo `, }, - meta: []string{}, + meta: nil, output: "", }, { @@ -285,10 +285,10 @@ func Test_extractMeta(t *testing.T) { t.Run(tt.name, func(t *testing.T) { got, got1 := extractMetaDataFromTemplate(tt.args.output) if !reflect.DeepEqual(got, tt.meta) { - t.Errorf("extractMeta() got = %v, want %v", got, tt.meta) + t.Errorf("extractMetaDataFromTemplate() got = %v, want %v", got, tt.meta) } if strings.TrimSpace(got1) != tt.output { - t.Errorf("extractMeta() got1 = %v, want %v", got1, tt.output) + t.Errorf("extractMetaDataFromTemplate() got1 = %v, want %v", got1, tt.output) } }) } From f7194d1dc393bfdfe27343ebd40344f3019c6a2a Mon Sep 17 00:00:00 2001 From: frag223 Date: Fri, 8 Aug 2025 07:11:59 +1000 Subject: [PATCH 09/11] refactor parser --- internal/parser/lexer.go | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/internal/parser/lexer.go b/internal/parser/lexer.go index 72f60cb..0c3109c 100644 --- a/internal/parser/lexer.go +++ b/internal/parser/lexer.go @@ -107,6 +107,7 @@ func hydrateTemplateData(meta []string, data TemplateData) (TemplateData, error) tmp := map[string]string{} for _, item := range meta { + tokens := strings.Split(strings.TrimSpace(item), tokenColon) if len(tokens) != 2 { return result, fmt.Errorf("%w : %s", ErrMalformedTemplate, item) @@ -121,32 +122,21 @@ func hydrateTemplateData(meta []string, data TemplateData) (TemplateData, error) continue } - switch field { - case fieldTo: + if field == fieldTo { result.To = value - case fieldAfter: - result.InjectClause = InjectAfter - result.InjectMatcher = value - case fieldBefore: - result.InjectClause = InjectBefore - result.InjectMatcher = value - case fieldAppend: - result.Action = ActionAppend - stringAppend := value - if _, err := strconv.ParseBool(stringAppend); err != nil { - return result, ErrParsingBool - } - case fieldInject: - result.Action = ActionInject - stringAppend := value - if _, err := strconv.ParseBool(stringAppend); err != nil { - return result, ErrParsingBool - } + continue + } + + var err error + result.ParseData, err = extractParsedData(field, value, result.ParseData) + if err != nil { + return result, err } + } // this will override any values pre-defined in the template, - // this is intended so you are able to have "sane defaults" as well as override via cmd + // this is intended, so you are able to have "sane defaults" as well as override via cmd for key, value := range data.Meta { tmp[key] = value } From daaa7d35b61265be5abca96247ac509249dc61b6 Mon Sep 17 00:00:00 2001 From: frag223 Date: Fri, 8 Aug 2025 07:16:44 +1000 Subject: [PATCH 10/11] fixing tool --- scripts/tools.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/tools.mk b/scripts/tools.mk index f780fb9..77eb5df 100644 --- a/scripts/tools.mk +++ b/scripts/tools.mk @@ -1,5 +1,4 @@ get-tools: ## Get tools used go install golang.org/x/vuln/cmd/govulncheck@latest - go install github.com/securego/gosec/v2/cmd/gosec@latest - go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest \ No newline at end of file + go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.2.2 \ No newline at end of file From 3c2173218bdad0ddac6b07d344e1d49bee9c2ddd Mon Sep 17 00:00:00 2001 From: frag223 Date: Fri, 8 Aug 2025 07:18:42 +1000 Subject: [PATCH 11/11] fixing tool --- scripts/lints.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/lints.mk b/scripts/lints.mk index 9ac9539..b87e11d 100644 --- a/scripts/lints.mk +++ b/scripts/lints.mk @@ -7,7 +7,6 @@ lint: ## Lint tools golangci-lint run ./... scan: ## Security scanning - gosec ./... govulncheck ./... trivy: ## Trivy secrets scanning