@@ -7,11 +7,10 @@ import (
7
7
"errors"
8
8
"fmt"
9
9
"net/http"
10
+ "strconv"
10
11
"strings"
11
12
"time"
12
13
13
- "github.com/porter-dev/api-contracts/generated/go/porter/v1/porterv1connect"
14
-
15
14
"connectrpc.com/connect"
16
15
17
16
porterv1 "github.com/porter-dev/api-contracts/generated/go/porter/v1"
@@ -119,10 +118,21 @@ func (c *CreatePorterAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
119
118
return
120
119
}
121
120
121
+ namespace := fmt .Sprintf ("app-%s" , appName )
122
+ telemetry .WithAttributes (span , telemetry.AttributeKV {Key : "application-name" , Value : appName })
123
+
124
+ k8sAgent , err := c .GetAgent (r , cluster , namespace )
125
+ if err != nil {
126
+ err = telemetry .Error (ctx , span , err , "error getting k8s agent" )
127
+ c .HandleAPIError (w , r , apierrors .NewErrPassThroughToClient (err , http .StatusInternalServerError ))
128
+ return
129
+ }
130
+
122
131
revisionNumber , err := pollForRevisionNumber (ctx , pollForRevisionNumberInput {
123
132
ProjectID : project .ID ,
124
133
RevisionID : appImageResp .Msg .RevisionId ,
125
- CCPClient : c .Config ().ClusterControlPlaneClient ,
134
+ Namespace : namespace ,
135
+ K8sAgent : k8sAgent ,
126
136
})
127
137
if err != nil {
128
138
err := telemetry .Error (ctx , span , err , "error polling for revision number" )
@@ -583,7 +593,8 @@ func (c *CreatePorterAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
583
593
type pollForRevisionNumberInput struct {
584
594
ProjectID uint
585
595
RevisionID string
586
- CCPClient porterv1connect.ClusterControlPlaneServiceClient
596
+ Namespace string
597
+ K8sAgent * kubernetes.Agent
587
598
}
588
599
589
600
func pollForRevisionNumber (ctx context.Context , input pollForRevisionNumberInput ) (int , error ) {
@@ -597,20 +608,28 @@ func pollForRevisionNumber(ctx context.Context, input pollForRevisionNumberInput
597
608
return 0 , telemetry .Error (ctx , span , nil , "timed out waiting for revision number" )
598
609
}
599
610
600
- appRevisionResp , err := input .CCPClient .GetAppRevision (ctx , connect .NewRequest (& porterv1.GetAppRevisionRequest {
601
- ProjectId : int64 (input .ProjectID ),
602
- AppRevisionId : input .RevisionID ,
603
- }))
611
+ deploymentList , err := input .K8sAgent .GetDeploymentsBySelector (ctx , input .Namespace , fmt .Sprintf ("porter.run/app-revision-id=%s" , input .RevisionID ))
604
612
if err != nil {
605
613
return 0 , telemetry .Error (ctx , span , err , "error getting app revision" )
606
614
}
607
615
608
- if appRevisionResp == nil || appRevisionResp . Msg == nil || appRevisionResp . Msg . AppRevision == nil {
609
- return 0 , telemetry .Error (ctx , span , err , "app revision resp is nil" )
616
+ if deploymentList == nil {
617
+ return 0 , telemetry .Error (ctx , span , nil , "deployment list is nil" )
610
618
}
611
619
612
- if appRevisionResp .Msg .AppRevision .RevisionNumber != 0 {
613
- return int (appRevisionResp .Msg .AppRevision .RevisionNumber ), nil
620
+ if len (deploymentList .Items ) > 0 {
621
+ firstDeployment := deploymentList .Items [0 ]
622
+
623
+ if len (firstDeployment .Spec .Template .Annotations ) > 0 && firstDeployment .Spec .Template .Annotations ["helm.sh/revision" ] != "" {
624
+ helmRevisionNumberString := firstDeployment .Spec .Template .Annotations ["helm.sh/revision" ]
625
+ helmRevisionNumber , err := strconv .Atoi (helmRevisionNumberString )
626
+ if err != nil {
627
+ err = telemetry .Error (ctx , span , err , "error converting helm revision number to int" )
628
+ return 0 , err
629
+ }
630
+
631
+ return helmRevisionNumber , nil
632
+ }
614
633
}
615
634
616
635
time .Sleep (2 * time .Second )
0 commit comments