소스 검색

[POR-1123] Delete deployment option should be available in all cases (#2959)

* delete deployment option should be available in all cases

* check for worklow run status
Mohammed Nafees 3 년 전
부모
커밋
0f4e79300a

+ 29 - 18
api/server/handlers/environment/delete_deployment.go

@@ -11,6 +11,7 @@ import (
 	"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"
+	"github.com/porter-dev/porter/api/server/shared/commonutils"
 	"github.com/porter-dev/porter/api/server/shared/config"
 	"github.com/porter-dev/porter/api/server/shared/requestutils"
 	"github.com/porter-dev/porter/api/types"
@@ -57,18 +58,6 @@ func (c *DeleteDeploymentHandler) ServeHTTP(w http.ResponseWriter, r *http.Reque
 		return
 	}
 
-	// delete corresponding namespace
-	agent, err := c.GetAgent(r, cluster, "")
-	if err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-		return
-	}
-
-	// make sure we do not delete any kubernetes "system" namespaces
-	if !isSystemNamespace(depl.Namespace) {
-		agent.DeleteNamespace(depl.Namespace)
-	}
-
 	// check that the environment belongs to the project and cluster IDs
 	env, err := c.Repo().Environment().ReadEnvironmentByID(project.ID, cluster.ID, depl.EnvironmentID)
 	if err != nil {
@@ -81,6 +70,34 @@ func (c *DeleteDeploymentHandler) ServeHTTP(w http.ResponseWriter, r *http.Reque
 		return
 	}
 
+	// try to cancel any existing github workflow for this deployment
+	client, err := getGithubClientFromEnvironment(c.Config(), env)
+	if err == nil {
+		workflowRun, err := commonutils.GetLatestWorkflowRun(client, depl.RepoOwner, depl.RepoName,
+			fmt.Sprintf("porter_%s_env.yml", env.Name), depl.PRBranchFrom)
+		if err == nil {
+			if workflowRun.GetStatus() == "in_progress" || workflowRun.GetStatus() == "queued" ||
+				workflowRun.GetStatus() == "waiting" || workflowRun.GetStatus() == "requested" ||
+				workflowRun.GetStatus() == "pending" {
+				client.Actions.CancelWorkflowRunByID(
+					context.Background(), depl.RepoOwner, depl.RepoName, workflowRun.GetID(),
+				)
+			}
+		}
+	}
+
+	// delete corresponding namespace
+	agent, err := c.GetAgent(r, cluster, "")
+	if err != nil {
+		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
+
+	// make sure we do not delete any kubernetes "system" namespaces
+	if !isSystemNamespace(depl.Namespace) {
+		agent.DeleteNamespace(depl.Namespace)
+	}
+
 	_, err = c.Repo().Environment().DeleteDeployment(depl)
 
 	if err != nil {
@@ -93,12 +110,6 @@ func (c *DeleteDeploymentHandler) ServeHTTP(w http.ResponseWriter, r *http.Reque
 		return
 	}
 
-	client, err := getGithubClientFromEnvironment(c.Config(), env)
-	if err != nil {
-		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
-		return
-	}
-
 	if depl.GHDeploymentID != 0 {
 		// set the GitHub deployment status to be inactive
 		_, _, err := client.Repositories.CreateDeploymentStatus(

+ 22 - 23
dashboard/src/main/home/cluster-dashboard/preview-environments/deployments/DeploymentCard.tsx

@@ -193,7 +193,12 @@ const DeploymentCard: React.FC<{
     },
   ];
 
-  console.error(deployment, deployment.gh_pr_branch_from, deployment.gh_pr_branch_into, deployment.gh_pr_branch_from === deployment.gh_pr_branch_into);
+  console.error(
+    deployment,
+    deployment.gh_pr_branch_from,
+    deployment.gh_pr_branch_into,
+    deployment.gh_pr_branch_from === deployment.gh_pr_branch_into
+  );
 
   return (
     <DeploymentCardWrapper
@@ -275,28 +280,22 @@ const DeploymentCard: React.FC<{
               </>
             ) : null}
 
-            {deployment.status !== DeploymentStatus.Creating && (
-              <>
-                {deployment.subdomain &&
-                deployment.status === DeploymentStatus.Created ? (
-                  <RowButton
-                    onClick={(e) => {
-                      e.preventDefault();
-                      e.stopPropagation();
-
-                      window.open(deployment.subdomain, "_blank");
-                    }}
-                    key={deployment.subdomain}
-                  >
-                    <i className="material-icons">open_in_new</i>
-                    View Live
-                  </RowButton>
-                ) : null}
-                <DeploymentCardActionsDropdown
-                  options={DeploymentCardActions}
-                />
-              </>
-            )}
+            {deployment.subdomain &&
+            deployment.status === DeploymentStatus.Created ? (
+              <RowButton
+                onClick={(e) => {
+                  e.preventDefault();
+                  e.stopPropagation();
+
+                  window.open(deployment.subdomain, "_blank");
+                }}
+                key={deployment.subdomain}
+              >
+                <i className="material-icons">open_in_new</i>
+                View Live
+              </RowButton>
+            ) : null}
+            <DeploymentCardActionsDropdown options={DeploymentCardActions} />
             {/* <Button
               onClick={() => {
                 setCurrentOverlay({