Skip to content

Commit d41d287

Browse files
Fix lua preprocessing for pr automations
This still wasn't fully working, added a mirror type so that it looks a lot closer to what users expect
1 parent 6441ac1 commit d41d287

File tree

2 files changed

+80
-4
lines changed

2 files changed

+80
-4
lines changed

pkg/pr/lua.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package pr
22

33
import (
4+
"encoding/json"
45
"fmt"
56
iofs "io/fs"
67
"os"
@@ -11,7 +12,6 @@ import (
1112
"dario.cat/mergo"
1213
"github.com/pluralsh/polly/luautils"
1314
lua "github.com/yuin/gopher-lua"
14-
"k8s.io/apimachinery/pkg/util/json"
1515
)
1616

1717
func executeLua(spec *PrTemplateSpec, ctx map[string]interface{}) error {
@@ -83,12 +83,12 @@ func merge(spec *PrTemplateSpec, new map[string]interface{}) error {
8383
return err
8484
}
8585

86-
newSpec := PrTemplateSpec{}
87-
if err := json.Unmarshal(jsonStr, &newSpec); err != nil {
86+
newSpec := &PrTemplateSpecMirror{}
87+
if err := json.Unmarshal(jsonStr, newSpec); err != nil {
8888
return err
8989
}
9090

91-
return mergo.Merge(spec, newSpec, mergo.WithAppendSlice, mergo.WithOverride)
91+
return mergo.Merge(spec, newSpec.Convert(), mergo.WithAppendSlice, mergo.WithOverride)
9292
}
9393

9494
func luaFolder(parent, folder string) (string, error) {

pkg/pr/types.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"strings"
66

77
console "github.com/pluralsh/console/go/client"
8+
"github.com/pluralsh/polly/algorithms"
89
"sigs.k8s.io/yaml"
910
)
1011

@@ -147,3 +148,78 @@ func BuildContracts(path string) (*PrContracts, error) {
147148

148149
return pr, err
149150
}
151+
152+
type PrTemplateSpecMirror struct {
153+
Updates *UpdateSpecMirror `json:"updates"`
154+
Creates *CreateSpec `json:"creates"`
155+
Deletes *DeleteSpec `json:"deletes"`
156+
Lua *LuaSpecMirror `json:"lua"`
157+
}
158+
159+
func (p *PrTemplateSpecMirror) Convert() *PrTemplateSpec {
160+
return &PrTemplateSpec{
161+
Updates: p.Updates.Convert(),
162+
Creates: p.Creates,
163+
Deletes: p.Deletes,
164+
Lua: p.Lua.Convert(),
165+
}
166+
}
167+
168+
type LuaSpecMirror struct {
169+
ExternalDir string `json:"externalDir"`
170+
External bool `json:"external"`
171+
Script string `json:"script"`
172+
Folder string `json:"folder"`
173+
}
174+
175+
func (p *LuaSpecMirror) Convert() *LuaSpec {
176+
if p == nil {
177+
return nil
178+
}
179+
return &LuaSpec{
180+
ExternalDir: p.ExternalDir,
181+
External: p.External,
182+
Script: p.Script,
183+
Folder: p.Folder,
184+
}
185+
}
186+
187+
func (p *UpdateSpecMirror) Convert() *UpdateSpec {
188+
if p == nil {
189+
return nil
190+
}
191+
192+
return &UpdateSpec{
193+
Regexes: p.Regexes,
194+
Files: p.Files,
195+
ReplaceTemplate: p.ReplaceTemplate,
196+
Yq: p.Yq,
197+
MatchStrategy: p.MatchStrategy,
198+
RegexReplacements: p.RegexReplacements,
199+
YamlOverlays: algorithms.Map(p.YamlOverlays, func(y YamlOverlayMirror) YamlOverlay {
200+
return YamlOverlay{
201+
File: y.File,
202+
Yaml: y.Yaml,
203+
ListMerge: y.ListMerge,
204+
Templated: y.Templated,
205+
}
206+
}),
207+
}
208+
}
209+
210+
type UpdateSpecMirror struct {
211+
Regexes []string `json:"regexes"`
212+
Files []string `json:"files"`
213+
ReplaceTemplate string `json:"replaceTemplate"`
214+
Yq string `json:"yq"`
215+
MatchStrategy string `json:"matchStrategy"`
216+
RegexReplacements []RegexReplacement `json:"regexReplacements"`
217+
YamlOverlays []YamlOverlayMirror `json:"yamlOverlays"`
218+
}
219+
220+
type YamlOverlayMirror struct {
221+
File string `json:"file"`
222+
Yaml string `json:"yaml"`
223+
ListMerge ListMerge `json:"listMerge"`
224+
Templated bool `json:"templated"`
225+
}

0 commit comments

Comments
 (0)