Skip to content

Commit 3ab8eff

Browse files
authored
feat(api): adds deployment attempts and events (#157)
1 parent a09faa7 commit 3ab8eff

File tree

13 files changed

+698
-109
lines changed

13 files changed

+698
-109
lines changed

foundry/api/client/client.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,14 @@ type Client interface {
2929
// Deployment operations
3030
CreateDeployment(ctx context.Context, releaseID string) (*ReleaseDeployment, error)
3131
GetDeployment(ctx context.Context, releaseID string, deployID string) (*ReleaseDeployment, error)
32-
UpdateDeploymentStatus(ctx context.Context, releaseID string, deployID string, status DeploymentStatus, reason string) error
32+
UpdateDeployment(ctx context.Context, releaseID string, deployment *ReleaseDeployment) (*ReleaseDeployment, error)
33+
IncrementDeploymentAttempts(ctx context.Context, releaseID string, deployID string) (*ReleaseDeployment, error)
3334
ListDeployments(ctx context.Context, releaseID string) ([]ReleaseDeployment, error)
3435
GetLatestDeployment(ctx context.Context, releaseID string) (*ReleaseDeployment, error)
36+
37+
// Deployment event operations
38+
AddDeploymentEvent(ctx context.Context, releaseID string, deployID string, name string, message string) (*ReleaseDeployment, error)
39+
GetDeploymentEvents(ctx context.Context, releaseID string, deployID string) ([]DeploymentEvent, error)
3540
}
3641

3742
// HTTPClient is an implementation of the Client interface that uses HTTP
@@ -76,7 +81,6 @@ func NewClient(baseURL string, options ...ClientOption) Client {
7681
// do performs an HTTP request and processes the response
7782
func (c *HTTPClient) do(ctx context.Context, method, path string, reqBody, respBody interface{}) error {
7883
url := fmt.Sprintf("%s%s", c.baseURL, path)
79-
fmt.Printf("Making %s request to %s", method, url)
8084

8185
var reqBodyReader io.Reader
8286
if reqBody != nil {

foundry/api/client/deployment.go

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,17 @@ func (c *HTTPClient) GetDeployment(ctx context.Context, releaseID string, deploy
3232
return &resp, nil
3333
}
3434

35-
// UpdateDeploymentStatus updates the status of a deployment
36-
func (c *HTTPClient) UpdateDeploymentStatus(ctx context.Context, releaseID string, deployID string, status DeploymentStatus, reason string) error {
37-
path := fmt.Sprintf("/release/%s/deploy/%s/status", releaseID, deployID)
38-
39-
payload := struct {
40-
Status DeploymentStatus `json:"status"`
41-
Reason string `json:"reason"`
42-
}{
43-
Status: status,
44-
Reason: reason,
35+
// UpdateDeployment updates a deployment with new values
36+
func (c *HTTPClient) UpdateDeployment(ctx context.Context, releaseID string, deployment *ReleaseDeployment) (*ReleaseDeployment, error) {
37+
path := fmt.Sprintf("/release/%s/deploy/%s", releaseID, deployment.ID)
38+
39+
var resp ReleaseDeployment
40+
err := c.do(ctx, http.MethodPut, path, deployment, &resp)
41+
if err != nil {
42+
return nil, err
4543
}
4644

47-
return c.do(ctx, http.MethodPut, path, payload, nil)
45+
return &resp, nil
4846
}
4947

5048
// ListDeployments retrieves all deployments for a release
@@ -60,6 +58,21 @@ func (c *HTTPClient) ListDeployments(ctx context.Context, releaseID string) ([]R
6058
return resp, nil
6159
}
6260

61+
// IncrementDeploymentAttempts increments the attempts counter for a deployment by 1
62+
func (c *HTTPClient) IncrementDeploymentAttempts(ctx context.Context, releaseID string, deployID string) (*ReleaseDeployment, error) {
63+
// First get the current deployment
64+
deployment, err := c.GetDeployment(ctx, releaseID, deployID)
65+
if err != nil {
66+
return nil, fmt.Errorf("failed to get deployment: %w", err)
67+
}
68+
69+
// Increment the attempts counter
70+
deployment.Attempts++
71+
72+
// Update the deployment
73+
return c.UpdateDeployment(ctx, releaseID, deployment)
74+
}
75+
6376
// GetLatestDeployment retrieves the most recent deployment for a release
6477
func (c *HTTPClient) GetLatestDeployment(ctx context.Context, releaseID string) (*ReleaseDeployment, error) {
6578
path := fmt.Sprintf("/release/%s/deploy/latest", releaseID)
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package client
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"net/http"
7+
)
8+
9+
// AddDeploymentEvent adds an event to a deployment
10+
func (c *HTTPClient) AddDeploymentEvent(ctx context.Context, releaseID string, deployID string, name string, message string) (*ReleaseDeployment, error) {
11+
path := fmt.Sprintf("/release/%s/deploy/%s/events", releaseID, deployID)
12+
13+
payload := struct {
14+
Name string `json:"name"`
15+
Message string `json:"message"`
16+
}{
17+
Name: name,
18+
Message: message,
19+
}
20+
21+
var resp ReleaseDeployment
22+
err := c.do(ctx, http.MethodPost, path, payload, &resp)
23+
if err != nil {
24+
return nil, err
25+
}
26+
27+
return &resp, nil
28+
}
29+
30+
// GetDeploymentEvents retrieves all events for a deployment
31+
func (c *HTTPClient) GetDeploymentEvents(ctx context.Context, releaseID string, deployID string) ([]DeploymentEvent, error) {
32+
path := fmt.Sprintf("/release/%s/deploy/%s/events", releaseID, deployID)
33+
34+
var resp []DeploymentEvent
35+
err := c.do(ctx, http.MethodGet, path, nil, &resp)
36+
if err != nil {
37+
return nil, err
38+
}
39+
40+
return resp, nil
41+
}

0 commit comments

Comments
 (0)