RunPluginSubTasks FIXME ...
( ctx gocontext.Context, basicRes context.BasicRes, task *models.Task, pluginTask plugin.PluginTask, progress chan plugin.RunningProgress, syncPolicy *models.SyncPolicy, )
| 174 | |
| 175 | // RunPluginSubTasks FIXME ... |
| 176 | func RunPluginSubTasks( |
| 177 | ctx gocontext.Context, |
| 178 | basicRes context.BasicRes, |
| 179 | task *models.Task, |
| 180 | pluginTask plugin.PluginTask, |
| 181 | progress chan plugin.RunningProgress, |
| 182 | syncPolicy *models.SyncPolicy, |
| 183 | ) errors.Error { |
| 184 | logger := basicRes.GetLogger() |
| 185 | logger.Info("start plugin") |
| 186 | // find out all possible subtasks this plugin can offer |
| 187 | subtaskMetas := pluginTask.SubTaskMetas() |
| 188 | subtasksFlag := make(map[string]bool) |
| 189 | for _, subtaskMeta := range subtaskMetas { |
| 190 | subtasksFlag[subtaskMeta.Name] = subtaskMeta.EnabledByDefault |
| 191 | } |
| 192 | /* subtasksFlag example |
| 193 | subtasksFlag := map[string]bool{ |
| 194 | "collectProject": true, |
| 195 | "convertCommits": true, |
| 196 | ... |
| 197 | } |
| 198 | */ |
| 199 | |
| 200 | // user specifies what subtasks to run |
| 201 | if len(task.Subtasks) != 0 { |
| 202 | // decode user specified subtasks |
| 203 | var specifiedTasks []string |
| 204 | err := api.Decode(task.Subtasks, &specifiedTasks, nil) |
| 205 | if err != nil { |
| 206 | return errors.Default.Wrap(err, "subtasks could not be decoded") |
| 207 | } |
| 208 | if len(specifiedTasks) > 0 { |
| 209 | // first, disable all subtasks |
| 210 | for task := range subtasksFlag { |
| 211 | subtasksFlag[task] = false |
| 212 | } |
| 213 | // second, check specified subtasks is valid and enable them if so |
| 214 | for _, task := range specifiedTasks { |
| 215 | if _, ok := subtasksFlag[task]; ok { |
| 216 | subtasksFlag[task] = true |
| 217 | } else { |
| 218 | return errors.Default.New(fmt.Sprintf("subtask %s does not exist", task)) |
| 219 | } |
| 220 | } |
| 221 | } |
| 222 | } |
| 223 | |
| 224 | // 1. make sure `Collect` subtasks skip if `SkipCollectors` is true |
| 225 | // 2. make sure `Required` subtasks are always enabled |
| 226 | for _, subtaskMeta := range subtaskMetas { |
| 227 | if syncPolicy != nil && syncPolicy.SkipCollectors && strings.Contains(strings.ToLower(subtaskMeta.Name), "collect") { |
| 228 | subtasksFlag[subtaskMeta.Name] = false |
| 229 | } |
| 230 | if subtaskMeta.Required { |
| 231 | subtasksFlag[subtaskMeta.Name] = true |
| 232 | } |
| 233 | } |
no test coverage detected