func()

in pkg/event_processor/github/github.go [136:210]


func (p *EventProcessor) processCommentEvent(ctx context.Context, body []byte, ns string) (*event_processor.EventInfo, error) {
	event := &github.IssueCommentEvent{}
	if err := json.Unmarshal(body, event); err != nil {
		return nil, fmt.Errorf("failed to unmarshal GitHub IssueCommentEvent: %w", err)
	}

	if event.GetAction() != "created" {
		return createEventInfoWithoutRecheck(), nil
	}

	repoPath := event_processor.ConvertRepositoryPath(event.GetRepo().GetFullName())

	codebase, err := event_processor.GetCodebaseByRepoPath(ctx, p.ksClient, ns, repoPath)
	if err != nil {
		return nil, fmt.Errorf("failed to get codebase %s for GitHub IssueCommentEvent: %w", repoPath, err)
	}

	gitServerToken, err := event_processor.GetGitServerToken(ctx, p.ksClient, codebase)
	if err != nil {
		return nil, fmt.Errorf("failed to get git server token for GitHub IssueCommentEvent: %w", err)
	}

	client := p.gitHubClient(ctx, gitServerToken)

	pullReq, _, err := client.PullRequests.Get(
		ctx,
		event.GetRepo().GetOwner().GetLogin(),
		event.GetRepo().GetName(),
		event.GetIssue().GetNumber(),
	)
	if err != nil {
		if isPRNotFoundErr(err) {
			p.logger.Info("GitHub pull request not found")

			return createEventInfoWithoutRecheck(), nil
		}

		return nil, fmt.Errorf("failed to get GitHub pull request: %w", err)
	}

	if pullReq.GetBase() == nil {
		return nil, errors.New("github target branch empty")
	}

	if pullReq.GetHead() == nil {
		return nil, errors.New("github head branch empty")
	}

	commitMessage, err := p.getCommitMessage(
		ctx,
		client,
		event.GetRepo().GetOwner().GetLogin(),
		event.GetRepo().GetName(),
		event.GetIssue().GetNumber(),
	)
	if err != nil {
		return nil, err
	}

	return &event_processor.EventInfo{
		GitProvider:        event_processor.GitProviderGitHub,
		RepoPath:           repoPath,
		TargetBranch:       pullReq.GetBase().GetRef(),
		Type:               event_processor.EventTypeReviewComment,
		HasPipelineRecheck: event_processor.ContainsPipelineRecheck(event.GetComment().GetBody()),
		Codebase:           codebase,
		PullRequest: &event_processor.PullRequest{
			HeadRef:           pullReq.GetHead().GetRef(),
			HeadSha:           pullReq.GetHead().GetSHA(),
			Title:             pullReq.GetTitle(),
			ChangeNumber:      pullReq.GetNumber(),
			LastCommitMessage: commitMessage,
		},
	}, nil
}