Skip to content

Commit 591b68e

Browse files
Fix panic when parsing a YAML file with an empty environment override (#7737)
1 parent ca7321c commit 591b68e

File tree

2 files changed

+75
-3
lines changed

2 files changed

+75
-3
lines changed

runtime/parser/parse_node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ func (p *Parser) parseStem(paths []string, ymlPath, yml, sqlPath, sql string) (*
150150
res.YAMLOverride = &envOverride
151151

152152
// Apply the override immediately in case it changes any of the commonYAML fields
153-
err := res.YAMLOverride.Decode(&cfg)
153+
err := res.YAMLOverride.Decode(cfg)
154154
if err != nil {
155155
return nil, pathError{path: ymlPath, err: newYAMLError(err)}
156156
}

runtime/parser/parser_test.go

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,6 +1060,30 @@ dev:
10601060
refresh:
10611061
cron: "0 0 * * *"
10621062
run_in_dev: true
1063+
`,
1064+
// model m1
1065+
`m1.yaml`: `
1066+
type: model
1067+
sql: SELECT 1
1068+
# Test that an empty property doesn't break it
1069+
dev:
1070+
`,
1071+
// model m2
1072+
`m2.yaml`: `
1073+
type: model
1074+
sql: SELECT 1
1075+
# Test empty property in environment_overrides doesn't break it
1076+
environment_overrides:
1077+
dev:
1078+
`,
1079+
// model m3
1080+
`m3.yaml`: `
1081+
type: model
1082+
sql: SELECT 1
1083+
# Test environment_overrides
1084+
environment_overrides:
1085+
dev:
1086+
sql: SELECT 2
10631087
`,
10641088
})
10651089

@@ -1091,15 +1115,63 @@ dev:
10911115
},
10921116
}
10931117

1118+
m1Base := &Resource{
1119+
Name: ResourceName{Kind: ResourceKindModel, Name: "m1"},
1120+
Paths: []string{"/m1.yaml"},
1121+
ModelSpec: &runtimev1.ModelSpec{
1122+
RefreshSchedule: &runtimev1.Schedule{RefUpdate: true},
1123+
InputConnector: "duckdb",
1124+
InputProperties: must(structpb.NewStruct(map[string]any{"sql": "SELECT 1"})),
1125+
OutputConnector: "duckdb",
1126+
ChangeMode: runtimev1.ModelChangeMode_MODEL_CHANGE_MODE_RESET,
1127+
},
1128+
}
1129+
1130+
m2Base := &Resource{
1131+
Name: ResourceName{Kind: ResourceKindModel, Name: "m2"},
1132+
Paths: []string{"/m2.yaml"},
1133+
ModelSpec: &runtimev1.ModelSpec{
1134+
RefreshSchedule: &runtimev1.Schedule{RefUpdate: true},
1135+
InputConnector: "duckdb",
1136+
InputProperties: must(structpb.NewStruct(map[string]any{"sql": "SELECT 1"})),
1137+
OutputConnector: "duckdb",
1138+
ChangeMode: runtimev1.ModelChangeMode_MODEL_CHANGE_MODE_RESET,
1139+
},
1140+
}
1141+
1142+
m3Base := &Resource{
1143+
Name: ResourceName{Kind: ResourceKindModel, Name: "m3"},
1144+
Paths: []string{"/m3.yaml"},
1145+
ModelSpec: &runtimev1.ModelSpec{
1146+
RefreshSchedule: &runtimev1.Schedule{RefUpdate: true},
1147+
InputConnector: "duckdb",
1148+
InputProperties: must(structpb.NewStruct(map[string]any{"sql": "SELECT 1"})),
1149+
OutputConnector: "duckdb",
1150+
ChangeMode: runtimev1.ModelChangeMode_MODEL_CHANGE_MODE_RESET,
1151+
},
1152+
}
1153+
1154+
m3Test := &Resource{
1155+
Name: ResourceName{Kind: ResourceKindModel, Name: "m3"},
1156+
Paths: []string{"/m3.yaml"},
1157+
ModelSpec: &runtimev1.ModelSpec{
1158+
RefreshSchedule: &runtimev1.Schedule{RefUpdate: true},
1159+
InputConnector: "duckdb",
1160+
InputProperties: must(structpb.NewStruct(map[string]any{"sql": "SELECT 2"})),
1161+
OutputConnector: "duckdb",
1162+
ChangeMode: runtimev1.ModelChangeMode_MODEL_CHANGE_MODE_RESET,
1163+
},
1164+
}
1165+
10941166
// Parse without environment
10951167
p, err := Parse(ctx, repo, "", "", "duckdb")
10961168
require.NoError(t, err)
1097-
requireResourcesAndErrors(t, p, []*Resource{s1Base}, nil)
1169+
requireResourcesAndErrors(t, p, []*Resource{s1Base, m1Base, m2Base, m3Base}, nil)
10981170

10991171
// Parse in environment "dev"
11001172
p, err = Parse(ctx, repo, "", "dev", "duckdb")
11011173
require.NoError(t, err)
1102-
requireResourcesAndErrors(t, p, []*Resource{s1Test}, nil)
1174+
requireResourcesAndErrors(t, p, []*Resource{s1Test, m1Base, m2Base, m3Test}, nil)
11031175
}
11041176

11051177
func TestMetricsViewSecurity(t *testing.T) {

0 commit comments

Comments
 (0)