package config_handler import ( "context" "encoding/json" "strings" "git.icechen.cn/pkg/drone_plugin/git" "github.com/drone/drone-go/drone" "github.com/drone/drone-go/plugin/config" "github.com/sirupsen/logrus" ) // New returns a new conversion plugin. func New() config.Plugin { return &plugin{} } type plugin struct{} func (p *plugin) Find(ctx context.Context, req *config.Request) (*drone.Config, error) { resp, err := json.Marshal(req) if err != nil { logrus.Error(err) return nil, err } logrus.Infof("%s", string(resp)) // 1. 获取原始配置文件信息 cfg, err := getRealConfig(getGitClient(req)) if err != nil { logrus.Error(err) return nil, err } // 2. 非 monorepo 的直接返回 if cfg.Type != TypeMonorepo { // 返回 nil 按照 204 处理 return nil, nil } // 3. 获取提交文件树 modifiedFileList, err := getGitClient(req).GetCommitModifiedFileList() if err != nil { logrus.Error(err) return nil, err } // 4. 根据文件树以及原始配置文件的信息,组装需要构建的服务的ci信息 // 4.1 api modifiedApiList := getModifiedApi(cfg.Api, modifiedFileList) _ = modifiedApiList // 4.2 service // 5. 组装所有ci信息并输出 return nil, nil } func getGitClient(req *config.Request) git.Client { return git.New(req.Repo.Namespace, req.Repo.Name, req.Build.After, req.Repo.Config) } func getModifiedApi(api []Api, modifiedFileList []string) []Api { ret := make([]Api, 0) tempIndex := NewSet() for i, a := range api { for _, file := range modifiedFileList { if strings.HasSuffix(file, a.Root) { tempIndex.Add(i) } } } for _, i := range tempIndex.ToSlice() { ret = append(ret, api[i]) } return ret }