Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .codacy/codacy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ tools:
- [email protected]
- [email protected]
- [email protected]
- pmd@7.12.0
- pmd@6.55.0
125 changes: 95 additions & 30 deletions cmd/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@
}

func createConfigurationFile(tools []tools.Tool) error {

configFile, err := os.Create(config.Config.ProjectConfigFile())
defer configFile.Close()
if err != nil {
Expand All @@ -86,7 +85,8 @@
eslintVersion := "9.3.0"
trivyVersion := "0.59.1" // Latest stable version
pylintVersion := "3.3.6"
pmdVersion := "7.12.0"
pmdVersion := "6.55.0"

for _, tool := range tools {
if tool.Uuid == "f8b29663-2cb2-498d-b923-a10c6a8c05cd" {
eslintVersion = tool.Version
Expand All @@ -97,6 +97,9 @@
if tool.Uuid == "31677b6d-4ae0-4f56-8041-606a8d7a8e61" {
pylintVersion = tool.Version
}
if tool.Uuid == "9ed24812-b6ee-4a58-9004-0ed183c45b8f" {
pmdVersion = tool.Version
}
}

return fmt.Sprintf(`runtimes:
Expand All @@ -111,7 +114,6 @@
}

func buildRepositoryConfigurationFiles(token string) error {

fmt.Println("Building project configuration files ...")
fmt.Println("Fetching project configuration from codacy ...")

Expand Down Expand Up @@ -152,46 +154,76 @@
}

var objmap map[string]json.RawMessage
_ = json.Unmarshal(body, &objmap)
err = json.Unmarshal(body, &objmap)
if err != nil {
fmt.Println("Error unmarshaling response:", err)
return err
}

var apiToolConfigurations []CodacyToolConfiguration
err = json.Unmarshal(objmap["toolConfiguration"], &apiToolConfigurations)
if err != nil {
fmt.Println("Error unmarshaling tool configurations:", err)
return err
}

// ESLint configuration
eslintApiConfiguration := extractESLintConfiguration(apiToolConfigurations)
if eslintApiConfiguration != nil {
eslintDomainConfiguration := convertAPIToolConfigurationToDomain(*eslintApiConfiguration)
eslintConfigurationString := tools.CreateEslintConfig(eslintDomainConfiguration)

eslintDomainConfiguration := convertAPIToolConfigurationToDomain(*eslintApiConfiguration)

eslintConfigurationString := tools.CreateEslintConfig(eslintDomainConfiguration)

eslintConfigFile, err := os.Create("eslint.config.mjs")
defer eslintConfigFile.Close()
if err != nil {
log.Fatal(err)
}
eslintConfigFile, err := os.Create("eslint.config.mjs")
if err != nil {
return fmt.Errorf("failed to create eslint config file: %v", err)
}
defer eslintConfigFile.Close()

_, err = eslintConfigFile.WriteString(eslintConfigurationString)
if err != nil {
log.Fatal(err)
_, err = eslintConfigFile.WriteString(eslintConfigurationString)
if err != nil {
return fmt.Errorf("failed to write eslint config: %v", err)
}
fmt.Println("ESLint configuration created based on Codacy settings")
} else {
err = createDefaultEslintConfigFile()
if err != nil {
return fmt.Errorf("failed to create default ESLint config: %v", err)
}
fmt.Println("Default ESLint configuration created")
}

// Create Trivy configuration after processing ESLint
// Trivy configuration
trivyApiConfiguration := extractTrivyConfiguration(apiToolConfigurations)
if trivyApiConfiguration != nil {
// Create trivy.yaml file based on API configuration
err = createTrivyConfigFile(*trivyApiConfiguration)
if err != nil {
log.Fatal(err)
return fmt.Errorf("failed to create Trivy config: %v", err)
}
fmt.Println("Trivy configuration created based on Codacy settings")
} else {
// Create default trivy.yaml if no configuration from API
err = createDefaultTrivyConfigFile()
if err != nil {
log.Fatal(err)
return fmt.Errorf("failed to create default Trivy config: %v", err)
}
fmt.Println("Default Trivy configuration created")
}

// PMD configuration
pmdApiConfiguration := extractPMDConfiguration(apiToolConfigurations)

Check notice on line 212 in cmd/init.go

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

cmd/init.go#L212

var pmdApiConfiguration should be pmdAPIConfiguration
if pmdApiConfiguration != nil {
err = createPMDConfigFile(*pmdApiConfiguration)
if err != nil {
return fmt.Errorf("failed to create PMD config: %v", err)
}
fmt.Println("PMD configuration created based on Codacy settings")
} else {
err = createDefaultPMDConfigFile()
if err != nil {
return fmt.Errorf("failed to create default PMD config: %v", err)
}
fmt.Println("Default PMD configuration created")
}

return nil
}

Expand All @@ -203,16 +235,16 @@

for _, parameter := range pattern.Parameters {
parameters = append(parameters, tools.PatternParameterConfiguration{
Name: parameter.name,
Value: parameter.value,
Name: parameter.Name,
Value: parameter.Value,
})
}

patterns = append(
patterns,
tools.PatternConfiguration{
PatternId: pattern.InternalId,
ParamenterConfigurations: parameters,
PatternId: pattern.InternalId,
ParameterConfigurations: parameters,
},
)
}
Expand Down Expand Up @@ -250,6 +282,29 @@
return nil
}

// Add PMD-specific functions
func extractPMDConfiguration(toolConfigurations []CodacyToolConfiguration) *CodacyToolConfiguration {
const PMDUUID = "9ed24812-b6ee-4a58-9004-0ed183c45b8f"
for _, toolConfiguration := range toolConfigurations {
if toolConfiguration.Uuid == PMDUUID {
return &toolConfiguration
}
}
return nil
}

func createPMDConfigFile(config CodacyToolConfiguration) error {
pmdDomainConfiguration := convertAPIToolConfigurationToDomain(config)
pmdConfigurationString := tools.CreatePmdConfig(pmdDomainConfiguration)
return os.WriteFile("pmd-ruleset.xml", []byte(pmdConfigurationString), 0644)

Check warning on line 299 in cmd/init.go

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

cmd/init.go#L299

The application was found setting file permissions to overly permissive values.
}

func createDefaultPMDConfigFile() error {
emptyConfig := tools.ToolConfiguration{}
content := tools.CreatePmdConfig(emptyConfig)
return os.WriteFile("pmd-ruleset.xml", []byte(content), 0644)

Check warning on line 305 in cmd/init.go

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

cmd/init.go#L305

The application was found setting file permissions to overly permissive values.
}

type CodacyToolConfiguration struct {
Uuid string `json:"uuid"`
IsEnabled bool `json:"isEnabled"`
Expand All @@ -262,8 +317,8 @@
}

type ParameterConfiguration struct {
name string `json:"name"`
value string `json:"value"`
Name string `json:"name"`
Value string `json:"value"`
}

// createTrivyConfigFile creates a trivy.yaml configuration file based on the API configuration
Expand Down Expand Up @@ -292,7 +347,7 @@

// Check if there's an explicit enabled parameter
for _, param := range pattern.Parameters {
if param.name == "enabled" && param.value == "false" {
if param.Name == "enabled" && param.Value == "false" {
patternEnabled = false
}
}
Expand All @@ -306,8 +361,8 @@
patterns = append(
patterns,
tools.PatternConfiguration{
PatternId: pattern.InternalId,
ParamenterConfigurations: parameters,
PatternId: pattern.InternalId,
ParameterConfigurations: parameters,
},
)
}
Expand All @@ -327,3 +382,13 @@
// Write to file
return os.WriteFile("trivy.yaml", []byte(content), 0644)
}

// createDefaultEslintConfigFile creates a default eslint.config.mjs configuration file
func createDefaultEslintConfigFile() error {
// Use empty tool configuration to get default settings
emptyConfig := tools.ToolConfiguration{}
content := tools.CreateEslintConfig(emptyConfig)

// Write to file
return os.WriteFile("eslint.config.mjs", []byte(content), 0644)

Check warning on line 393 in cmd/init.go

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

cmd/init.go#L393

The application was found setting file permissions to overly permissive values.
}
6 changes: 3 additions & 3 deletions plugins/tools/pmd/plugin.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
name: pmd
description: PMD - An extensible cross-language static code analyzer
download:
url_template: https://github.com/pmd/pmd/releases/download/pmd_releases%2F{{.Version}}/pmd-dist-{{.Version}}-bin.zip
file_name_template: pmd-dist-{{.Version}}-bin.zip
url_template: "https://github.com/pmd/pmd/releases/download/pmd_releases%2F{{.Version}}/pmd-bin-{{.Version}}.zip"
file_name_template: pmd-bin-{{.Version}}
extension:
default: .zip
binaries:
- name: pmd
path: pmd-bin-{{.Version}}/bin/pmd
path: pmd-bin-{{.Version}}/bin/run.sh
4 changes: 2 additions & 2 deletions tools/ToolConfigurationStruct.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ type PatternParameterConfiguration struct {
}

type PatternConfiguration struct {
PatternId string
ParamenterConfigurations []PatternParameterConfiguration
PatternId string
ParameterConfigurations []PatternParameterConfiguration
}

type ToolConfiguration struct {
Expand Down
4 changes: 2 additions & 2 deletions tools/eslintConfigCreator.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ func CreateEslintConfig(configuration ToolConfiguration) string {

parametersString := ""

for _, parameter := range patternConfiguration.ParamenterConfigurations {
for _, parameter := range patternConfiguration.ParameterConfigurations {
if parameter.Name == "unnamedParam" {
parametersString += quoteWhenIsNotJson(parameter.Value)
}
}

// build named parameters json object
namedParametersString := ""
for _, parameter := range patternConfiguration.ParamenterConfigurations {
for _, parameter := range patternConfiguration.ParameterConfigurations {

if parameter.Name != "unnamedParam" {
if len(namedParametersString) == 0 {
Expand Down
6 changes: 3 additions & 3 deletions tools/eslintConfigCreator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func TestCreateEslintConfigUnnamedParam(t *testing.T) {
PatternsConfiguration: []PatternConfiguration{
{
PatternId: "ESLint8_semi",
ParamenterConfigurations: []PatternParameterConfiguration{
ParameterConfigurations: []PatternParameterConfiguration{
{
Name: "unnamedParam",
Value: "never",
Expand All @@ -70,7 +70,7 @@ func TestCreateEslintConfigNamedParam(t *testing.T) {
PatternsConfiguration: []PatternConfiguration{
{
PatternId: "consistent-return",
ParamenterConfigurations: []PatternParameterConfiguration{
ParameterConfigurations: []PatternParameterConfiguration{
{
Name: "treatUndefinedAsUnspecified",
Value: "false",
Expand All @@ -94,7 +94,7 @@ func TestCreateEslintConfigUnnamedAndNamedParam(t *testing.T) {
PatternsConfiguration: []PatternConfiguration{
{
PatternId: "consistent-return",
ParamenterConfigurations: []PatternParameterConfiguration{
ParameterConfigurations: []PatternParameterConfiguration{
{
Name: "treatUndefinedAsUnspecified",
Value: "false",
Expand Down
Loading