@@ -28,134 +28,141 @@ import (
2828
2929const MinimumAllowedVersion = "2.0.0"
3030
31- func SelectDevFilesFromTypes (path string , devFileTypes []model.DevFileType ) ([]int , error ) {
31+ // DEPRECATION WARNING: This function is deprecated, please use devfile_recognizer.MatchDevfiles
32+ // instead.
33+ // func SelectDevFilesFromTypes: Returns a list of devfiles matched for the given application
34+ func SelectDevFilesFromTypes (path string , devfileTypes []model.DevfileType ) ([]int , error ) {
3235 alizerLogger := utils .GetOrCreateLogger ()
3336 ctx := context .Background ()
3437 alizerLogger .V (0 ).Info ("Applying component detection to match a devfile" )
35- devFilesIndexes := selectDevFilesFromComponentsDetectedInPath (path , devFileTypes )
36- if len (devFilesIndexes ) > 0 {
37- alizerLogger .V (0 ).Info (fmt .Sprintf ("Found %d potential matches" , len (devFilesIndexes )))
38- return devFilesIndexes , nil
38+ devfilesIndexes := selectDevfilesFromComponentsDetectedInPath (path , devfileTypes )
39+ if len (devfilesIndexes ) > 0 {
40+ alizerLogger .V (0 ).Info (fmt .Sprintf ("Found %d potential matches" , len (devfilesIndexes )))
41+ return devfilesIndexes , nil
3942 }
4043 alizerLogger .V (0 ).Info ("No components found, applying language analysis for devfile matching" )
4144 languages , err := analyze (path , & ctx )
4245 if err != nil {
4346 return []int {}, err
4447 }
45- devfile , err := SelectDevFileUsingLanguagesFromTypes (languages , devFileTypes )
48+ devfile , err := SelectDevfileUsingLanguagesFromTypes (languages , devfileTypes )
4649 if err != nil {
4750 return []int {}, errors .New ("No valid devfile found for project in " + path )
4851 }
4952 return []int {devfile }, nil
5053}
5154
52- func selectDevFilesFromComponentsDetectedInPath (path string , devFileTypes []model.DevFileType ) []int {
55+ func selectDevfilesFromComponentsDetectedInPath (path string , devfileTypes []model.DevfileType ) []int {
5356 components , _ := DetectComponentsInRoot (path )
54- devFilesIndexes := selectDevFilesFromComponents (components , devFileTypes )
55- if len (devFilesIndexes ) > 0 {
56- return devFilesIndexes
57+ devfilesIndexes := selectDevfilesFromComponents (components , devfileTypes )
58+ if len (devfilesIndexes ) > 0 {
59+ return devfilesIndexes
5760 }
5861
5962 components , _ = DetectComponents (path )
60- return selectDevFilesFromComponents (components , devFileTypes )
63+ return selectDevfilesFromComponents (components , devfileTypes )
6164}
6265
63- func selectDevFilesFromComponents (components []model.Component , devFileTypes []model.DevFileType ) []int {
64- var devFilesIndexes []int
66+ func selectDevfilesFromComponents (components []model.Component , devfileTypes []model.DevfileType ) []int {
67+ var devfilesIndexes []int
6568 for _ , component := range components {
66- devFiles , err := selectDevFilesByLanguage (component .Languages [0 ], devFileTypes )
69+ devfiles , err := selectDevfilesByLanguage (component .Languages [0 ], devfileTypes )
6770 if err == nil {
68- devFilesIndexes = append (devFilesIndexes , devFiles ... )
71+ devfilesIndexes = append (devfilesIndexes , devfiles ... )
6972 }
7073 }
71- return devFilesIndexes
74+ return devfilesIndexes
7275}
7376
74- func SelectDevFileFromTypes (path string , devFileTypes []model.DevFileType ) (int , error ) {
75- devfiles , err := SelectDevFilesFromTypes (path , devFileTypes )
77+ // DEPRECATION WARNING: This function is deprecated, please use devfile_recognizer.MatchDevfiles
78+ // instead.
79+ // func SelectDevFileFromTypes: Returns the first devfile from the list of devfiles returned
80+ // from SelectDevFilesFromTypes func. It also returns an error if exists.
81+ func SelectDevFileFromTypes (path string , devfileTypes []model.DevfileType ) (int , error ) {
82+ devfiles , err := SelectDevFilesFromTypes (path , devfileTypes )
7683 if err != nil {
7784 return - 1 , err
7885 }
7986 return devfiles [0 ], nil
8087}
8188
82- func SelectDevFilesUsingLanguagesFromTypes (languages []model.Language , devFileTypes []model.DevFileType ) ([]int , error ) {
83- var devFilesIndexes []int
89+ func SelectDevfilesUsingLanguagesFromTypes (languages []model.Language , devfileTypes []model.DevfileType ) ([]int , error ) {
90+ var devfilesIndexes []int
8491 alizerLogger := utils .GetOrCreateLogger ()
8592 alizerLogger .V (1 ).Info ("Searching potential matches from detected languages" )
8693 for _ , language := range languages {
8794 alizerLogger .V (1 ).Info (fmt .Sprintf ("Accessing %s language" , language .Name ))
88- devFiles , err := selectDevFilesByLanguage (language , devFileTypes )
95+ devfiles , err := selectDevfilesByLanguage (language , devfileTypes )
8996 if err == nil {
90- alizerLogger .V (1 ).Info (fmt .Sprintf ("Found %d potential matches for language %s" , len (devFiles ), language .Name ))
91- devFilesIndexes = append (devFilesIndexes , devFiles ... )
97+ alizerLogger .V (1 ).Info (fmt .Sprintf ("Found %d potential matches for language %s" , len (devfiles ), language .Name ))
98+ devfilesIndexes = append (devfilesIndexes , devfiles ... )
9299 }
93100 }
94- if len (devFilesIndexes ) > 0 {
95- return devFilesIndexes , nil
101+ if len (devfilesIndexes ) > 0 {
102+ return devfilesIndexes , nil
96103 }
97104 return []int {}, errors .New ("no valid devfile found by using those languages" )
98105}
99106
100- func SelectDevFileUsingLanguagesFromTypes (languages []model.Language , devFileTypes []model.DevFileType ) (int , error ) {
101- devFilesIndexes , err := SelectDevFilesUsingLanguagesFromTypes (languages , devFileTypes )
107+ func SelectDevfileUsingLanguagesFromTypes (languages []model.Language , devfileTypes []model.DevfileType ) (int , error ) {
108+ devfilesIndexes , err := SelectDevfilesUsingLanguagesFromTypes (languages , devfileTypes )
102109 if err != nil {
103110 return - 1 , err
104111 }
105- return devFilesIndexes [0 ], nil
112+ return devfilesIndexes [0 ], nil
106113}
107114
108- func MatchDevfiles (path string , url string , filter model.DevfileFilter ) ([]model.DevFileType , error ) {
115+ func MatchDevfiles (path string , url string , filter model.DevfileFilter ) ([]model.DevfileType , error ) {
109116 alizerLogger := utils .GetOrCreateLogger ()
110117 alizerLogger .V (0 ).Info ("Starting devfile matching" )
111118 alizerLogger .V (1 ).Info (fmt .Sprintf ("Downloading devfiles from registry %s" , url ))
112- devFileTypesFromRegistry , err := DownloadDevFileTypesFromRegistry (url , filter )
119+ devfileTypesFromRegistry , err := DownloadDevfileTypesFromRegistry (url , filter )
113120 if err != nil {
114- return []model.DevFileType {}, err
121+ return []model.DevfileType {}, err
115122 }
116123
117- return selectDevfiles (path , devFileTypesFromRegistry )
124+ return selectDevfiles (path , devfileTypesFromRegistry )
118125}
119126
120- func SelectDevFilesFromRegistry (path string , url string ) ([]model.DevFileType , error ) {
127+ func SelectDevfilesFromRegistry (path string , url string ) ([]model.DevfileType , error ) {
121128 alizerLogger := utils .GetOrCreateLogger ()
122129 alizerLogger .V (0 ).Info ("Starting devfile matching" )
123130 alizerLogger .V (1 ).Info (fmt .Sprintf ("Downloading devfiles from registry %s" , url ))
124- devFileTypesFromRegistry , err := DownloadDevFileTypesFromRegistry (url , model.DevfileFilter {MinSchemaVersion : "" , MaxSchemaVersion : "" })
131+ devfileTypesFromRegistry , err := DownloadDevfileTypesFromRegistry (url , model.DevfileFilter {MinSchemaVersion : "" , MaxSchemaVersion : "" })
125132 if err != nil {
126- return []model.DevFileType {}, err
133+ return []model.DevfileType {}, err
127134 }
128135
129- return selectDevfiles (path , devFileTypesFromRegistry )
136+ return selectDevfiles (path , devfileTypesFromRegistry )
130137}
131138
132139// selectDevfiles is exposed as global var in the purpose of mocking tests
133- var selectDevfiles = func (path string , devFileTypesFromRegistry []model.DevFileType ) ([]model.DevFileType , error ) {
134- indexes , err := SelectDevFilesFromTypes (path , devFileTypesFromRegistry )
140+ var selectDevfiles = func (path string , devfileTypesFromRegistry []model.DevfileType ) ([]model.DevfileType , error ) {
141+ indexes , err := SelectDevFilesFromTypes (path , devfileTypesFromRegistry )
135142 if err != nil {
136- return []model.DevFileType {}, err
143+ return []model.DevfileType {}, err
137144 }
138145
139- var devFileTypes []model.DevFileType
146+ var devfileTypes []model.DevfileType
140147 for _ , index := range indexes {
141- devFileTypes = append (devFileTypes , devFileTypesFromRegistry [index ])
148+ devfileTypes = append (devfileTypes , devfileTypesFromRegistry [index ])
142149 }
143150
144- return devFileTypes , nil
151+ return devfileTypes , nil
145152
146153}
147154
148- func SelectDevFileFromRegistry (path string , url string ) (model.DevFileType , error ) {
149- devFileTypes , err := DownloadDevFileTypesFromRegistry (url , model.DevfileFilter {MinSchemaVersion : "" , MaxSchemaVersion : "" })
155+ func SelectDevfileFromRegistry (path string , url string ) (model.DevfileType , error ) {
156+ devfileTypes , err := DownloadDevfileTypesFromRegistry (url , model.DevfileFilter {MinSchemaVersion : "" , MaxSchemaVersion : "" })
150157 if err != nil {
151- return model.DevFileType {}, err
158+ return model.DevfileType {}, err
152159 }
153160
154- index , err := SelectDevFileFromTypes (path , devFileTypes )
161+ index , err := SelectDevFileFromTypes (path , devfileTypes )
155162 if err != nil {
156- return model.DevFileType {}, err
163+ return model.DevfileType {}, err
157164 }
158- return devFileTypes [index ], nil
165+ return devfileTypes [index ], nil
159166}
160167
161168func GetUrlWithVersions (url , minSchemaVersion , maxSchemaVersion string ) (string , error ) {
@@ -204,8 +211,8 @@ func GetUrlWithVersions(url, minSchemaVersion, maxSchemaVersion string) (string,
204211 }
205212}
206213
207- // DownloadDevFileTypesFromRegistry is exposed as a global variable for the purpose of running mock tests
208- var DownloadDevFileTypesFromRegistry = func (url string , filter model.DevfileFilter ) ([]model.DevFileType , error ) {
214+ // DownloadDevfileTypesFromRegistry is exposed as a global variable for the purpose of running mock tests
215+ var DownloadDevfileTypesFromRegistry = func (url string , filter model.DevfileFilter ) ([]model.DevfileType , error ) {
209216 url = adaptUrl (url )
210217 tmpUrl := appendIndexPath (url )
211218 url , err := GetUrlWithVersions (tmpUrl , filter .MinSchemaVersion , filter .MaxSchemaVersion )
@@ -215,7 +222,7 @@ var DownloadDevFileTypesFromRegistry = func(url string, filter model.DevfileFilt
215222 // This value is set by the user in order to configure the registry
216223 resp , err := http .Get (url ) // #nosec G107
217224 if err != nil {
218- return []model.DevFileType {}, err
225+ return []model.DevfileType {}, err
219226 }
220227 defer func () error {
221228 if err := resp .Body .Close (); err != nil {
@@ -226,21 +233,21 @@ var DownloadDevFileTypesFromRegistry = func(url string, filter model.DevfileFilt
226233
227234 // Check server response
228235 if resp .StatusCode != http .StatusOK {
229- return []model.DevFileType {}, errors .New ("unable to fetch devfiles from the registry" )
236+ return []model.DevfileType {}, errors .New ("unable to fetch devfiles from the registry" )
230237 }
231238
232239 body , err2 := ioutil .ReadAll (resp .Body )
233240 if err2 != nil {
234- return []model.DevFileType {}, errors .New ("unable to fetch devfiles from the registry" )
241+ return []model.DevfileType {}, errors .New ("unable to fetch devfiles from the registry" )
235242 }
236243
237- var devFileTypes []model.DevFileType
238- err = json .Unmarshal (body , & devFileTypes )
244+ var devfileTypes []model.DevfileType
245+ err = json .Unmarshal (body , & devfileTypes )
239246 if err != nil {
240- return []model.DevFileType {}, errors .New ("unable to fetch devfiles from the registry" )
247+ return []model.DevfileType {}, errors .New ("unable to fetch devfiles from the registry" )
241248 }
242249
243- return devFileTypes , nil
250+ return devfileTypes , nil
244251}
245252
246253func appendIndexPath (url string ) string {
@@ -263,7 +270,7 @@ func adaptUrl(url string) string {
263270 return url
264271}
265272
266- // selectDevFilesByLanguage detects devfiles that fit best with a project.
273+ // selectDevfilesByLanguage detects devfiles that fit best with a project.
267274//
268275// Performs a search in two steps looping through all devfiles available.
269276// When a framework is detected, this is stored in a map but still not saved. A check is made eventually as there could be that a future or
@@ -272,21 +279,21 @@ func adaptUrl(url string) string {
272279//
273280// At the end, if some framework is supported by some devfile, they are returned. Otherwise, Alizer was not able to find any
274281// specific devfile for the frameworks detected and returned the devfiles which got the largest score.
275- func selectDevFilesByLanguage (language model.Language , devFileTypes []model.DevFileType ) ([]int , error ) {
276- var devFileIndexes []int
277- frameworkPerDevFile := make (map [string ]model.DevFileScore )
282+ func selectDevfilesByLanguage (language model.Language , devfileTypes []model.DevfileType ) ([]int , error ) {
283+ var devfileIndexes []int
284+ frameworkPerDevfile := make (map [string ]model.DevfileScore )
278285 scoreTarget := 0
279286
280- for index , devFile := range devFileTypes {
287+ for index , devfile := range devfileTypes {
281288 score := 0
282289 frameworkPerDevfileTmp := make (map [string ]interface {})
283- if strings .EqualFold (devFile .Language , language .Name ) || matches (language .Aliases , devFile .Language ) != "" {
290+ if strings .EqualFold (devfile .Language , language .Name ) || matches (language .Aliases , devfile .Language ) != "" {
284291 score ++
285- if frw := matchesFormatted (language .Frameworks , devFile .ProjectType ); frw != "" {
292+ if frw := matchesFormatted (language .Frameworks , devfile .ProjectType ); frw != "" {
286293 frameworkPerDevfileTmp [frw ] = nil
287294 score += utils .FRAMEWORK_WEIGHT
288295 }
289- for _ , tag := range devFile .Tags {
296+ for _ , tag := range devfile .Tags {
290297 if frw := matchesFormatted (language .Frameworks , tag ); frw != "" {
291298 frameworkPerDevfileTmp [frw ] = nil
292299 score += utils .FRAMEWORK_WEIGHT
@@ -297,37 +304,37 @@ func selectDevFilesByLanguage(language model.Language, devFileTypes []model.DevF
297304 }
298305
299306 for framework := range frameworkPerDevfileTmp {
300- devFileObj := frameworkPerDevFile [framework ]
301- if score > devFileObj .Score {
302- frameworkPerDevFile [framework ] = model.DevFileScore {
303- DevFileIndex : index ,
307+ devfileObj := frameworkPerDevfile [framework ]
308+ if score > devfileObj .Score {
309+ frameworkPerDevfile [framework ] = model.DevfileScore {
310+ DevfileIndex : index ,
304311 Score : score ,
305312 }
306313 }
307314 }
308315
309- if len (frameworkPerDevFile ) == 0 {
316+ if len (frameworkPerDevfile ) == 0 {
310317 if score == scoreTarget {
311- devFileIndexes = append (devFileIndexes , index )
318+ devfileIndexes = append (devfileIndexes , index )
312319 } else if score > scoreTarget {
313320 scoreTarget = score
314- devFileIndexes = []int {index }
321+ devfileIndexes = []int {index }
315322 }
316323 }
317324 }
318325 }
319326
320- if len (frameworkPerDevFile ) > 0 {
321- devFileIndexes = []int {}
322- for _ , val := range frameworkPerDevFile {
323- devFileIndexes = append (devFileIndexes , val .DevFileIndex )
327+ if len (frameworkPerDevfile ) > 0 {
328+ devfileIndexes = []int {}
329+ for _ , val := range frameworkPerDevfile {
330+ devfileIndexes = append (devfileIndexes , val .DevfileIndex )
324331 }
325332 }
326333
327- if len (devFileIndexes ) == 0 {
328- return devFileIndexes , errors .New ("No valid devfile found for current language " + language .Name )
334+ if len (devfileIndexes ) == 0 {
335+ return devfileIndexes , errors .New ("No valid devfile found for current language " + language .Name )
329336 }
330- return devFileIndexes , nil
337+ return devfileIndexes , nil
331338}
332339
333340func matchesFormatted (values []string , valueToFind string ) string {
0 commit comments