@@ -72,20 +72,25 @@ func createConfigurationFile(tools []tools.Tool) error {
7272
7373func configFileTemplate (tools []tools.Tool ) string {
7474
75- // Default version
75+ // Default versions
7676 eslintVersion := "9.3.0"
77+ trivyVersion := "0.59.1" // Latest stable version
7778
7879 for _ , tool := range tools {
7980 if tool .Uuid == "f8b29663-2cb2-498d-b923-a10c6a8c05cd" {
8081 eslintVersion = tool .Version
8182 }
83+ if tool .Uuid == "2fd7fbe0-33f9-4ab3-ab73-e9b62404e2cb" {
84+ trivyVersion = tool .Version
85+ }
8286 }
8387
8488 return fmt .Sprintf (`runtimes:
85898690tools:
8791 - eslint@%s
88- ` , eslintVersion )
92+ - trivy@%s
93+ ` , eslintVersion , trivyVersion )
8994}
9095
9196func buildRepositoryConfigurationFiles (token string ) error {
@@ -150,7 +155,24 @@ func buildRepositoryConfigurationFiles(token string) error {
150155 _ , err = eslintConfigFile .WriteString (eslintConfigurationString )
151156 if err != nil {
152157 log .Fatal (err )
158+ }
153159
160+ // Create Trivy configuration after processing ESLint
161+ trivyApiConfiguration := extractTrivyConfiguration (apiToolConfigurations )
162+ if trivyApiConfiguration != nil {
163+ // Create trivy.yaml file based on API configuration
164+ err = createTrivyConfigFile (* trivyApiConfiguration )
165+ if err != nil {
166+ log .Fatal (err )
167+ }
168+ fmt .Println ("Trivy configuration created based on Codacy settings" )
169+ } else {
170+ // Create default trivy.yaml if no configuration from API
171+ err = createDefaultTrivyConfigFile ()
172+ if err != nil {
173+ log .Fatal (err )
174+ }
175+ fmt .Println ("Default Trivy configuration created" )
154176 }
155177
156178 return nil
@@ -197,6 +219,20 @@ func extractESLintConfiguration(toolConfigurations []CodacyToolConfiguration) *C
197219 return nil
198220}
199221
222+ // extractTrivyConfiguration extracts Trivy configuration from the Codacy API response
223+ func extractTrivyConfiguration (toolConfigurations []CodacyToolConfiguration ) * CodacyToolConfiguration {
224+ // Trivy internal codacy uuid
225+ const TrivyUUID = "2fd7fbe0-33f9-4ab3-ab73-e9b62404e2cb"
226+
227+ for _ , toolConfiguration := range toolConfigurations {
228+ if toolConfiguration .Uuid == TrivyUUID {
229+ return & toolConfiguration
230+ }
231+ }
232+
233+ return nil
234+ }
235+
200236type CodacyToolConfiguration struct {
201237 Uuid string `json:"uuid"`
202238 IsEnabled bool `json:"isEnabled"`
@@ -212,3 +248,65 @@ type ParameterConfiguration struct {
212248 name string `json:"name"`
213249 value string `json:"value"`
214250}
251+
252+ // createTrivyConfigFile creates a trivy.yaml configuration file based on the API configuration
253+ func createTrivyConfigFile (config CodacyToolConfiguration ) error {
254+ // Convert CodacyToolConfiguration to tools.ToolConfiguration
255+ trivyDomainConfiguration := convertAPIToolConfigurationForTrivy (config )
256+
257+ // Use the shared CreateTrivyConfig function to generate the config content
258+ trivyConfigurationString := tools .CreateTrivyConfig (trivyDomainConfiguration )
259+
260+ // Write to file
261+ return os .WriteFile ("trivy.yaml" , []byte (trivyConfigurationString ), 0644 )
262+ }
263+
264+ // convertAPIToolConfigurationForTrivy converts API tool configuration to domain model for Trivy
265+ func convertAPIToolConfigurationForTrivy (config CodacyToolConfiguration ) tools.ToolConfiguration {
266+ var patterns []tools.PatternConfiguration
267+
268+ // Only process if tool is enabled
269+ if config .IsEnabled {
270+ for _ , pattern := range config .Patterns {
271+ var parameters []tools.PatternParameterConfiguration
272+
273+ // By default patterns are enabled
274+ patternEnabled := true
275+
276+ // Check if there's an explicit enabled parameter
277+ for _ , param := range pattern .Parameters {
278+ if param .name == "enabled" && param .value == "false" {
279+ patternEnabled = false
280+ }
281+ }
282+
283+ // Add enabled parameter
284+ parameters = append (parameters , tools.PatternParameterConfiguration {
285+ Name : "enabled" ,
286+ Value : fmt .Sprintf ("%t" , patternEnabled ),
287+ })
288+
289+ patterns = append (
290+ patterns ,
291+ tools.PatternConfiguration {
292+ PatternId : pattern .InternalId ,
293+ ParamenterConfigurations : parameters ,
294+ },
295+ )
296+ }
297+ }
298+
299+ return tools.ToolConfiguration {
300+ PatternsConfiguration : patterns ,
301+ }
302+ }
303+
304+ // createDefaultTrivyConfigFile creates a default trivy.yaml configuration file
305+ func createDefaultTrivyConfigFile () error {
306+ // Use empty tool configuration to get default settings
307+ emptyConfig := tools.ToolConfiguration {}
308+ content := tools .CreateTrivyConfig (emptyConfig )
309+
310+ // Write to file
311+ return os .WriteFile ("trivy.yaml" , []byte (content ), 0644 )
312+ }
0 commit comments