Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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