Skip to content

Commit d6eda84

Browse files
fix the languages-config file when discovery
1 parent a8a596a commit d6eda84

File tree

3 files changed

+87
-3
lines changed

3 files changed

+87
-3
lines changed

cmd/config.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -235,11 +235,26 @@ var configDiscoverCmd = &cobra.Command{
235235
func updateLanguagesConfigForTools(detectedTools map[string]struct{}, toolsConfigDir string, defaultToolLangMap map[string]domain.ToolLanguageInfo) error {
236236
langConfigPath := filepath.Join(toolsConfigDir, "languages-config.yaml")
237237

238-
// Build language configuration for detected tools
238+
// Read existing languages config if it exists
239239
var langConf domain.LanguagesConfig
240+
if content, err := os.ReadFile(langConfigPath); err == nil {
241+
if err := yaml.Unmarshal(content, &langConf); err != nil {
242+
return fmt.Errorf("failed to parse existing languages-config.yaml: %w", err)
243+
}
244+
}
245+
246+
// Create a map of existing tools for quick lookup
247+
existingTools := make(map[string]domain.ToolLanguageInfo)
248+
for _, tool := range langConf.Tools {
249+
existingTools[tool.Name] = tool
250+
}
251+
252+
// Add detected tools that are not already present
240253
for toolName := range detectedTools {
241-
if toolInfo, exists := defaultToolLangMap[toolName]; exists {
242-
langConf.Tools = append(langConf.Tools, toolInfo)
254+
if _, alreadyExists := existingTools[toolName]; !alreadyExists {
255+
if toolInfo, exists := defaultToolLangMap[toolName]; exists {
256+
langConf.Tools = append(langConf.Tools, toolInfo)
257+
}
243258
}
244259
}
245260

integration-tests/config-discover/expected/tools-configs/languages-config.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
tools:
2+
- name: codacy-enigma-cli
3+
languages: [Multiple]
4+
extensions: []
25
- name: dartanalyzer
36
languages: [Dart]
47
extensions: [.dart]
@@ -17,3 +20,6 @@ tools:
1720
- name: semgrep
1821
languages: [C, CPP, C#, Generic, Go, Java, JavaScript, JSON, Kotlin, Python, TypeScript, Ruby, Rust, JSX, PHP, Scala, Swift, Terraform]
1922
extensions: [.c, .cpp, .h, .hpp, .cs, .go, .java, .js, .json, .kt, .py, .ts, .rb, .rs, .jsx, .php, .scala, .swift, .tf, .tfvars]
23+
- name: trivy
24+
languages: [Multiple]
25+
extensions: []

integration-tests/run.sh

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,63 @@ cleanup_codacy() {
434434
fi
435435
}
436436

437+
# Validate that languages-config.yaml exists and contains all tools from codacy.yaml
438+
validate_languages_config_contains_all_tools() {
439+
local codacy_yaml=".codacy/codacy.yaml"
440+
local languages_config=".codacy/tools-configs/languages-config.yaml"
441+
442+
# Check that languages-config.yaml exists
443+
if [ ! -f "$languages_config" ]; then
444+
echo "❌ languages-config.yaml does not exist at $languages_config"
445+
exit 1
446+
fi
447+
echo "✅ languages-config.yaml exists"
448+
449+
# Extract tool names from codacy.yaml
450+
if [ ! -f "$codacy_yaml" ]; then
451+
echo "❌ codacy.yaml does not exist at $codacy_yaml"
452+
exit 1
453+
fi
454+
455+
# Get tools from codacy.yaml (extract tool names before @ version, only from tools section)
456+
codacy_tools=$(awk '
457+
/^tools:/ { in_tools=1; next }
458+
/^[a-zA-Z][^:]*:/ { in_tools=0 }
459+
in_tools && /^\s*-\s+[a-zA-Z0-9_-]+@/ {
460+
gsub(/^\s*-\s*/, "");
461+
gsub(/@.*$/, "");
462+
print
463+
}
464+
' "$codacy_yaml" | sort || true)
465+
466+
if [ -z "$codacy_tools" ]; then
467+
echo "✅ No tools found in codacy.yaml, skipping validation"
468+
return 0
469+
fi
470+
471+
echo "📋 Tools found in codacy.yaml:"
472+
echo "$codacy_tools"
473+
474+
# Check that each tool from codacy.yaml exists in languages-config.yaml
475+
missing_tools=""
476+
for tool in $codacy_tools; do
477+
if ! grep -q "name: $tool" "$languages_config"; then
478+
missing_tools="$missing_tools $tool"
479+
fi
480+
done
481+
482+
if [ -n "$missing_tools" ]; then
483+
echo "❌ The following tools from codacy.yaml are missing in languages-config.yaml:$missing_tools"
484+
echo "=== Tools in codacy.yaml ==="
485+
echo "$codacy_tools"
486+
echo "=== Tools in languages-config.yaml ==="
487+
grep "name:" "$languages_config" | sed 's/.*name: \(.*\)/\1/' | sort
488+
exit 1
489+
fi
490+
491+
echo "✅ All tools from codacy.yaml are present in languages-config.yaml"
492+
}
493+
437494
compare_files() {
438495
local expected_dir="$1"
439496
local actual_dir="$2"
@@ -568,9 +625,15 @@ EOF
568625
exit 1
569626
fi
570627

628+
# Check the languages-config.yaml is present and contains all tools which are in the codacy.yaml
629+
validate_languages_config_contains_all_tools
630+
571631
# Run config discover on the test directory - adding all tools
572632
"$CLI_PATH" config discover .
573633

634+
# Final validation: check that languages-config.yaml contains all tools from codacy.yaml
635+
validate_languages_config_contains_all_tools
636+
574637
compare_files "expected" ".codacy" "Test $test_name"
575638

576639
echo "✅ Test $test_name completed successfully"

0 commit comments

Comments
 (0)