@@ -72,21 +72,26 @@ 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:
858986908791tools:
8892 - eslint@%s
89- ` , eslintVersion )
93+ - trivy@%s
94+ ` , eslintVersion , trivyVersion )
9095}
9196
9297func buildRepositoryConfigurationFiles (token string ) error {
@@ -151,7 +156,24 @@ func buildRepositoryConfigurationFiles(token string) error {
151156 _ , err = eslintConfigFile .WriteString (eslintConfigurationString )
152157 if err != nil {
153158 log .Fatal (err )
159+ }
154160
161+ // Create Trivy configuration after processing ESLint
162+ trivyApiConfiguration := extractTrivyConfiguration (apiToolConfigurations )
163+ if trivyApiConfiguration != nil {
164+ // Create trivy.yaml file based on API configuration
165+ err = createTrivyConfigFile (* trivyApiConfiguration )
166+ if err != nil {
167+ log .Fatal (err )
168+ }
169+ fmt .Println ("Trivy configuration created based on Codacy settings" )
170+ } else {
171+ // Create default trivy.yaml if no configuration from API
172+ err = createDefaultTrivyConfigFile ()
173+ if err != nil {
174+ log .Fatal (err )
175+ }
176+ fmt .Println ("Default Trivy configuration created" )
155177 }
156178
157179 return nil
@@ -198,6 +220,20 @@ func extractESLintConfiguration(toolConfigurations []CodacyToolConfiguration) *C
198220 return nil
199221}
200222
223+ // extractTrivyConfiguration extracts Trivy configuration from the Codacy API response
224+ func extractTrivyConfiguration (toolConfigurations []CodacyToolConfiguration ) * CodacyToolConfiguration {
225+ // Trivy internal codacy uuid
226+ const TrivyUUID = "2fd7fbe0-33f9-4ab3-ab73-e9b62404e2cb"
227+
228+ for _ , toolConfiguration := range toolConfigurations {
229+ if toolConfiguration .Uuid == TrivyUUID {
230+ return & toolConfiguration
231+ }
232+ }
233+
234+ return nil
235+ }
236+
201237type CodacyToolConfiguration struct {
202238 Uuid string `json:"uuid"`
203239 IsEnabled bool `json:"isEnabled"`
@@ -213,3 +249,65 @@ type ParameterConfiguration struct {
213249 name string `json:"name"`
214250 value string `json:"value"`
215251}
252+
253+ // createTrivyConfigFile creates a trivy.yaml configuration file based on the API configuration
254+ func createTrivyConfigFile (config CodacyToolConfiguration ) error {
255+ // Convert CodacyToolConfiguration to tools.ToolConfiguration
256+ trivyDomainConfiguration := convertAPIToolConfigurationForTrivy (config )
257+
258+ // Use the shared CreateTrivyConfig function to generate the config content
259+ trivyConfigurationString := tools .CreateTrivyConfig (trivyDomainConfiguration )
260+
261+ // Write to file
262+ return os .WriteFile ("trivy.yaml" , []byte (trivyConfigurationString ), 0644 )
263+ }
264+
265+ // convertAPIToolConfigurationForTrivy converts API tool configuration to domain model for Trivy
266+ func convertAPIToolConfigurationForTrivy (config CodacyToolConfiguration ) tools.ToolConfiguration {
267+ var patterns []tools.PatternConfiguration
268+
269+ // Only process if tool is enabled
270+ if config .IsEnabled {
271+ for _ , pattern := range config .Patterns {
272+ var parameters []tools.PatternParameterConfiguration
273+
274+ // By default patterns are enabled
275+ patternEnabled := true
276+
277+ // Check if there's an explicit enabled parameter
278+ for _ , param := range pattern .Parameters {
279+ if param .name == "enabled" && param .value == "false" {
280+ patternEnabled = false
281+ }
282+ }
283+
284+ // Add enabled parameter
285+ parameters = append (parameters , tools.PatternParameterConfiguration {
286+ Name : "enabled" ,
287+ Value : fmt .Sprintf ("%t" , patternEnabled ),
288+ })
289+
290+ patterns = append (
291+ patterns ,
292+ tools.PatternConfiguration {
293+ PatternId : pattern .InternalId ,
294+ ParamenterConfigurations : parameters ,
295+ },
296+ )
297+ }
298+ }
299+
300+ return tools.ToolConfiguration {
301+ PatternsConfiguration : patterns ,
302+ }
303+ }
304+
305+ // createDefaultTrivyConfigFile creates a default trivy.yaml configuration file
306+ func createDefaultTrivyConfigFile () error {
307+ // Use empty tool configuration to get default settings
308+ emptyConfig := tools.ToolConfiguration {}
309+ content := tools .CreateTrivyConfig (emptyConfig )
310+
311+ // Write to file
312+ return os .WriteFile ("trivy.yaml" , []byte (content ), 0644 )
313+ }
0 commit comments