@@ -28,134 +28,141 @@ import (
28
28
29
29
const MinimumAllowedVersion = "2.0.0"
30
30
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 ) {
32
35
alizerLogger := utils .GetOrCreateLogger ()
33
36
ctx := context .Background ()
34
37
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
39
42
}
40
43
alizerLogger .V (0 ).Info ("No components found, applying language analysis for devfile matching" )
41
44
languages , err := analyze (path , & ctx )
42
45
if err != nil {
43
46
return []int {}, err
44
47
}
45
- devfile , err := SelectDevFileUsingLanguagesFromTypes (languages , devFileTypes )
48
+ devfile , err := SelectDevfileUsingLanguagesFromTypes (languages , devfileTypes )
46
49
if err != nil {
47
50
return []int {}, errors .New ("No valid devfile found for project in " + path )
48
51
}
49
52
return []int {devfile }, nil
50
53
}
51
54
52
- func selectDevFilesFromComponentsDetectedInPath (path string , devFileTypes []model.DevFileType ) []int {
55
+ func selectDevfilesFromComponentsDetectedInPath (path string , devfileTypes []model.DevfileType ) []int {
53
56
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
57
60
}
58
61
59
62
components , _ = DetectComponents (path )
60
- return selectDevFilesFromComponents (components , devFileTypes )
63
+ return selectDevfilesFromComponents (components , devfileTypes )
61
64
}
62
65
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
65
68
for _ , component := range components {
66
- devFiles , err := selectDevFilesByLanguage (component .Languages [0 ], devFileTypes )
69
+ devfiles , err := selectDevfilesByLanguage (component .Languages [0 ], devfileTypes )
67
70
if err == nil {
68
- devFilesIndexes = append (devFilesIndexes , devFiles ... )
71
+ devfilesIndexes = append (devfilesIndexes , devfiles ... )
69
72
}
70
73
}
71
- return devFilesIndexes
74
+ return devfilesIndexes
72
75
}
73
76
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 )
76
83
if err != nil {
77
84
return - 1 , err
78
85
}
79
86
return devfiles [0 ], nil
80
87
}
81
88
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
84
91
alizerLogger := utils .GetOrCreateLogger ()
85
92
alizerLogger .V (1 ).Info ("Searching potential matches from detected languages" )
86
93
for _ , language := range languages {
87
94
alizerLogger .V (1 ).Info (fmt .Sprintf ("Accessing %s language" , language .Name ))
88
- devFiles , err := selectDevFilesByLanguage (language , devFileTypes )
95
+ devfiles , err := selectDevfilesByLanguage (language , devfileTypes )
89
96
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 ... )
92
99
}
93
100
}
94
- if len (devFilesIndexes ) > 0 {
95
- return devFilesIndexes , nil
101
+ if len (devfilesIndexes ) > 0 {
102
+ return devfilesIndexes , nil
96
103
}
97
104
return []int {}, errors .New ("no valid devfile found by using those languages" )
98
105
}
99
106
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 )
102
109
if err != nil {
103
110
return - 1 , err
104
111
}
105
- return devFilesIndexes [0 ], nil
112
+ return devfilesIndexes [0 ], nil
106
113
}
107
114
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 ) {
109
116
alizerLogger := utils .GetOrCreateLogger ()
110
117
alizerLogger .V (0 ).Info ("Starting devfile matching" )
111
118
alizerLogger .V (1 ).Info (fmt .Sprintf ("Downloading devfiles from registry %s" , url ))
112
- devFileTypesFromRegistry , err := DownloadDevFileTypesFromRegistry (url , filter )
119
+ devfileTypesFromRegistry , err := DownloadDevfileTypesFromRegistry (url , filter )
113
120
if err != nil {
114
- return []model.DevFileType {}, err
121
+ return []model.DevfileType {}, err
115
122
}
116
123
117
- return selectDevfiles (path , devFileTypesFromRegistry )
124
+ return selectDevfiles (path , devfileTypesFromRegistry )
118
125
}
119
126
120
- func SelectDevFilesFromRegistry (path string , url string ) ([]model.DevFileType , error ) {
127
+ func SelectDevfilesFromRegistry (path string , url string ) ([]model.DevfileType , error ) {
121
128
alizerLogger := utils .GetOrCreateLogger ()
122
129
alizerLogger .V (0 ).Info ("Starting devfile matching" )
123
130
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 : "" })
125
132
if err != nil {
126
- return []model.DevFileType {}, err
133
+ return []model.DevfileType {}, err
127
134
}
128
135
129
- return selectDevfiles (path , devFileTypesFromRegistry )
136
+ return selectDevfiles (path , devfileTypesFromRegistry )
130
137
}
131
138
132
139
// 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 )
135
142
if err != nil {
136
- return []model.DevFileType {}, err
143
+ return []model.DevfileType {}, err
137
144
}
138
145
139
- var devFileTypes []model.DevFileType
146
+ var devfileTypes []model.DevfileType
140
147
for _ , index := range indexes {
141
- devFileTypes = append (devFileTypes , devFileTypesFromRegistry [index ])
148
+ devfileTypes = append (devfileTypes , devfileTypesFromRegistry [index ])
142
149
}
143
150
144
- return devFileTypes , nil
151
+ return devfileTypes , nil
145
152
146
153
}
147
154
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 : "" })
150
157
if err != nil {
151
- return model.DevFileType {}, err
158
+ return model.DevfileType {}, err
152
159
}
153
160
154
- index , err := SelectDevFileFromTypes (path , devFileTypes )
161
+ index , err := SelectDevFileFromTypes (path , devfileTypes )
155
162
if err != nil {
156
- return model.DevFileType {}, err
163
+ return model.DevfileType {}, err
157
164
}
158
- return devFileTypes [index ], nil
165
+ return devfileTypes [index ], nil
159
166
}
160
167
161
168
func GetUrlWithVersions (url , minSchemaVersion , maxSchemaVersion string ) (string , error ) {
@@ -204,8 +211,8 @@ func GetUrlWithVersions(url, minSchemaVersion, maxSchemaVersion string) (string,
204
211
}
205
212
}
206
213
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 ) {
209
216
url = adaptUrl (url )
210
217
tmpUrl := appendIndexPath (url )
211
218
url , err := GetUrlWithVersions (tmpUrl , filter .MinSchemaVersion , filter .MaxSchemaVersion )
@@ -215,7 +222,7 @@ var DownloadDevFileTypesFromRegistry = func(url string, filter model.DevfileFilt
215
222
// This value is set by the user in order to configure the registry
216
223
resp , err := http .Get (url ) // #nosec G107
217
224
if err != nil {
218
- return []model.DevFileType {}, err
225
+ return []model.DevfileType {}, err
219
226
}
220
227
defer func () error {
221
228
if err := resp .Body .Close (); err != nil {
@@ -226,21 +233,21 @@ var DownloadDevFileTypesFromRegistry = func(url string, filter model.DevfileFilt
226
233
227
234
// Check server response
228
235
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" )
230
237
}
231
238
232
239
body , err2 := ioutil .ReadAll (resp .Body )
233
240
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" )
235
242
}
236
243
237
- var devFileTypes []model.DevFileType
238
- err = json .Unmarshal (body , & devFileTypes )
244
+ var devfileTypes []model.DevfileType
245
+ err = json .Unmarshal (body , & devfileTypes )
239
246
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" )
241
248
}
242
249
243
- return devFileTypes , nil
250
+ return devfileTypes , nil
244
251
}
245
252
246
253
func appendIndexPath (url string ) string {
@@ -263,7 +270,7 @@ func adaptUrl(url string) string {
263
270
return url
264
271
}
265
272
266
- // selectDevFilesByLanguage detects devfiles that fit best with a project.
273
+ // selectDevfilesByLanguage detects devfiles that fit best with a project.
267
274
//
268
275
// Performs a search in two steps looping through all devfiles available.
269
276
// 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 {
272
279
//
273
280
// At the end, if some framework is supported by some devfile, they are returned. Otherwise, Alizer was not able to find any
274
281
// 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 )
278
285
scoreTarget := 0
279
286
280
- for index , devFile := range devFileTypes {
287
+ for index , devfile := range devfileTypes {
281
288
score := 0
282
289
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 ) != "" {
284
291
score ++
285
- if frw := matchesFormatted (language .Frameworks , devFile .ProjectType ); frw != "" {
292
+ if frw := matchesFormatted (language .Frameworks , devfile .ProjectType ); frw != "" {
286
293
frameworkPerDevfileTmp [frw ] = nil
287
294
score += utils .FRAMEWORK_WEIGHT
288
295
}
289
- for _ , tag := range devFile .Tags {
296
+ for _ , tag := range devfile .Tags {
290
297
if frw := matchesFormatted (language .Frameworks , tag ); frw != "" {
291
298
frameworkPerDevfileTmp [frw ] = nil
292
299
score += utils .FRAMEWORK_WEIGHT
@@ -297,37 +304,37 @@ func selectDevFilesByLanguage(language model.Language, devFileTypes []model.DevF
297
304
}
298
305
299
306
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 ,
304
311
Score : score ,
305
312
}
306
313
}
307
314
}
308
315
309
- if len (frameworkPerDevFile ) == 0 {
316
+ if len (frameworkPerDevfile ) == 0 {
310
317
if score == scoreTarget {
311
- devFileIndexes = append (devFileIndexes , index )
318
+ devfileIndexes = append (devfileIndexes , index )
312
319
} else if score > scoreTarget {
313
320
scoreTarget = score
314
- devFileIndexes = []int {index }
321
+ devfileIndexes = []int {index }
315
322
}
316
323
}
317
324
}
318
325
}
319
326
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 )
324
331
}
325
332
}
326
333
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 )
329
336
}
330
- return devFileIndexes , nil
337
+ return devfileIndexes , nil
331
338
}
332
339
333
340
func matchesFormatted (values []string , valueToFind string ) string {
0 commit comments