Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions internal/watchlyapi/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,80 @@ func FinishDeployment(apiKey, githubSha, status, completedAt string) error {

return nil
}

type ProjectSettingsUpdateBody struct {
DeploymentFreeze *bool `json:"deployment_freeze,omitempty"`
}

type ProjectSettingsUpdateResponse struct {
Message string `json:"message"`
}

func UpdateProjectSettings(apiKey string, deploymentFreeze bool) error {
deploymentFreezePtr := &deploymentFreeze
body := ProjectSettingsUpdateBody{
DeploymentFreeze: deploymentFreezePtr,
}

marshalledBody, err := json.Marshal(body)
if err != nil {
return err
}

req, err := http.NewRequest("PUT", WATCHLY_ENDPOINT+"/webhooks/projects", bytes.NewBuffer(marshalledBody))
if err != nil {
return err
}

req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+apiKey)

client := NewHttpClient()
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()

if resp.StatusCode >= 400 {
return fmt.Errorf("failed to update project settings: %s", resp.Status)
}

var response ProjectSettingsUpdateResponse
if err := json.NewDecoder(resp.Body).Decode(&response); err != nil {
return err
}

return nil
}

type ProjectEnabledResponse struct {
Enabled bool `json:"enabled"`
}

func GetProjectEnabled(apiKey string) (bool, error) {
req, err := http.NewRequest("GET", WATCHLY_ENDPOINT+"/webhooks/projects/enabled", nil)
if err != nil {
return false, err
}

req.Header.Set("Authorization", "Bearer "+apiKey)

client := NewHttpClient()
resp, err := client.Do(req)
if err != nil {
return false, err
}
defer resp.Body.Close()

if resp.StatusCode >= 400 {
return false, fmt.Errorf("failed to get project enabled status: %s", resp.Status)
}

var response ProjectEnabledResponse
if err := json.NewDecoder(resp.Body).Decode(&response); err != nil {
return false, err
}

return response.Enabled, nil
}
87 changes: 87 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,93 @@ func main() {

fmt.Println("watchly-cli - ✅ Finished deployment")

return nil
},
},
},
},
{
Name: "repository",
Usage: "Manage repository settings",
Commands: []*cli.Command{
{
Name: "freeze",
Usage: "Freeze deployments for this project",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "api-key",
Aliases: []string{"k"},
Usage: "Watchly API key for your project",
Sources: cli.EnvVars("WATCHLY_API_KEY"),
Required: true,
},
},
Action: func(ctx context.Context, cmd *cli.Command) error {
apiKey := cmd.String("api-key")

fmt.Println("watchly-cli - ❄️ Freezing deployments...")

if err := watchlyapi.UpdateProjectSettings(apiKey, true); err != nil {
return fmt.Errorf("failed to freeze deployments: %w", err)
}

fmt.Println("watchly-cli - ✅ Deployments frozen")

return nil
},
},
{
Name: "unfreeze",
Usage: "Unfreeze deployments for this project",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "api-key",
Aliases: []string{"k"},
Usage: "Watchly API key for your project",
Sources: cli.EnvVars("WATCHLY_API_KEY"),
Required: true,
},
},
Action: func(ctx context.Context, cmd *cli.Command) error {
apiKey := cmd.String("api-key")

fmt.Println("watchly-cli - 🔥Unfreezing deployments...")

if err := watchlyapi.UpdateProjectSettings(apiKey, false); err != nil {
return fmt.Errorf("failed to unfreeze deployments: %w", err)
}

fmt.Println("watchly-cli - ✅ Deployments unfrozen")

return nil
},
},
{
Name: "enabled",
Usage: "Check if deployments are enabled for this project",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "api-key",
Aliases: []string{"k"},
Usage: "Watchly API key for your project",
Sources: cli.EnvVars("WATCHLY_API_KEY"),
Required: true,
},
},
Action: func(ctx context.Context, cmd *cli.Command) error {
apiKey := cmd.String("api-key")

enabled, err := watchlyapi.GetProjectEnabled(apiKey)
if err != nil {
return fmt.Errorf("failed to get project enabled status: %w", err)
}

if enabled {
fmt.Println("watchly-cli - ✅ Deployments are enabled")
} else {
fmt.Println("watchly-cli - ❌ Deployments are disabled")
}

return nil
},
},
Expand Down
Loading