From 5d7bb677ba7ac854c61b78247432bfd8da55e920 Mon Sep 17 00:00:00 2001 From: Tedi Mitiku Date: Fri, 7 Jun 2024 10:42:35 -0400 Subject: [PATCH] feat: add optional names to tasks (#2477) ## Description [ ![Screen Shot 2024-06-06 at 5 22 01 PM](https://github.com/kurtosis-tech/kurtosis/assets/46531991/7f2bef3b-bf78-48c1-8e55-2cbb0991ecc9) ](url) ## Is this change user facing? YES --- .../kurtosis_instruction/tasks/run_python.go | 13 ++++++++++--- .../kurtosis_instruction/tasks/run_sh.go | 18 +++++++++++++----- .../kurtosis_instruction/tasks/tasks_shared.go | 15 +++++++++++++++ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_python.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_python.go index 229b95c4d3..cd117808ac 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_python.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_python.go @@ -25,7 +25,6 @@ import ( "github.com/kurtosis-tech/kurtosis/core/server/api_container/server/startosis_engine/startosis_packages" "github.com/kurtosis-tech/kurtosis/core/server/api_container/server/startosis_engine/startosis_validator" "github.com/kurtosis-tech/stacktrace" - "github.com/xtgo/uuid" "go.starlark.net/starlark" "go.starlark.net/starlarkstruct" "strings" @@ -60,6 +59,11 @@ func NewRunPythonService( Name: RunPythonBuiltinName, Arguments: []*builtin_argument.BuiltinArgument{ + { + Name: TaskNameArgName, + IsOptional: true, + ZeroValueProvider: builtin_argument.ZeroValueProvider[starlark.String], + }, { Name: RunArgName, IsOptional: false, @@ -163,8 +167,11 @@ type RunPythonCapabilities struct { } func (builtin *RunPythonCapabilities) Interpret(locatorOfModuleInWhichThisBuiltinIsBeingCalled string, arguments *builtin_argument.ArgumentValuesSet) (starlark.Value, *startosis_errors.InterpretationError) { - randomUuid := uuid.NewRandom() - builtin.name = fmt.Sprintf("task-%v", randomUuid.String()) + taskName, err := getTaskNameFromArgs(arguments) + if err != nil { + return nil, startosis_errors.WrapWithInterpretationError(err, "Unable to get task name from args.") + } + builtin.name = taskName pythonScript, err := builtin_argument.ExtractArgumentValue[starlark.String](arguments, RunArgName) if err != nil { diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_sh.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_sh.go index 3fd2fa9e96..feacacf61d 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_sh.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/run_sh.go @@ -24,7 +24,6 @@ import ( "github.com/kurtosis-tech/kurtosis/core/server/api_container/server/startosis_engine/startosis_packages" "github.com/kurtosis-tech/kurtosis/core/server/api_container/server/startosis_engine/startosis_validator" "github.com/kurtosis-tech/stacktrace" - "github.com/xtgo/uuid" "go.starlark.net/starlark" "go.starlark.net/starlarkstruct" ) @@ -49,6 +48,11 @@ func NewRunShService( Name: RunShBuiltinName, Arguments: []*builtin_argument.BuiltinArgument{ + { + Name: TaskNameArgName, + IsOptional: true, + ZeroValueProvider: builtin_argument.ZeroValueProvider[starlark.String], + }, { Name: RunArgName, IsOptional: false, @@ -141,6 +145,12 @@ type RunShCapabilities struct { } func (builtin *RunShCapabilities) Interpret(locatorOfModuleInWhichThisBuiltinIsBeingCalled string, arguments *builtin_argument.ArgumentValuesSet) (starlark.Value, *startosis_errors.InterpretationError) { + taskName, err := getTaskNameFromArgs(arguments) + if err != nil { + return nil, startosis_errors.WrapWithInterpretationError(err, "Unable to get task name from args.") + } + builtin.name = taskName + runCommand, err := builtin_argument.ExtractArgumentValue[starlark.String](arguments, RunArgName) if err != nil { return nil, startosis_errors.WrapWithInterpretationError(err, "Unable to extract value for '%s' argument", RunArgName) @@ -225,8 +235,6 @@ func (builtin *RunShCapabilities) Interpret(locatorOfModuleInWhichThisBuiltinIsB return nil, startosis_errors.NewInterpretationError("An error occurred while generating UUID for future reference for %v instruction", RunShBuiltinName) } builtin.resultUuid = resultUuid - randomUuid := uuid.NewRandom() - builtin.name = fmt.Sprintf("task-%v", randomUuid.String()) defaultDescription := runningShScriptPrefix if len(builtin.run) < shScriptPrintCharLimit { @@ -253,7 +261,7 @@ func (builtin *RunShCapabilities) Validate(_ *builtin_argument.ArgumentValuesSet // Make task as its own entity instead of currently shown under services func (builtin *RunShCapabilities) Execute(ctx context.Context, _ *builtin_argument.ArgumentValuesSet) (string, error) { // swap env vars with their runtime value - serviceConfigWithReplacedEnvVars, err := repacaeMagicStringsInEnvVars(builtin.runtimeValueStore, builtin.serviceConfig) + serviceConfigWithReplacedEnvVars, err := replaceMagicStringsInEnvVars(builtin.runtimeValueStore, builtin.serviceConfig) if err != nil { return "", stacktrace.Propagate(err, "An error occurred replacing magic strings in env vars.") } @@ -343,7 +351,7 @@ func getCommandToRun(builtin *RunShCapabilities) (string, error) { return maybeSubCommandWithRuntimeValues, nil } -func repacaeMagicStringsInEnvVars(runtimeValueStore *runtime_value_store.RuntimeValueStore, serviceConfig *service.ServiceConfig) ( +func replaceMagicStringsInEnvVars(runtimeValueStore *runtime_value_store.RuntimeValueStore, serviceConfig *service.ServiceConfig) ( *service.ServiceConfig, error) { var envVars map[string]string diff --git a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/tasks_shared.go b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/tasks_shared.go index 9debcbaa29..379f67e68c 100644 --- a/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/tasks_shared.go +++ b/core/server/api_container/server/startosis_engine/kurtosis_instruction/tasks/tasks_shared.go @@ -7,6 +7,7 @@ import ( "github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface/objects/image_download_mode" "github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface/objects/image_registry_spec" "github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface/objects/nix_build_spec" + "github.com/xtgo/uuid" "reflect" "strings" "time" @@ -32,6 +33,7 @@ import ( // shared constants const ( ImageNameArgName = "image" + TaskNameArgName = "name" RunArgName = "run" StoreFilesArgName = "store" WaitArgName = "wait" @@ -312,3 +314,16 @@ func extractEnvVarsIfDefined(arguments *builtin_argument.ArgumentValuesSet) (*ma } return &envVars, nil } + +func getTaskNameFromArgs(arguments *builtin_argument.ArgumentValuesSet) (string, error) { + if arguments.IsSet(TaskNameArgName) { + taskName, err := builtin_argument.ExtractArgumentValue[starlark.String](arguments, TaskNameArgName) + if err != nil { + return "", startosis_errors.WrapWithInterpretationError(err, "Unable to extract value for '%s' argument", TaskNameArgName) + } + return taskName.GoString(), nil + } else { + randomUuid := uuid.NewRandom() + return fmt.Sprintf("task-%v", randomUuid.String()), nil + } +}