Files
Story Crater Bot b6767e247c
Build / Build and push image (push) Failing after 12s
CI / Test, vet, build (push) Successful in 2m18s
fix(deps,ci): update module path to forgejo.riotpiao.com/rock/homelab-frontend, switch to GITHUB_TOKEN
2026-08-21 20:46:45 -07:00

89 lines
2.4 KiB
Go

package main
import (
"context"
"flag"
"fmt"
"log"
"time"
"go.temporal.io/sdk/client"
"forgejo.riotpiao.com/rock/homelab-frontend/internal/workflow"
)
func main() {
hostPort := flag.String("host", "temporal.temporal:7233", "Temporal server host:port")
namespace := flag.String("namespace", "production", "Temporal namespace")
taskQueue := flag.String("queue", "worker-production", "Task queue")
workflowType := flag.String("workflow", "HelloWorldWorkflow", "Workflow type")
workflowID := flag.String("id", "", "Workflow ID (auto-generated if not set)")
flag.Parse()
// Auto-generate ID
if *workflowID == "" {
*workflowID = fmt.Sprintf("test-%s-%d", *workflowType, time.Now().Unix())
}
log.Printf("Connecting to Temporal at %s (namespace: %s)", *hostPort, *namespace)
// Connect to Temporal
c, err := client.Dial(client.Options{
HostPort: *hostPort,
Namespace: *namespace,
})
if err != nil {
log.Fatalf("Failed to connect: %v", err)
}
defer c.Close()
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// Start workflow
log.Printf("Starting %s (ID: %s)", *workflowType, *workflowID)
var run client.WorkflowRun
switch *workflowType {
case "HelloWorldWorkflow":
run, err = c.ExecuteWorkflow(ctx, client.StartWorkflowOptions{
ID: *workflowID,
TaskQueue: *taskQueue,
}, workflow.HelloWorldWorkflow, "World")
case "GreeterWorkflow":
run, err = c.ExecuteWorkflow(ctx, client.StartWorkflowOptions{
ID: *workflowID,
TaskQueue: *taskQueue,
}, workflow.GreeterWorkflow, "Alice")
case "ProcessOrderWorkflow":
run, err = c.ExecuteWorkflow(ctx, client.StartWorkflowOptions{
ID: *workflowID,
TaskQueue: *taskQueue,
}, workflow.ProcessOrderWorkflow, "ORDER-12345")
default:
log.Fatalf("Unknown workflow type: %s", *workflowType)
}
if err != nil {
log.Fatalf("Failed to start workflow: %v", err)
}
log.Printf("✓ Workflow submitted")
log.Printf(" Run ID: %s", run.GetRunID())
log.Printf(" Workflow ID: %s", *workflowID)
log.Printf(" Watch at: http://localhost:8080/namespaces/%s/workflows/%s", *namespace, *workflowID)
// Try to get result
ctx2, cancel2 := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel2()
var result string
if err := run.Get(ctx2, &result); err != nil {
log.Printf("⏳ Workflow executing (or error): %v", err)
} else {
log.Printf("✓ Result: %s", result)
}
}