feat: add DBOS skills for TypeScript, Python, and Go (#94)
Add three DBOS SDK skills with reference documentation for building reliable, fault-tolerant applications with durable workflows. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
62
skills/dbos-golang/references/advanced-versioning.md
Normal file
62
skills/dbos-golang/references/advanced-versioning.md
Normal file
@@ -0,0 +1,62 @@
|
||||
---
|
||||
title: Use Versioning for Blue-Green Deployments
|
||||
impact: LOW
|
||||
impactDescription: Enables safe deployment of new code versions alongside old ones
|
||||
tags: advanced, versioning, blue-green, deployment
|
||||
---
|
||||
|
||||
## Use Versioning for Blue-Green Deployments
|
||||
|
||||
Set `ApplicationVersion` in configuration to tag workflows with a version. DBOS only recovers workflows matching the current application version, preventing code mismatches during recovery.
|
||||
|
||||
**Incorrect (deploying new code that breaks in-progress workflows):**
|
||||
|
||||
```go
|
||||
ctx, _ := dbos.NewDBOSContext(context.Background(), dbos.Config{
|
||||
AppName: "my-app",
|
||||
DatabaseURL: os.Getenv("DBOS_SYSTEM_DATABASE_URL"),
|
||||
// No version set - version auto-computed from binary hash
|
||||
// Old workflows will be recovered with new code, which may break
|
||||
})
|
||||
```
|
||||
|
||||
**Correct (versioned deployment):**
|
||||
|
||||
```go
|
||||
ctx, _ := dbos.NewDBOSContext(context.Background(), dbos.Config{
|
||||
AppName: "my-app",
|
||||
DatabaseURL: os.Getenv("DBOS_SYSTEM_DATABASE_URL"),
|
||||
ApplicationVersion: "2.0.0",
|
||||
})
|
||||
```
|
||||
|
||||
By default, the application version is automatically computed from a SHA-256 hash of the executable binary. Set it explicitly for more control.
|
||||
|
||||
**Blue-green deployment strategy:**
|
||||
|
||||
1. Deploy new version (v2) alongside old version (v1)
|
||||
2. Direct new traffic to v2 processes
|
||||
3. Let v1 processes "drain" (complete in-progress workflows)
|
||||
4. Check for remaining v1 workflows:
|
||||
|
||||
```go
|
||||
oldWorkflows, _ := dbos.ListWorkflows(ctx,
|
||||
dbos.WithAppVersion("1.0.0"),
|
||||
dbos.WithStatus([]dbos.WorkflowStatusType{dbos.WorkflowStatusPending}),
|
||||
)
|
||||
```
|
||||
|
||||
5. Once all v1 workflows are complete, retire v1 processes
|
||||
|
||||
**Fork to new version (for stuck workflows):**
|
||||
|
||||
```go
|
||||
// Fork a workflow from a failed step to run on the new version
|
||||
handle, _ := dbos.ForkWorkflow[string](ctx, dbos.ForkWorkflowInput{
|
||||
OriginalWorkflowID: workflowID,
|
||||
StartStep: failedStepID,
|
||||
ApplicationVersion: "2.0.0",
|
||||
})
|
||||
```
|
||||
|
||||
Reference: [Versioning](https://docs.dbos.dev/golang/tutorials/upgrading-workflows#versioning)
|
||||
Reference in New Issue
Block a user