Skip to content

Commit d8fee75

Browse files
feat: fix backward compatibility for ApprovalTasks
- Fix backward compatibility for ApprovalTasks - Handle missing Type field in utils, webhook, CLI, and actions Signed-off-by: PuneetPunamiya <[email protected]>
1 parent c68ce23 commit d8fee75

File tree

6 files changed

+27
-18
lines changed

6 files changed

+27
-18
lines changed

pkg/actions/actions.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func Update(gr schema.GroupVersionResource, c *cli.Clients, opts *cli.Options) e
101101

102102
func update(gvr *schema.GroupVersionResource, dynamic dynamic.Interface, at *v1alpha1.ApprovalTask, opts *cli.Options) error {
103103
for i, approver := range at.Spec.Approvers {
104-
switch approver.Type {
104+
switch v1alpha1.DefaultedApproverType(approver.Type) {
105105
case "User":
106106
if approver.Name == opts.Username {
107107
// return true

pkg/apis/approvaltask/v1alpha1/approvaltask_types.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ type ApproverState struct {
8686
GroupMembers []GroupMemberState `json:"groupMembers,omitempty"`
8787
}
8888

89+
// DefaultedApproverType returns "User" if the type field is empty (for v0.6.0 compatibility),
90+
// otherwise returns the provided type.
91+
func DefaultedApproverType(approverType string) string {
92+
if approverType == "" {
93+
return "User"
94+
}
95+
return approverType
96+
}
97+
8998
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
9099

91100
// ApprovalTaskList contains a list of ApprovalTasks

pkg/cli/cmd/describe/describe.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ func pendingApprovals(at *v1alpha1.ApprovalTask) int {
6060
respondedUsers := make(map[string]bool)
6161

6262
for _, approver := range at.Status.ApproversResponse {
63-
if approver.Type == "User" {
63+
if v1alpha1.DefaultedApproverType(approver.Type) == "User" {
6464
respondedUsers[approver.Name] = true
65-
} else if approver.Type == "Group" {
65+
} else if v1alpha1.DefaultedApproverType(approver.Type) == "Group" {
6666
// Count individual group members who have responded
6767
for _, member := range approver.GroupMembers {
6868
if member.Response == "approved" || member.Response == "rejected" {

pkg/cli/cmd/list/list.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ func pendingApprovals(at *v1alpha1.ApprovalTask) int {
4545
respondedUsers := make(map[string]bool)
4646

4747
for _, approver := range at.Status.ApproversResponse {
48-
if approver.Type == "User" {
48+
if v1alpha1.DefaultedApproverType(approver.Type) == "User" {
4949
respondedUsers[approver.Name] = true
50-
} else if approver.Type == "Group" {
50+
} else if v1alpha1.DefaultedApproverType(approver.Type) == "Group" {
5151
// Count individual group members who have responded
5252
for _, member := range approver.GroupMembers {
5353
if member.Response == "approved" || member.Response == "rejected" {
@@ -65,12 +65,12 @@ func rejected(at *v1alpha1.ApprovalTask) int {
6565
rejectedUsers := make(map[string]bool)
6666

6767
for _, approver := range at.Status.ApproversResponse {
68-
if approver.Type == "User" && approver.Response == "rejected" {
68+
if v1alpha1.DefaultedApproverType(approver.Type) == "User" && approver.Response == "rejected" {
6969
if !rejectedUsers[approver.Name] {
7070
rejectedUsers[approver.Name] = true
7171
count++
7272
}
73-
} else if approver.Type == "Group" {
73+
} else if v1alpha1.DefaultedApproverType(approver.Type) == "Group" {
7474
// Count individual group members who have rejected
7575
for _, member := range approver.GroupMembers {
7676
if member.Response == "rejected" {

pkg/reconciler/approvaltask/utils.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,9 @@ func approvalTaskHasTrueInput(approvalTask v1alpha1.ApprovalTask) bool {
292292
continue
293293
}
294294

295-
if approver.Type == "User" {
295+
if v1alpha1.DefaultedApproverType(approver.Type) == "User" {
296296
approvedUsers[approver.Name] = true
297-
} else if approver.Type == "Group" {
297+
} else if v1alpha1.DefaultedApproverType(approver.Type) == "Group" {
298298
for _, user := range approver.Users {
299299
if user.Input == hasApproved {
300300
approvedUsers[user.Name] = true
@@ -315,9 +315,9 @@ func countApprovalsReceived(approvalTask v1alpha1.ApprovalTask) int {
315315
continue
316316
}
317317

318-
if approver.Type == "User" {
318+
if v1alpha1.DefaultedApproverType(approver.Type) == "User" {
319319
approvedUsers[approver.Name] = true
320-
} else if approver.Type == "Group" {
320+
} else if v1alpha1.DefaultedApproverType(approver.Type) == "Group" {
321321
for _, user := range approver.Users {
322322
if user.Input == hasApproved {
323323
approvedUsers[user.Name] = true
@@ -377,7 +377,7 @@ func updateApprovalState(ctx context.Context, approvaltaskClientSet versioned.In
377377
}
378378

379379
// If it's a group, iterate over the users
380-
if approver.Type == "Group" {
380+
if v1alpha1.DefaultedApproverType(approver.Type) == "Group" {
381381
groupMembers := []v1alpha1.GroupMemberState{}
382382
groupResponse := ""
383383
hasApprovals := false
@@ -418,7 +418,7 @@ func updateApprovalState(ctx context.Context, approvaltaskClientSet versioned.In
418418
GroupMembers: groupMembers,
419419
}
420420
}
421-
} else if approver.Type == "User" {
421+
} else if v1alpha1.DefaultedApproverType(approver.Type) == "User" {
422422
currentApprovers[approver.Name] = v1alpha1.ApproverState{
423423
Name: approver.Name,
424424
Type: "User",

pkg/reconciler/webhook/webhook.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ func ifUserExists(approvals []v1alpha1.ApproverDetails, request *admissionv1.Adm
234234
return true
235235
}
236236
for _, approval := range approvals {
237-
switch approval.Type {
237+
switch v1alpha1.DefaultedApproverType(approval.Type) {
238238
case "User":
239239
if approval.Name == request.UserInfo.Username {
240240
return true
@@ -291,11 +291,11 @@ func hasOnlyInputChanged(oldObjApprover, newObjApprover v1alpha1.ApproverDetails
291291
func IsUserApprovalChanged(oldObjApprovers, newObjApprovers []v1alpha1.ApproverDetails, request *admissionv1.AdmissionRequest) (bool, error) {
292292
currentUser := request.UserInfo.Username
293293
for i, approver := range oldObjApprovers {
294-
if approver.Name == currentUser && approver.Type == "User" {
294+
if approver.Name == currentUser && v1alpha1.DefaultedApproverType(approver.Type) == "User" {
295295
return hasOnlyInputChanged(approver, newObjApprovers[i])
296296
}
297297

298-
if approver.Type == "Group" {
298+
if v1alpha1.DefaultedApproverType(approver.Type) == "Group" {
299299
// Check if current user is a member of this group
300300
isUserInGroup := false
301301

@@ -404,13 +404,13 @@ func IsUserApprovalChanged(oldObjApprovers, newObjApprovers []v1alpha1.ApproverD
404404
func CheckOtherUsersForInvalidChanges(oldObjApprovers, newObjApprover []v1alpha1.ApproverDetails, request *admissionv1.AdmissionRequest) bool {
405405
currentUser := request.UserInfo.Username
406406
for i, approver := range oldObjApprovers {
407-
if approver.Type == "User" && approver.Name != currentUser {
407+
if v1alpha1.DefaultedApproverType(approver.Type) == "User" && approver.Name != currentUser {
408408
if oldObjApprovers[i].Input != newObjApprover[i].Input {
409409
return false
410410
}
411411
}
412412

413-
if approver.Type == "Group" {
413+
if v1alpha1.DefaultedApproverType(approver.Type) == "Group" {
414414
// Check if current user is a member of this group
415415
isUserInGroup := false
416416

0 commit comments

Comments
 (0)