@@ -65,7 +65,6 @@ var initCmd = &cobra.Command{
6565}
6666
6767func createConfigurationFile (tools []tools.Tool ) error {
68-
6968 configFile , err := os .Create (config .Config .ProjectConfigFile ())
7069 defer configFile .Close ()
7170 if err != nil {
@@ -86,7 +85,8 @@ func configFileTemplate(tools []tools.Tool) string {
8685 eslintVersion := "9.3.0"
8786 trivyVersion := "0.59.1" // Latest stable version
8887 pylintVersion := "3.3.6"
89- pmdVersion := "7.12.0"
88+ pmdVersion := "6.55.0"
89+
9090 for _ , tool := range tools {
9191 if tool .Uuid == "f8b29663-2cb2-498d-b923-a10c6a8c05cd" {
9292 eslintVersion = tool .Version
@@ -97,6 +97,9 @@ func configFileTemplate(tools []tools.Tool) string {
9797 if tool .Uuid == "31677b6d-4ae0-4f56-8041-606a8d7a8e61" {
9898 pylintVersion = tool .Version
9999 }
100+ if tool .Uuid == "9ed24812-b6ee-4a58-9004-0ed183c45b8f" {
101+ pmdVersion = tool .Version
102+ }
100103 }
101104
102105 return fmt .Sprintf (`runtimes:
@@ -111,7 +114,6 @@ tools:
111114}
112115
113116func buildRepositoryConfigurationFiles (token string ) error {
114-
115117 fmt .Println ("Building project configuration files ..." )
116118 fmt .Println ("Fetching project configuration from codacy ..." )
117119
@@ -152,46 +154,76 @@ func buildRepositoryConfigurationFiles(token string) error {
152154 }
153155
154156 var objmap map [string ]json.RawMessage
155- _ = json .Unmarshal (body , & objmap )
157+ err = json .Unmarshal (body , & objmap )
158+ if err != nil {
159+ fmt .Println ("Error unmarshaling response:" , err )
160+ return err
161+ }
156162
157163 var apiToolConfigurations []CodacyToolConfiguration
158164 err = json .Unmarshal (objmap ["toolConfiguration" ], & apiToolConfigurations )
165+ if err != nil {
166+ fmt .Println ("Error unmarshaling tool configurations:" , err )
167+ return err
168+ }
159169
170+ // ESLint configuration
160171 eslintApiConfiguration := extractESLintConfiguration (apiToolConfigurations )
172+ if eslintApiConfiguration != nil {
173+ eslintDomainConfiguration := convertAPIToolConfigurationToDomain (* eslintApiConfiguration )
174+ eslintConfigurationString := tools .CreateEslintConfig (eslintDomainConfiguration )
161175
162- eslintDomainConfiguration := convertAPIToolConfigurationToDomain (* eslintApiConfiguration )
163-
164- eslintConfigurationString := tools .CreateEslintConfig (eslintDomainConfiguration )
165-
166- eslintConfigFile , err := os .Create ("eslint.config.mjs" )
167- defer eslintConfigFile .Close ()
168- if err != nil {
169- log .Fatal (err )
170- }
176+ eslintConfigFile , err := os .Create ("eslint.config.mjs" )
177+ if err != nil {
178+ return fmt .Errorf ("failed to create eslint config file: %v" , err )
179+ }
180+ defer eslintConfigFile .Close ()
171181
172- _ , err = eslintConfigFile .WriteString (eslintConfigurationString )
173- if err != nil {
174- log .Fatal (err )
182+ _ , err = eslintConfigFile .WriteString (eslintConfigurationString )
183+ if err != nil {
184+ return fmt .Errorf ("failed to write eslint config: %v" , err )
185+ }
186+ fmt .Println ("ESLint configuration created based on Codacy settings" )
187+ } else {
188+ err = createDefaultEslintConfigFile ()
189+ if err != nil {
190+ return fmt .Errorf ("failed to create default ESLint config: %v" , err )
191+ }
192+ fmt .Println ("Default ESLint configuration created" )
175193 }
176194
177- // Create Trivy configuration after processing ESLint
195+ // Trivy configuration
178196 trivyApiConfiguration := extractTrivyConfiguration (apiToolConfigurations )
179197 if trivyApiConfiguration != nil {
180- // Create trivy.yaml file based on API configuration
181198 err = createTrivyConfigFile (* trivyApiConfiguration )
182199 if err != nil {
183- log . Fatal ( err )
200+ return fmt . Errorf ( "failed to create Trivy config: %v" , err )
184201 }
185202 fmt .Println ("Trivy configuration created based on Codacy settings" )
186203 } else {
187- // Create default trivy.yaml if no configuration from API
188204 err = createDefaultTrivyConfigFile ()
189205 if err != nil {
190- log . Fatal ( err )
206+ return fmt . Errorf ( "failed to create default Trivy config: %v" , err )
191207 }
192208 fmt .Println ("Default Trivy configuration created" )
193209 }
194210
211+ // PMD configuration
212+ pmdApiConfiguration := extractPMDConfiguration (apiToolConfigurations )
213+ if pmdApiConfiguration != nil {
214+ err = createPMDConfigFile (* pmdApiConfiguration )
215+ if err != nil {
216+ return fmt .Errorf ("failed to create PMD config: %v" , err )
217+ }
218+ fmt .Println ("PMD configuration created based on Codacy settings" )
219+ } else {
220+ err = createDefaultPMDConfigFile ()
221+ if err != nil {
222+ return fmt .Errorf ("failed to create default PMD config: %v" , err )
223+ }
224+ fmt .Println ("Default PMD configuration created" )
225+ }
226+
195227 return nil
196228}
197229
@@ -203,16 +235,16 @@ func convertAPIToolConfigurationToDomain(config CodacyToolConfiguration) tools.T
203235
204236 for _ , parameter := range pattern .Parameters {
205237 parameters = append (parameters , tools.PatternParameterConfiguration {
206- Name : parameter .name ,
207- Value : parameter .value ,
238+ Name : parameter .Name ,
239+ Value : parameter .Value ,
208240 })
209241 }
210242
211243 patterns = append (
212244 patterns ,
213245 tools.PatternConfiguration {
214- PatternId : pattern .InternalId ,
215- ParamenterConfigurations : parameters ,
246+ PatternId : pattern .InternalId ,
247+ ParameterConfigurations : parameters ,
216248 },
217249 )
218250 }
@@ -250,6 +282,29 @@ func extractTrivyConfiguration(toolConfigurations []CodacyToolConfiguration) *Co
250282 return nil
251283}
252284
285+ // Add PMD-specific functions
286+ func extractPMDConfiguration (toolConfigurations []CodacyToolConfiguration ) * CodacyToolConfiguration {
287+ const PMDUUID = "9ed24812-b6ee-4a58-9004-0ed183c45b8f"
288+ for _ , toolConfiguration := range toolConfigurations {
289+ if toolConfiguration .Uuid == PMDUUID {
290+ return & toolConfiguration
291+ }
292+ }
293+ return nil
294+ }
295+
296+ func createPMDConfigFile (config CodacyToolConfiguration ) error {
297+ pmdDomainConfiguration := convertAPIToolConfigurationToDomain (config )
298+ pmdConfigurationString := tools .CreatePmdConfig (pmdDomainConfiguration )
299+ return os .WriteFile ("pmd-ruleset.xml" , []byte (pmdConfigurationString ), 0644 )
300+ }
301+
302+ func createDefaultPMDConfigFile () error {
303+ emptyConfig := tools.ToolConfiguration {}
304+ content := tools .CreatePmdConfig (emptyConfig )
305+ return os .WriteFile ("pmd-ruleset.xml" , []byte (content ), 0644 )
306+ }
307+
253308type CodacyToolConfiguration struct {
254309 Uuid string `json:"uuid"`
255310 IsEnabled bool `json:"isEnabled"`
@@ -262,8 +317,8 @@ type PatternConfiguration struct {
262317}
263318
264319type ParameterConfiguration struct {
265- name string `json:"name"`
266- value string `json:"value"`
320+ Name string `json:"name"`
321+ Value string `json:"value"`
267322}
268323
269324// createTrivyConfigFile creates a trivy.yaml configuration file based on the API configuration
@@ -292,7 +347,7 @@ func convertAPIToolConfigurationForTrivy(config CodacyToolConfiguration) tools.T
292347
293348 // Check if there's an explicit enabled parameter
294349 for _ , param := range pattern .Parameters {
295- if param .name == "enabled" && param .value == "false" {
350+ if param .Name == "enabled" && param .Value == "false" {
296351 patternEnabled = false
297352 }
298353 }
@@ -306,8 +361,8 @@ func convertAPIToolConfigurationForTrivy(config CodacyToolConfiguration) tools.T
306361 patterns = append (
307362 patterns ,
308363 tools.PatternConfiguration {
309- PatternId : pattern .InternalId ,
310- ParamenterConfigurations : parameters ,
364+ PatternId : pattern .InternalId ,
365+ ParameterConfigurations : parameters ,
311366 },
312367 )
313368 }
@@ -327,3 +382,13 @@ func createDefaultTrivyConfigFile() error {
327382 // Write to file
328383 return os .WriteFile ("trivy.yaml" , []byte (content ), 0644 )
329384}
385+
386+ // createDefaultEslintConfigFile creates a default eslint.config.mjs configuration file
387+ func createDefaultEslintConfigFile () error {
388+ // Use empty tool configuration to get default settings
389+ emptyConfig := tools.ToolConfiguration {}
390+ content := tools .CreateEslintConfig (emptyConfig )
391+
392+ // Write to file
393+ return os .WriteFile ("eslint.config.mjs" , []byte (content ), 0644 )
394+ }
0 commit comments