mirror of https://github.com/harness/drone.git
feat: [CODE-2324]: added reviewer-add PR activity entry (#2698)
* added reviewer-add PR activity entryCODE-2402
parent
dc5bc6ed44
commit
cafa0148d8
|
@ -98,6 +98,7 @@ func (c *Controller) ReviewerAdd(
|
||||||
}
|
}
|
||||||
|
|
||||||
var reviewer *types.PullReqReviewer
|
var reviewer *types.PullReqReviewer
|
||||||
|
var added bool
|
||||||
|
|
||||||
err = c.tx.WithTx(ctx, func(ctx context.Context) error {
|
err = c.tx.WithTx(ctx, func(ctx context.Context) error {
|
||||||
reviewer, err = c.reviewerStore.Find(ctx, pr.ID, in.ReviewerID)
|
reviewer, err = c.reviewerStore.Find(ctx, pr.ID, in.ReviewerID)
|
||||||
|
@ -110,6 +111,7 @@ func (c *Controller) ReviewerAdd(
|
||||||
}
|
}
|
||||||
|
|
||||||
reviewer = newPullReqReviewer(session, pr, repo, reviewerInfo, addedByInfo, reviewerType, in)
|
reviewer = newPullReqReviewer(session, pr, repo, reviewerInfo, addedByInfo, reviewerType, in)
|
||||||
|
added = true
|
||||||
|
|
||||||
return c.reviewerStore.Create(ctx, reviewer)
|
return c.reviewerStore.Create(ctx, reviewer)
|
||||||
})
|
})
|
||||||
|
@ -117,8 +119,38 @@ func (c *Controller) ReviewerAdd(
|
||||||
return nil, fmt.Errorf("failed to create pull request reviewer: %w", err)
|
return nil, fmt.Errorf("failed to create pull request reviewer: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !added {
|
||||||
|
return reviewer, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
err = func() error {
|
||||||
|
payload := &types.PullRequestActivityPayloadReviewerAdd{
|
||||||
|
PrincipalID: reviewer.PrincipalID,
|
||||||
|
ReviewerType: reviewerType,
|
||||||
|
}
|
||||||
|
|
||||||
|
metadata := &types.PullReqActivityMetadata{
|
||||||
|
Mentions: &types.PullReqActivityMentionsMetadata{IDs: []int64{reviewer.PrincipalID}},
|
||||||
|
}
|
||||||
|
|
||||||
|
if pr, err = c.pullreqStore.UpdateActivitySeq(ctx, pr); err != nil {
|
||||||
|
return fmt.Errorf("failed to increment pull request activity sequence: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = c.activityStore.CreateWithPayload(ctx, pr, session.Principal.ID, payload, metadata)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to create pull request activity: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}()
|
||||||
|
if err != nil {
|
||||||
|
log.Ctx(ctx).Err(err).Msg("failed to write pull request activity after adding a reviewer")
|
||||||
|
}
|
||||||
|
|
||||||
c.reportReviewerAddition(ctx, session, pr, reviewer)
|
c.reportReviewerAddition(ctx, session, pr, reviewer)
|
||||||
return reviewer, err
|
|
||||||
|
return reviewer, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Controller) reportReviewerAddition(
|
func (c *Controller) reportReviewerAddition(
|
||||||
|
@ -134,9 +166,11 @@ func (c *Controller) reportReviewerAddition(
|
||||||
}
|
}
|
||||||
|
|
||||||
// newPullReqReviewer creates new pull request reviewer object.
|
// newPullReqReviewer creates new pull request reviewer object.
|
||||||
func newPullReqReviewer(session *auth.Session, pullReq *types.PullReq,
|
func newPullReqReviewer(
|
||||||
|
session *auth.Session, pullReq *types.PullReq,
|
||||||
repo *types.Repository, reviewerInfo, addedByInfo *types.PrincipalInfo,
|
repo *types.Repository, reviewerInfo, addedByInfo *types.PrincipalInfo,
|
||||||
reviewerType enum.PullReqReviewerType, in *ReviewerAddInput) *types.PullReqReviewer {
|
reviewerType enum.PullReqReviewerType, in *ReviewerAddInput,
|
||||||
|
) *types.PullReqReviewer {
|
||||||
now := time.Now().UnixMilli()
|
now := time.Now().UnixMilli()
|
||||||
return &types.PullReqReviewer{
|
return &types.PullReqReviewer{
|
||||||
PullReqID: pullReq.ID,
|
PullReqID: pullReq.ID,
|
||||||
|
|
|
@ -74,27 +74,22 @@ func (c *Controller) ReviewerDelete(
|
||||||
return fmt.Errorf("failed to delete reviewer: %w", err)
|
return fmt.Errorf("failed to delete reviewer: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if reviewer.ReviewDecision == enum.PullReqReviewDecisionPending {
|
|
||||||
// We create a pull request activity entry only if a review has actually been submitted.
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
activityPayload := &types.PullRequestActivityPayloadReviewerDelete{
|
|
||||||
CommitSHA: reviewer.SHA,
|
|
||||||
Decision: reviewer.ReviewDecision,
|
|
||||||
PrincipalID: reviewer.PrincipalID,
|
|
||||||
}
|
|
||||||
|
|
||||||
metadata := &types.PullReqActivityMetadata{
|
|
||||||
Mentions: &types.PullReqActivityMentionsMetadata{IDs: []int64{reviewer.PrincipalID}},
|
|
||||||
}
|
|
||||||
|
|
||||||
err = func() error {
|
err = func() error {
|
||||||
|
payload := &types.PullRequestActivityPayloadReviewerDelete{
|
||||||
|
CommitSHA: reviewer.SHA,
|
||||||
|
Decision: reviewer.ReviewDecision,
|
||||||
|
PrincipalID: reviewer.PrincipalID,
|
||||||
|
}
|
||||||
|
|
||||||
|
metadata := &types.PullReqActivityMetadata{
|
||||||
|
Mentions: &types.PullReqActivityMentionsMetadata{IDs: []int64{reviewer.PrincipalID}},
|
||||||
|
}
|
||||||
|
|
||||||
if pr, err = c.pullreqStore.UpdateActivitySeq(ctx, pr); err != nil {
|
if pr, err = c.pullreqStore.UpdateActivitySeq(ctx, pr); err != nil {
|
||||||
return fmt.Errorf("failed to increment pull request activity sequence: %w", err)
|
return fmt.Errorf("failed to increment pull request activity sequence: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = c.activityStore.CreateWithPayload(ctx, pr, session.Principal.ID, activityPayload, metadata)
|
_, err = c.activityStore.CreateWithPayload(ctx, pr, session.Principal.ID, payload, metadata)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to create pull request activity: %w", err)
|
return fmt.Errorf("failed to create pull request activity: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -103,7 +98,7 @@ func (c *Controller) ReviewerDelete(
|
||||||
}()
|
}()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// non-critical error
|
// non-critical error
|
||||||
log.Ctx(ctx).Err(err).Msgf("failed to write pull request activity after reviewer removal")
|
log.Ctx(ctx).Err(err).Msg("failed to write pull request activity after reviewer removal")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -83,6 +83,7 @@ const (
|
||||||
PullReqActivityTypeTitleChange PullReqActivityType = "title-change"
|
PullReqActivityTypeTitleChange PullReqActivityType = "title-change"
|
||||||
PullReqActivityTypeStateChange PullReqActivityType = "state-change"
|
PullReqActivityTypeStateChange PullReqActivityType = "state-change"
|
||||||
PullReqActivityTypeReviewSubmit PullReqActivityType = "review-submit"
|
PullReqActivityTypeReviewSubmit PullReqActivityType = "review-submit"
|
||||||
|
PullReqActivityTypeReviewerAdd PullReqActivityType = "reviewer-add"
|
||||||
PullReqActivityTypeReviewerDelete PullReqActivityType = "reviewer-delete"
|
PullReqActivityTypeReviewerDelete PullReqActivityType = "reviewer-delete"
|
||||||
PullReqActivityTypeBranchUpdate PullReqActivityType = "branch-update"
|
PullReqActivityTypeBranchUpdate PullReqActivityType = "branch-update"
|
||||||
PullReqActivityTypeBranchDelete PullReqActivityType = "branch-delete"
|
PullReqActivityTypeBranchDelete PullReqActivityType = "branch-delete"
|
||||||
|
|
|
@ -130,6 +130,15 @@ func (a *PullRequestActivityPayloadReviewSubmit) ActivityType() enum.PullReqActi
|
||||||
return enum.PullReqActivityTypeReviewSubmit
|
return enum.PullReqActivityTypeReviewSubmit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type PullRequestActivityPayloadReviewerAdd struct {
|
||||||
|
PrincipalID int64 `json:"principal_id"`
|
||||||
|
ReviewerType enum.PullReqReviewerType `json:"reviewer_type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *PullRequestActivityPayloadReviewerAdd) ActivityType() enum.PullReqActivityType {
|
||||||
|
return enum.PullReqActivityTypeReviewerAdd
|
||||||
|
}
|
||||||
|
|
||||||
type PullRequestActivityPayloadReviewerDelete struct {
|
type PullRequestActivityPayloadReviewerDelete struct {
|
||||||
CommitSHA string `json:"commit_sha"`
|
CommitSHA string `json:"commit_sha"`
|
||||||
Decision enum.PullReqReviewDecision `json:"decision"`
|
Decision enum.PullReqReviewDecision `json:"decision"`
|
||||||
|
|
Loading…
Reference in New Issue