Skip to content

Commit ebe3572

Browse files
kbukum1Copilot
andcommitted
Add UpdateTypes field to Allowed struct
Add update-types support to the Allowed struct, matching the existing pattern in the Condition (ignore) struct. This enables semver-level filtering (major/minor/patch) in allow blocks of dependabot.yml. Changes: - Add UpdateTypes []string field to Allowed struct in model/job.go - Add update-types entry to exampleJob YAML fixture - Add TestAllowedUpdateTypes: verifies YAML unmarshal of update-types - Add TestAllowedUpdateTypesJSON: verifies JSON round-trip serialization Relates to dependabot/dependabot-core#12668. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 9ba9bc1 commit ebe3572

File tree

2 files changed

+74
-3
lines changed

2 files changed

+74
-3
lines changed

internal/model/job.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,10 @@ type ExistingGroupPR struct {
203203
}
204204

205205
type Allowed struct {
206-
DependencyType string `json:"dependency-type,omitempty" yaml:"dependency-type,omitempty"`
207-
DependencyName string `json:"dependency-name,omitempty" yaml:"dependency-name,omitempty"`
208-
UpdateType string `json:"update-type,omitempty" yaml:"update-type,omitempty"`
206+
DependencyType string `json:"dependency-type,omitempty" yaml:"dependency-type,omitempty"`
207+
DependencyName string `json:"dependency-name,omitempty" yaml:"dependency-name,omitempty"`
208+
UpdateType string `json:"update-type,omitempty" yaml:"update-type,omitempty"`
209+
UpdateTypes []string `json:"update-types,omitempty" yaml:"update-types,omitempty"`
209210
}
210211

211212
type Group struct {

internal/model/job_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,72 @@ func TestInput(t *testing.T) {
2121
compareMap(t, "job", input2["job"], input.Job)
2222
}
2323

24+
func TestAllowedUpdateTypes(t *testing.T) {
25+
var input Input
26+
if err := yaml.Unmarshal([]byte(exampleJob), &input); err != nil {
27+
t.Fatal(err)
28+
}
29+
30+
allowed := input.Job.AllowedUpdates
31+
if len(allowed) != 2 {
32+
t.Fatalf("expected 2 allowed updates, got %d", len(allowed))
33+
}
34+
35+
// First entry: dependency-type + update-type (existing pattern)
36+
if allowed[0].DependencyType != "direct" {
37+
t.Errorf("expected dependency-type 'direct', got %q", allowed[0].DependencyType)
38+
}
39+
if allowed[0].UpdateType != "all" {
40+
t.Errorf("expected update-type 'all', got %q", allowed[0].UpdateType)
41+
}
42+
if len(allowed[0].UpdateTypes) != 0 {
43+
t.Errorf("expected no update-types on first entry, got %v", allowed[0].UpdateTypes)
44+
}
45+
46+
// Second entry: dependency-name + update-types (new feature)
47+
if allowed[1].DependencyName != "rails" {
48+
t.Errorf("expected dependency-name 'rails', got %q", allowed[1].DependencyName)
49+
}
50+
expectedTypes := []string{"version-update:semver-minor", "version-update:semver-patch"}
51+
if len(allowed[1].UpdateTypes) != len(expectedTypes) {
52+
t.Fatalf("expected %d update-types, got %d", len(expectedTypes), len(allowed[1].UpdateTypes))
53+
}
54+
for i, et := range expectedTypes {
55+
if allowed[1].UpdateTypes[i] != et {
56+
t.Errorf("update-types[%d]: expected %q, got %q", i, et, allowed[1].UpdateTypes[i])
57+
}
58+
}
59+
}
60+
61+
func TestAllowedUpdateTypesJSON(t *testing.T) {
62+
original := Allowed{
63+
DependencyName: "rails",
64+
UpdateTypes: []string{"version-update:semver-minor", "version-update:semver-patch"},
65+
}
66+
67+
data, err := json.Marshal(original)
68+
if err != nil {
69+
t.Fatal(err)
70+
}
71+
72+
var decoded Allowed
73+
if err := json.Unmarshal(data, &decoded); err != nil {
74+
t.Fatal(err)
75+
}
76+
77+
if decoded.DependencyName != original.DependencyName {
78+
t.Errorf("dependency-name: expected %q, got %q", original.DependencyName, decoded.DependencyName)
79+
}
80+
if len(decoded.UpdateTypes) != len(original.UpdateTypes) {
81+
t.Fatalf("update-types length: expected %d, got %d", len(original.UpdateTypes), len(decoded.UpdateTypes))
82+
}
83+
for i, et := range original.UpdateTypes {
84+
if decoded.UpdateTypes[i] != et {
85+
t.Errorf("update-types[%d]: expected %q, got %q", i, et, decoded.UpdateTypes[i])
86+
}
87+
}
88+
}
89+
2490
func TestExistingPullRequestsNewFormat(t *testing.T) {
2591
testYAML := `---
2692
job:
@@ -663,6 +729,10 @@ job:
663729
allowed-updates:
664730
- dependency-type: direct
665731
update-type: all
732+
- dependency-name: "rails"
733+
update-types:
734+
- "version-update:semver-minor"
735+
- "version-update:semver-patch"
666736
dependency-groups:
667737
- name: npm
668738
rules:

0 commit comments

Comments
 (0)