Mohammed Nafees 4 лет назад
Родитель
Сommit
a354c6febc
1 измененных файлов с 29 добавлено и 13 удалено
  1. 29 13
      api/server/handlers/environment/list_deployments_by_cluster.go

+ 29 - 13
api/server/handlers/environment/list_deployments_by_cluster.go

@@ -2,6 +2,7 @@ package environment
 
 import (
 	"context"
+	"fmt"
 	"net/http"
 
 	"github.com/google/go-github/v41/github"
@@ -48,8 +49,14 @@ func (c *ListDeploymentsByClusterHandler) ServeHTTP(w http.ResponseWriter, r *ht
 			return
 		}
 
+		deplInfoMap := make(map[string]bool)
+
 		for _, depl := range depls {
-			deployments = append(deployments, depl.ToDeploymentType())
+			deployment := depl.ToDeploymentType()
+			deplInfoMap[fmt.Sprintf(
+				"%s-%s-%d", deployment.RepoOwner, deployment.RepoName, deployment.PullRequestID,
+			)] = true
+			deployments = append(deployments, deployment)
 		}
 
 		envList, err := c.Repo().Environment().ListEnvironments(project.ID, cluster.ID)
@@ -60,7 +67,7 @@ func (c *ListDeploymentsByClusterHandler) ServeHTTP(w http.ResponseWriter, r *ht
 		}
 
 		for _, env := range envList {
-			prs, err := populateOpenPullRequests(r.Context(), c.Config(), env)
+			prs, err := fetchOpenPullRequests(r.Context(), c.Config(), env, deplInfoMap)
 
 			if err != nil {
 				c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
@@ -77,8 +84,14 @@ func (c *ListDeploymentsByClusterHandler) ServeHTTP(w http.ResponseWriter, r *ht
 			return
 		}
 
+		deplInfoMap := make(map[string]bool)
+
 		for _, depl := range depls {
-			deployments = append(deployments, depl.ToDeploymentType())
+			deployment := depl.ToDeploymentType()
+			deplInfoMap[fmt.Sprintf(
+				"%s-%s-%d", deployment.RepoOwner, deployment.RepoName, deployment.PullRequestID,
+			)] = true
+			deployments = append(deployments, deployment)
 		}
 
 		env, err := c.Repo().Environment().ReadEnvironmentByID(project.ID, cluster.ID, req.EnvironmentID)
@@ -88,7 +101,7 @@ func (c *ListDeploymentsByClusterHandler) ServeHTTP(w http.ResponseWriter, r *ht
 			return
 		}
 
-		prs, err := populateOpenPullRequests(r.Context(), c.Config(), env)
+		prs, err := fetchOpenPullRequests(r.Context(), c.Config(), env, deplInfoMap)
 
 		if err != nil {
 			c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
@@ -104,10 +117,11 @@ func (c *ListDeploymentsByClusterHandler) ServeHTTP(w http.ResponseWriter, r *ht
 	})
 }
 
-func populateOpenPullRequests(
+func fetchOpenPullRequests(
 	ctx context.Context,
 	config *config.Config,
 	env *models.Environment,
+	deplInfoMap map[string]bool,
 ) ([]*types.PullRequest, error) {
 	client, err := getGithubClientFromEnvironment(config, env)
 
@@ -134,14 +148,16 @@ func populateOpenPullRequests(
 	}
 
 	for _, pr := range openPRs {
-		prs = append(prs, &types.PullRequest{
-			Title:      pr.GetTitle(),
-			Number:     uint(pr.GetNumber()),
-			RepoOwner:  env.GitRepoOwner,
-			RepoName:   env.GitRepoName,
-			BranchFrom: pr.GetHead().GetRef(),
-			BranchInto: pr.GetBase().GetRef(),
-		})
+		if _, ok := deplInfoMap[fmt.Sprintf("%s-%s-%d", env.GitRepoOwner, env.GitRepoName, pr.GetNumber())]; !ok {
+			prs = append(prs, &types.PullRequest{
+				Title:      pr.GetTitle(),
+				Number:     uint(pr.GetNumber()),
+				RepoOwner:  env.GitRepoOwner,
+				RepoName:   env.GitRepoName,
+				BranchFrom: pr.GetHead().GetRef(),
+				BranchInto: pr.GetBase().GetRef(),
+			})
+		}
 	}
 
 	return prs, nil