Go SDK

Official Go client library for the RaidFrame API.

Install

go get github.com/raidframe/sdk-go

Initialize

package main

import (
    "os"
    rf "github.com/raidframe/sdk-go"
)

func main() {
    client := rf.NewClient(rf.Config{
        Token:   os.Getenv("RAIDFRAME_TOKEN"),
        Project: "my-saas",
    })
}

Services

// List services
services, err := client.Services.List(ctx)

// Get service
api, err := client.Services.Get(ctx, "api")
fmt.Printf("Status: %s, Instances: %d\n", api.Status, api.InstanceCount)

// Scale
err = client.Services.Scale(ctx, "api", rf.ScaleOptions{Min: 4, Max: 20})

// Restart
err = client.Services.Restart(ctx, "api")

Deployments

// Deploy
deployment, err := client.Deploy(ctx, rf.DeployOptions{Watch: true})
fmt.Printf("Deployed: %s (%s)\n", deployment.ID, deployment.Version)

// Rollback
err = client.Deployments.Rollback(ctx)

// List
deployments, err := client.Deployments.List(ctx, rf.ListOptions{Limit: 10})

Databases

// Create
db, err := client.Databases.Create(ctx, rf.DatabaseCreateOptions{
    Engine: "postgres",
    Name:   "main",
    Plan:   "pro",
})

// Query
result, err := client.Databases.Query(ctx, "main", "SELECT count(*) FROM users")

// Backup
err = client.Databases.Backup(ctx, "main", rf.BackupOptions{Name: "before-migration"})

// Branch
err = client.Databases.Branch(ctx, "main", rf.BranchOptions{Name: "feature-x"})

Environment Variables

// Set
err = client.Env.Set(ctx, map[string]string{
    "STRIPE_KEY": "sk_live_xxx",
    "API_SECRET": "secret",
})

// Get
value, err := client.Env.Get(ctx, "STRIPE_KEY")

// List
vars, err := client.Env.List(ctx)

// Delete
err = client.Env.Delete(ctx, "OLD_KEY")

Logs

// Query
logs, err := client.Logs.Query(ctx, rf.LogQuery{
    Service: "api",
    Since:   "1h",
    Level:   "error",
    Limit:   50,
})

for _, entry := range logs {
    fmt.Printf("[%s] %s\n", entry.Service, entry.Message)
}

// Stream
stream, err := client.Logs.Stream(ctx, rf.LogStreamOptions{Service: "api"})
defer stream.Close()

for {
    entry, err := stream.Next()
    if err != nil {
        break
    }
    fmt.Printf("[%s] %s\n", entry.Service, entry.Message)
}

Error Handling

import "github.com/raidframe/sdk-go/errors"

_, err := client.Services.Get(ctx, "nonexistent")
if errors.IsNotFound(err) {
    fmt.Println("Service not found")
} else if errors.IsRateLimit(err) {
    rle := err.(*errors.RateLimitError)
    fmt.Printf("Rate limited. Retry after %ds\n", rle.RetryAfter)
}