Skip to content

Commit d4fc9f3

Browse files
authored
feat(auditor): add ProjectVersionUpdated event (#2698)
Signed-off-by: Sylwester Piskozub <sylwesterpiskozub@gmail.com>
1 parent cdd637e commit d4fc9f3

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed

app/controlplane/pkg/auditor/events/project.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
var (
3030
_ auditor.LogEntry = (*ProjectCreated)(nil)
3131
_ auditor.LogEntry = (*ProjectVersionCreated)(nil)
32+
_ auditor.LogEntry = (*ProjectVersionUpdated)(nil)
3233
_ auditor.LogEntry = (*ProjectVersionDeleted)(nil)
3334
_ auditor.LogEntry = (*ProjectMembershipAdded)(nil)
3435
_ auditor.LogEntry = (*ProjectMembershipRemoved)(nil)
@@ -39,6 +40,7 @@ const (
3940
ProjectType auditor.TargetType = "Project"
4041
ProjectCreatedActionType string = "ProjectCreated"
4142
ProjectVersionCreatedActionType string = "ProjectVersionCreated"
43+
ProjectVersionUpdatedActionType string = "ProjectVersionUpdated"
4244
ProjectVersionDeletedActionType string = "ProjectVersionDeleted"
4345
ProjectMembershipAddedActionType string = "ProjectMembershipAdded"
4446
ProjectMembershipRemovedActionType string = "ProjectMembershipRemoved"
@@ -156,6 +158,42 @@ func (p *ProjectVersionDeleted) Description() string {
156158
return fmt.Sprintf("%s has deleted %s version '%s' for project '%s'", auditor.GetActorIdentifier(), releaseType, p.Version, p.ProjectName)
157159
}
158160

161+
// ProjectVersionUpdated represents the update of a project version
162+
type ProjectVersionUpdated struct {
163+
*ProjectBase
164+
VersionID *uuid.UUID `json:"version_id,omitempty"`
165+
Version string `json:"version,omitempty"`
166+
NewVersion *string `json:"new_version,omitempty"`
167+
}
168+
169+
func (p *ProjectVersionUpdated) ActionType() string {
170+
return ProjectVersionUpdatedActionType
171+
}
172+
173+
func (p *ProjectVersionUpdated) ActionInfo() (json.RawMessage, error) {
174+
if _, err := p.ProjectBase.ActionInfo(); err != nil {
175+
return nil, err
176+
}
177+
178+
if p.VersionID == nil || p.Version == "" {
179+
return nil, errors.New("version id and version are required")
180+
}
181+
182+
return json.Marshal(&p)
183+
}
184+
185+
func (p *ProjectVersionUpdated) Description() string {
186+
desc := fmt.Sprintf("%s has updated version '%s' for project '%s'",
187+
auditor.GetActorIdentifier(), p.Version, p.ProjectName)
188+
189+
if p.NewVersion != nil {
190+
desc = fmt.Sprintf("%s has renamed version '%s' to '%s' for project '%s'",
191+
auditor.GetActorIdentifier(), p.Version, *p.NewVersion, p.ProjectName)
192+
}
193+
194+
return desc
195+
}
196+
159197
// Helper function to make role names more user-friendly
160198
func prettyRole(role string) string {
161199
// Convert the role to a prettier format

app/controlplane/pkg/auditor/events/project_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,21 @@ func TestProjectEvents(t *testing.T) {
7878
actor: auditor.ActorTypeUser,
7979
actorID: userUUID,
8080
},
81+
{
82+
name: "ProjectVersionUpdated",
83+
event: &events.ProjectVersionUpdated{
84+
ProjectBase: &events.ProjectBase{
85+
ProjectID: &projectUUID,
86+
ProjectName: projectName,
87+
},
88+
VersionID: &versionUUID,
89+
Version: "v1.0.0",
90+
NewVersion: stringPtr("v1.0.1"),
91+
},
92+
expected: "testdata/projects/project_version_updated.json",
93+
actor: auditor.ActorTypeUser,
94+
actorID: userUUID,
95+
},
8196
{
8297
name: "ProjectMembershipAdded",
8398
event: &events.ProjectMembershipAdded{
@@ -353,3 +368,7 @@ func TestProjectEventsFailed(t *testing.T) {
353368
})
354369
}
355370
}
371+
372+
func stringPtr(s string) *string {
373+
return &s
374+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"ActionType": "ProjectVersionUpdated",
3+
"TargetType": "Project",
4+
"TargetID": "3089bb36-e27b-428b-8009-d015c8737c56",
5+
"ActorType": "USER",
6+
"ActorID": "1089bb36-e27b-428b-8009-d015c8737c54",
7+
"ActorEmail": "john@cyberdyne.io",
8+
"ActorName": "John Connor",
9+
"OrgID": "1089bb36-e27b-428b-8009-d015c8737c54",
10+
"Description": "John Connor has renamed version 'v1.0.0' to 'v1.0.1' for project 'test-project'",
11+
"Info": {
12+
"project_id": "3089bb36-e27b-428b-8009-d015c8737c56",
13+
"project_name": "test-project",
14+
"version_id": "5089bb36-e27b-428b-8009-d015c8737c58",
15+
"version": "v1.0.0",
16+
"new_version": "v1.0.1"
17+
},
18+
"Digest": "sha256:f86470cccd6d88b274433350b0ff3958b9f081a12bffcbcd20b6648d28182c1f"
19+
}

0 commit comments

Comments
 (0)