diff --git a/pkg/microservice/aslan/core/plugin/handler/lark.go b/pkg/microservice/aslan/core/plugin/handler/lark.go index a86d4d1970..ff5f65bfd3 100644 --- a/pkg/microservice/aslan/core/plugin/handler/lark.go +++ b/pkg/microservice/aslan/core/plugin/handler/lark.go @@ -654,4 +654,3 @@ func CheckLarkAuth(c *gin.Context, ctx *internalhandler.Context) (err error) { return nil } - diff --git a/pkg/microservice/aslan/core/plugin/service/lark.go b/pkg/microservice/aslan/core/plugin/service/lark.go index 5d9305e839..894b68a6c4 100644 --- a/pkg/microservice/aslan/core/plugin/service/lark.go +++ b/pkg/microservice/aslan/core/plugin/service/lark.go @@ -147,10 +147,20 @@ type UpdateLarkWorkflowConfigRequest struct { } func UpdateLarkWorkflowConfig(ctx *internalhandler.Context, req *UpdateLarkWorkflowConfigRequest) error { + validatedWorkflows := sets.New[string]() updateWorkitemTypeKeySet := sets.Set[string]{} for _, config := range req.Configs { config.WorkspaceID = req.WorkspaceID updateWorkitemTypeKeySet.Insert(config.WorkItemTypeKey) + for _, node := range config.Nodes { + if node == nil || node.WorkflowName == "" || validatedWorkflows.Has(node.WorkflowName) { + continue + } + if err := validateWorkflowForLarkPlugin(node.WorkflowName); err != nil { + return err + } + validatedWorkflows.Insert(node.WorkflowName) + } } origConfigs, err := mongodb.NewLarkPluginWorkflowConfigColl().Get(req.WorkspaceID) @@ -713,6 +723,46 @@ func ListLarkWorkitemWorkflowTask(ctx *internalhandler.Context, workItemTypeKey, EnvAlias: commonutil.GetEnvAlias(commonutil.GetEnvInfoNoErr(task.ProjectName, deploy.Env, envMap)), } updateDeployEnvs(env) + case aslanconfig.JobZadigVMDeploy: + deploy := new(commonmodels.ZadigVMDeployJobSpec) + if err := commonmodels.IToi(job.Spec, deploy); err != nil { + return nil, fmt.Errorf("failed to convert job spec to vm deploy job spec: %w", err) + } + + for _, svc := range deploy.ServiceAndVMDeploys { + sm := &commonmodels.ServiceWithModule{ + ServiceName: svc.ServiceName, + ServiceModule: svc.ServiceModule, + } + updateServiceModules(sm) + + for _, repo := range svc.Repos { + updateRepos(repo) + } + } + env := &commonmodels.WorkflowEnv{ + EnvName: deploy.Env, + Production: deploy.Production, + EnvAlias: commonutil.GetEnvAlias(commonutil.GetEnvInfoNoErr(task.ProjectName, deploy.Env, envMap)), + } + updateDeployEnvs(env) + case aslanconfig.JobZadigTesting: + test := new(commonmodels.ZadigTestingJobSpec) + if err := commonmodels.IToi(job.Spec, test); err != nil { + return nil, fmt.Errorf("failed to convert job spec to test job spec: %w", err) + } + + for _, serviceAndTest := range test.ServiceAndTests { + sm := &commonmodels.ServiceWithModule{ + ServiceName: serviceAndTest.ServiceName, + ServiceModule: serviceAndTest.ServiceModule, + } + updateServiceModules(sm) + + for _, repo := range serviceAndTest.Repos { + updateRepos(repo) + } + } } } } @@ -752,6 +802,27 @@ func ListLarkWorkitemWorkflowTask(ctx *internalhandler.Context, workItemTypeKey, imageSet.Insert(serviceAndImage.Image) images = append(images, serviceAndImage.Image) } + case string(aslanconfig.JobZadigVMDeploy): + taskSpec := new(commonmodels.JobTaskFreestyleSpec) + if err := commonmodels.IToi(jobTask.Spec, taskSpec); err != nil { + return nil, fmt.Errorf("failed to convert job spec to vm deploy job spec: %w", err) + } + + image := "" + for _, env := range taskSpec.Properties.Envs { + if env.Key == "IMAGE" { + image = env.Value + break + } + } + + if jobTask.Status == aslanconfig.StatusPassed && image != "" && !strings.HasPrefix(image, "{{.") && !strings.Contains(image, "}}") { + if imageSet.Has(image) { + continue + } + imageSet.Insert(image) + images = append(images, image) + } } } } diff --git a/pkg/microservice/aslan/core/plugin/service/utils.go b/pkg/microservice/aslan/core/plugin/service/utils.go index e3818b25bd..92cf00ce12 100644 --- a/pkg/microservice/aslan/core/plugin/service/utils.go +++ b/pkg/microservice/aslan/core/plugin/service/utils.go @@ -44,8 +44,7 @@ func validateWorkflowForLarkPlugin(workflowName string) error { if err != nil { return fmt.Errorf("failed to find workflow %s: %w", workflowName, err) } - - var buildCount, deployCount, testCount, meegoCount int + var buildCount, deployCount, testCount, apolloCount, meegoCount int buildIdx, deployIdx := -1, -1 jobIdx := 0 @@ -55,15 +54,17 @@ func validateWorkflowForLarkPlugin(workflowName string) error { case aslanconfig.JobZadigBuild: buildCount++ buildIdx = jobIdx - case aslanconfig.JobZadigDeploy: + case aslanconfig.JobZadigDeploy, aslanconfig.JobZadigVMDeploy: deployCount++ deployIdx = jobIdx case aslanconfig.JobZadigTesting: testCount++ + case aslanconfig.JobApollo: + apolloCount++ case aslanconfig.JobMeegoTransition: meegoCount++ default: - return fmt.Errorf("workflow %s contains unsupported job type %s, only build, deploy, and test jobs are allowed", workflowName, job.JobType) + return fmt.Errorf("workflow %s contains unsupported job type %s, only build, kubernetes deploy, host deploy, apollo, meego transition, and test jobs are allowed", workflowName, job.JobType) } jobIdx++ }