@@ -146,6 +146,7 @@ func configFileTemplate(tools []tools.Tool) string {
146146 PyLint : "3.3.6" ,
147147 PMD : "6.55.0" ,
148148 DartAnalyzer : "3.7.2" ,
149+ Semgrep : "1.78.0" ,
149150 }
150151
151152 // Build map of enabled tools with their versions
@@ -200,6 +201,7 @@ func configFileTemplate(tools []tools.Tool) string {
200201 PyLint : "pylint" ,
201202 PMD : "pmd" ,
202203 DartAnalyzer : "dartanalyzer" ,
204+ Semgrep : "semgrep" ,
203205 }
204206
205207 for uuid , name := range uuidToName {
@@ -214,6 +216,7 @@ func configFileTemplate(tools []tools.Tool) string {
214216 sb .WriteString (fmt .Sprintf (" - pylint@%s\n " , defaultVersions [PyLint ]))
215217 sb .WriteString (fmt .Sprintf (" - pmd@%s\n " , defaultVersions [PMD ]))
216218 sb .WriteString (fmt .Sprintf (" - dartanalyzer@%s\n " , defaultVersions [DartAnalyzer ]))
219+ sb .WriteString (fmt .Sprintf (" - semgrep@%s\n " , defaultVersions [Semgrep ]))
217220 }
218221
219222 return sb .String ()
@@ -266,7 +269,8 @@ func buildRepositoryConfigurationFiles(token string) error {
266269
267270 // Only generate config files for tools not using their own config file
268271 for _ , tool := range configuredToolsWithUI {
269- url := fmt .Sprintf ("%s/api/v3/analysis/organizations/%s/%s/repositories/%s/tools/%s/patterns?enabled=true" ,
272+
273+ url := fmt .Sprintf ("%s/api/v3/analysis/organizations/%s/%s/repositories/%s/tools/%s/patterns?enabled=true&limit=1000" ,
270274 CodacyApiBase ,
271275 initFlags .provider ,
272276 initFlags .organization ,
@@ -396,6 +400,13 @@ func createToolFileConfigurations(tool tools.Tool, patternConfiguration []domain
396400 return fmt .Errorf ("failed to create Dart Analyzer config: %v" , err )
397401 }
398402 }
403+ case Semgrep :
404+ if len (patternConfiguration ) > 0 {
405+ err := createSemgrepConfigFile (patternConfiguration , toolsConfigDir )
406+ if err != nil {
407+ return fmt .Errorf ("failed to create Semgrep config: %v" , err )
408+ }
409+ }
399410 }
400411 return nil
401412}
@@ -456,6 +467,24 @@ func createDefaultEslintConfigFile(toolsConfigDir string) error {
456467 return os .WriteFile (filepath .Join (toolsConfigDir , "eslint.config.mjs" ), []byte (content ), utils .DefaultFilePerms )
457468}
458469
470+ // SemgrepRulesFile represents the structure of the rules.yaml file
471+ type SemgrepRulesFile struct {
472+ Rules []map [string ]interface {} `yaml:"rules"`
473+ }
474+
475+ // createSemgrepConfigFile creates a semgrep.yaml configuration file based on the API configuration
476+ func createSemgrepConfigFile (config []domain.PatternConfiguration , toolsConfigDir string ) error {
477+ // Use the refactored function from tools package
478+ configData , err := tools .GetSemgrepConfig (config )
479+
480+ if err != nil {
481+ return fmt .Errorf ("failed to create Semgrep config: %v" , err )
482+ }
483+
484+ // Write to file
485+ return os .WriteFile (filepath .Join (toolsConfigDir , "semgrep.yaml" ), configData , utils .DefaultFilePerms )
486+ }
487+
459488// cleanConfigDirectory removes all previous configuration files in the tools-configs directory
460489func cleanConfigDirectory (toolsConfigDir string ) error {
461490 // Check if directory exists
@@ -489,4 +518,5 @@ const (
489518 PMD string = "9ed24812-b6ee-4a58-9004-0ed183c45b8f"
490519 PyLint string = "31677b6d-4ae0-4f56-8041-606a8d7a8e61"
491520 DartAnalyzer string = "d203d615-6cf1-41f9-be5f-e2f660f7850f"
521+ Semgrep string = "6792c561-236d-41b7-ba5e-9d6bee0d548b"
492522)
0 commit comments