|
|
@@ -1,8 +1,10 @@
|
|
|
package environment
|
|
|
|
|
|
import (
|
|
|
+ "context"
|
|
|
"net/http"
|
|
|
|
|
|
+ "github.com/google/go-github/v41/github"
|
|
|
"github.com/porter-dev/porter/api/server/handlers"
|
|
|
"github.com/porter-dev/porter/api/server/shared"
|
|
|
"github.com/porter-dev/porter/api/server/shared/apierrors"
|
|
|
@@ -35,18 +37,103 @@ func (c *ListDeploymentsByClusterHandler) ServeHTTP(w http.ResponseWriter, r *ht
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- depls, err := c.Repo().Environment().ListDeploymentsByCluster(project.ID, cluster.ID, req.Status...)
|
|
|
+ var deployments []*types.Deployment
|
|
|
+ var pullRequests []*types.PullRequest
|
|
|
+
|
|
|
+ if req.EnvironmentID == 0 {
|
|
|
+ depls, err := c.Repo().Environment().ListDeploymentsByCluster(project.ID, cluster.ID)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, depl := range depls {
|
|
|
+ deployments = append(deployments, depl.ToDeploymentType())
|
|
|
+ }
|
|
|
+
|
|
|
+ envList, err := c.Repo().Environment().ListEnvironments(project.ID, cluster.ID)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, env := range envList {
|
|
|
+ err = populateOpenPullRequests(r.Context(), c.Config(), env, pullRequests)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ depls, err := c.Repo().Environment().ListDeployments(req.EnvironmentID)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, depl := range depls {
|
|
|
+ deployments = append(deployments, depl.ToDeploymentType())
|
|
|
+ }
|
|
|
+
|
|
|
+ env, err := c.Repo().Environment().ReadEnvironmentByID(project.ID, cluster.ID, req.EnvironmentID)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ err = populateOpenPullRequests(r.Context(), c.Config(), env, pullRequests)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ c.WriteResult(w, r, map[string]interface{}{
|
|
|
+ "pull_requests": pullRequests,
|
|
|
+ "deployments": deployments,
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+func populateOpenPullRequests(
|
|
|
+ ctx context.Context,
|
|
|
+ config *config.Config,
|
|
|
+ env *models.Environment,
|
|
|
+ pullRequests []*types.PullRequest,
|
|
|
+) error {
|
|
|
+ client, err := getGithubClientFromEnvironment(config, env)
|
|
|
|
|
|
if err != nil {
|
|
|
- c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
|
|
|
- return
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
- res := make([]*types.Deployment, 0)
|
|
|
+ openPRs, _, err := client.PullRequests.List(ctx, env.GitRepoOwner, env.GitRepoName,
|
|
|
+ &github.PullRequestListOptions{
|
|
|
+ ListOptions: github.ListOptions{
|
|
|
+ PerPage: 50,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ )
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
|
|
|
- for _, depl := range depls {
|
|
|
- res = append(res, depl.ToDeploymentType())
|
|
|
+ for _, pr := range openPRs {
|
|
|
+ pullRequests = append(pullRequests, &types.PullRequest{
|
|
|
+ Title: pr.GetTitle(),
|
|
|
+ Number: uint(pr.GetNumber()),
|
|
|
+ RepoOwner: pr.GetHead().GetRepo().GetOwner().GetName(),
|
|
|
+ RepoName: pr.GetHead().GetRepo().GetName(),
|
|
|
+ BranchFrom: pr.GetHead().GetRef(),
|
|
|
+ BranchInto: pr.GetBase().GetRef(),
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
- c.WriteResult(w, r, res)
|
|
|
+ return nil
|
|
|
}
|