diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ env ?= local -default: infra platform +default: infra platform apps compose: docker compose up --build --detach @@ -11,23 +11,29 @@ infra: compose # TODO multiple env temporal workflow start \ + --workflow-id infra-manual \ --task-queue cloudlab \ --type Infra \ - --input '{ "url": "https://github.com/khuedoan/cloudlab", "revision": "master", "oldRevision": "790763a8166e306f34559870c60e818505117e6b", "stack": "local" }' + --input '{ "url": "https://github.com/khuedoan/cloudlab", "revision": "master", "stack": "local" }' + temporal workflow result --workflow-id infra-manual platform: # TODO multiple env temporal workflow start \ + --workflow-id platform-manual \ --task-queue cloudlab \ --type Platform \ --input '{ "url": "https://github.com/khuedoan/cloudlab", "revision": "master", "registry": "registry.127.0.0.1.sslip.io", "cluster": "local" }' + temporal workflow result --workflow-id platform-manual apps: # TODO multiple env temporal workflow start \ + --workflow-id apps-manual \ --task-queue cloudlab \ --type Apps \ --input '{ "url": "https://github.com/khuedoan/cloudlab", "revision": "master", "registry": "registry.127.0.0.1.sslip.io", "cluster": "local" }' + temporal workflow result --workflow-id apps-manual test: cd controller && go test ./... diff --git a/controller/workflows/apps.go b/controller/workflows/apps.go --- a/controller/workflows/apps.go +++ b/controller/workflows/apps.go @@ -1,13 +1,13 @@ package workflows import ( + "os" "path/filepath" "strings" "time" "cloudlab/controller/activities" - "go.temporal.io/sdk/temporal" "go.temporal.io/sdk/workflow" ) @@ -22,27 +22,27 @@ logger := workflow.GetLogger(ctx) logger.Info("Platform workflow started", "platform", input) - var repoPath string + var workspace string if err := workflow.ExecuteActivity( workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ StartToCloseTimeout: 1 * time.Minute, - RetryPolicy: &temporal.RetryPolicy{MaximumAttempts: 3}, }), activities.Clone, input.Url, input.Revision, - ).Get(ctx, &repoPath); err != nil { + ).Get(ctx, &workspace); err != nil { return err } - appsDir := repoPath + "/apps" + defer os.RemoveAll(workspace) + + appsDir := workspace + "/apps" // TODO this should be a separate activity var matchedPaths []string if err := workflow.ExecuteActivity( workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ - StartToCloseTimeout: 1 * time.Minute, - RetryPolicy: &temporal.RetryPolicy{MaximumAttempts: 2}, + StartToCloseTimeout: 10 * time.Second, }), activities.DiscoverApps, appsDir, @@ -51,8 +51,7 @@ return err } ctx = workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ - StartToCloseTimeout: 5 * time.Minute, - RetryPolicy: &temporal.RetryPolicy{MaximumAttempts: 2}, + StartToCloseTimeout: 1 * time.Minute, }) var futures []workflow.Future diff --git a/controller/workflows/infra.go b/controller/workflows/infra.go --- a/controller/workflows/infra.go +++ b/controller/workflows/infra.go @@ -2,6 +2,7 @@ import ( "fmt" + "os" "time" "cloudlab/controller/activities" @@ -21,18 +22,16 @@ logger := workflow.GetLogger(ctx) logger.Info("Infra workflow started", "infra", input) - // Clone activity: 30s timeout, quick retry on worker failure cloneCtx := workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ StartToCloseTimeout: 1 * time.Minute, - RetryPolicy: &temporal.RetryPolicy{ - MaximumAttempts: 3, - }, }) - var path string - if err := workflow.ExecuteActivity(cloneCtx, activities.Clone, input.Url, input.Revision).Get(ctx, &path); err != nil { + var workspace string + if err := workflow.ExecuteActivity(cloneCtx, activities.Clone, input.Url, input.Revision).Get(ctx, &workspace); err != nil { return nil, err } + + defer os.RemoveAll(workspace) // Graph and analysis activities: moderate timeout analysisCtx := workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ @@ -46,7 +45,7 @@ var prunedGraph *activities.Graph // Get the terragrunt graph - if err := workflow.ExecuteActivity(analysisCtx, activities.TerragruntGraph, path+"/infra/"+input.Stack).Get(ctx, &graph); err != nil { + if err := workflow.ExecuteActivity(analysisCtx, activities.TerragruntGraph, workspace+"/infra/"+input.Stack).Get(ctx, &graph); err != nil { return nil, err } @@ -57,7 +56,7 @@ } else { // Determine changed modules and prune graph var changedModules []string - if err := workflow.ExecuteActivity(analysisCtx, activities.ChangedModules, path, input.OldRevision).Get(ctx, &changedModules); err != nil { + if err := workflow.ExecuteActivity(analysisCtx, activities.ChangedModules, workspace, input.OldRevision).Get(ctx, &changedModules); err != nil { return nil, err } diff --git a/controller/workflows/platform.go b/controller/workflows/platform.go --- a/controller/workflows/platform.go +++ b/controller/workflows/platform.go @@ -1,11 +1,11 @@ package workflows import ( + "os" "time" "cloudlab/controller/activities" - "go.temporal.io/sdk/temporal" "go.temporal.io/sdk/workflow" ) @@ -20,31 +20,27 @@ logger := workflow.GetLogger(ctx) logger.Info("Platform workflow started", "platform", input) - var path string + var workspace string if err := workflow.ExecuteActivity( workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ StartToCloseTimeout: 1 * time.Minute, - RetryPolicy: &temporal.RetryPolicy{ - MaximumAttempts: 3, - }, }), activities.Clone, input.Url, input.Revision, - ).Get(ctx, &path); err != nil { + ).Get(ctx, &workspace); err != nil { return err } + + defer os.RemoveAll(workspace) var pushResult *activities.PushResult if err := workflow.ExecuteActivity( workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ - StartToCloseTimeout: 5 * time.Minute, - RetryPolicy: &temporal.RetryPolicy{ - MaximumAttempts: 2, - }, + StartToCloseTimeout: 1 * time.Minute, }), activities.PushManifests, - path+"/platform/"+input.Cluster, + workspace+"/platform/"+input.Cluster, input.Registry+"/platform:"+input.Cluster, ).Get(ctx, &pushResult); err != nil { return err