Skip to content

Commit 34119bb

Browse files
committed
replace semgrep with opengrep
1 parent da0cd76 commit 34119bb

File tree

32 files changed

+277
-100
lines changed

32 files changed

+277
-100
lines changed

.codacy/codacy.yaml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@ runtimes:
33
- java@17.0.10
44
- node@22.2.0
55
- python@3.11.11
6-
- flutter@3.7.2
76
tools:
87
- eslint@9.38.0
98
- lizard@1.17.31
109
- pmd@6.55.0
1110
- pylint@3.3.9
1211
- revive@1.12.0
13-
- semgrep@1.78.0
12+
- opengrep@1.16.2
1413
- trivy@0.66.0
15-
- dartanalyzer@3.7.2

cmd/analyze.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ var versionedToolNames = map[string]map[int]string{
273273

274274
var simpleToolAliases = map[string]string{
275275
"lizard": "Lizard",
276-
"semgrep": "Semgrep",
276+
"opengrep": "Opengrep",
277277
"pylint": "pylintpython3",
278278
"trivy": "Trivy",
279279
}
@@ -405,9 +405,9 @@ func runToolByName(toolName string, workDirectory string, pathsToCheck []string,
405405
case "dartanalyzer":
406406
binaryPath := tool.Binaries[tool.Runtime]
407407
return tools.RunDartAnalyzer(workDirectory, tool.InstallDir, binaryPath, pathsToCheck, outputFile, outputFormat)
408-
case "semgrep":
408+
case "opengrep":
409409
binaryPath := tool.Binaries[toolName]
410-
return tools.RunSemgrep(workDirectory, binaryPath, pathsToCheck, outputFile, outputFormat)
410+
return tools.RunOpengrep(workDirectory, binaryPath, pathsToCheck, outputFile, outputFormat)
411411
case "lizard":
412412
binaryPath := tool.Binaries[tool.Runtime]
413413
return lizard.RunLizard(workDirectory, binaryPath, pathsToCheck, outputFile, outputFormat)

cmd/analyze_integration_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func TestToolConfigFileNameMapCompleteness(t *testing.T) {
114114
"pmd": constants.PMDConfigFileName,
115115
"pylint": constants.PylintConfigFileName,
116116
"dartanalyzer": constants.DartAnalyzerConfigFileName,
117-
"semgrep": constants.SemgrepConfigFileName,
117+
"opengrep": constants.OpengrepConfigFileName,
118118
"revive": constants.ReviveConfigFileName,
119119
"lizard": constants.LizardConfigFileName,
120120
}

cmd/analyze_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ func TestToolConfigFileNameMap(t *testing.T) {
449449
"pmd": constants.PMDConfigFileName,
450450
"pylint": constants.PylintConfigFileName,
451451
"dartanalyzer": constants.DartAnalyzerConfigFileName,
452-
"semgrep": constants.SemgrepConfigFileName,
452+
"opengrep": constants.OpengrepConfigFileName,
453453
"revive": constants.ReviveConfigFileName,
454454
"lizard": constants.LizardConfigFileName,
455455
}

cmd/configsetup/default_config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func CreateConfigurationFilesForDiscoveredTools(discoveredToolNames map[string]s
103103
currentCliMode = "local" // Default to local
104104
}
105105

106-
if currentCliMode == "remote" && initFlags.ApiToken != "" {
106+
if currentCliMode == "remote" && (initFlags.ApiToken != "" || initFlags.ProjectToken != "") {
107107
// Remote mode - create configurations based on cloud repository settings
108108
return createRemoteToolConfigurationsForDiscovered(discoveredToolNames, initFlags)
109109
}

cmd/configsetup/tool_creators.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ var toolConfigRegistry = map[string]ToolConfigCreator{
2424
domain.PMD7: &pmd7ConfigCreator{},
2525
domain.PyLint: &pylintConfigCreator{},
2626
domain.DartAnalyzer: &dartAnalyzerConfigCreator{},
27-
domain.Semgrep: &semgrepConfigCreator{},
27+
domain.Opengrep: &opengrepConfigCreator{},
2828
domain.Lizard: &lizardConfigCreator{},
2929
domain.Revive: &reviveConfigCreator{},
3030
}
@@ -121,23 +121,23 @@ func (d *dartAnalyzerConfigCreator) GetConfigFileName() string {
121121
}
122122
func (d *dartAnalyzerConfigCreator) GetToolName() string { return "Dart Analyzer" }
123123

124-
// semgrepConfigCreator implements ToolConfigCreator for Semgrep
125-
type semgrepConfigCreator struct{}
124+
// opengrepConfigCreator implements ToolConfigCreator for Opengrep
125+
type opengrepConfigCreator struct{}
126126

127-
func (s *semgrepConfigCreator) CreateConfig(toolsConfigDir string, patterns []domain.PatternConfiguration) error {
128-
configData, err := tools.GetSemgrepConfig(patterns)
127+
func (s *opengrepConfigCreator) CreateConfig(toolsConfigDir string, patterns []domain.PatternConfiguration) error {
128+
configData, err := tools.GetOpengrepConfig(patterns)
129129
if err != nil {
130-
return fmt.Errorf("failed to create Semgrep config: %v", err)
130+
return fmt.Errorf("failed to create Opengrep config: %v", err)
131131
}
132-
err = writeConfigFile(filepath.Join(toolsConfigDir, constants.SemgrepConfigFileName), configData)
132+
err = writeConfigFile(filepath.Join(toolsConfigDir, constants.OpengrepConfigFileName), configData)
133133
if err == nil {
134-
fmt.Println("Semgrep configuration created based on Codacy settings")
134+
fmt.Println("Opengrep configuration created based on Codacy settings")
135135
}
136136
return err
137137
}
138138

139-
func (s *semgrepConfigCreator) GetConfigFileName() string { return constants.SemgrepConfigFileName }
140-
func (s *semgrepConfigCreator) GetToolName() string { return "Semgrep" }
139+
func (s *opengrepConfigCreator) GetConfigFileName() string { return constants.OpengrepConfigFileName }
140+
func (s *opengrepConfigCreator) GetToolName() string { return "Opengrep" }
141141

142142
// lizardConfigCreator implements ToolConfigCreator for Lizard
143143
type lizardConfigCreator struct{}

cmd/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ var initCmd = &cobra.Command{
3636
log.Fatalf("Failed to create tools-configs directory: %v", err)
3737
}
3838

39-
cliLocalMode := len(initFlags.ApiToken) == 0
39+
cliLocalMode := len(initFlags.ApiToken)+len(initFlags.ProjectToken) == 0
4040

4141
if cliLocalMode {
4242
fmt.Println()

cmd/upload.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ var sarifShortNameMap = map[string]string{
5555
"Trivy": "trivy",
5656
"Pylint": "pylintpython3",
5757
"dartanalyzer": "dartanalyzer",
58-
"Semgrep": "semgrep",
58+
"Opengrep": "opengrep",
59+
"Opengrep OSS": "opengrep",
5960
"Lizard": "lizard",
6061
"revive": "revive",
6162
}

codacy-client/client.go

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,16 @@ const timeout = 10 * time.Second
1515
// CodacyApiBase is the base URL for the Codacy API
1616
var CodacyApiBase = "https://app.codacy.com"
1717

18-
func getRequest(url string, apiToken string) ([]byte, error) {
18+
// getTokenFromFlags extracts the appropriate token and its type from init flags.
19+
// Project tokens take precedence over API tokens.
20+
func getTokenFromFlags(initFlags domain.InitFlags) (token string, isProjectToken bool) {
21+
if initFlags.ProjectToken != "" {
22+
return initFlags.ProjectToken, true
23+
}
24+
return initFlags.ApiToken, false
25+
}
26+
27+
func getRequest(url string, apiToken string, isProjectToken bool) ([]byte, error) {
1928
client := &http.Client{
2029
Timeout: timeout,
2130
}
@@ -26,7 +35,11 @@ func getRequest(url string, apiToken string) ([]byte, error) {
2635
}
2736

2837
if apiToken != "" {
29-
req.Header.Set("api-token", apiToken)
38+
if isProjectToken {
39+
req.Header.Set("project-token", apiToken)
40+
} else {
41+
req.Header.Set("api-token", apiToken)
42+
}
3043
}
3144

3245
resp, err := client.Do(req)
@@ -56,7 +69,8 @@ func GetPage[T any](
5669
initFlags domain.InitFlags,
5770
parser func([]byte) ([]T, string, error),
5871
) ([]T, string, error) {
59-
response, err := getRequest(url, initFlags.ApiToken)
72+
token, isProjectToken := getTokenFromFlags(initFlags)
73+
response, err := getRequest(url, token, isProjectToken)
6074
if err != nil {
6175
return nil, "", fmt.Errorf("failed to get page: %w", err)
6276
}
@@ -211,7 +225,8 @@ func GetRepositoryTools(initFlags domain.InitFlags) ([]domain.Tool, error) {
211225
initFlags.Organization,
212226
initFlags.Repository)
213227

214-
bodyResponse, err := getRequest(baseURL, initFlags.ApiToken)
228+
token, isProjectToken := getTokenFromFlags(initFlags)
229+
bodyResponse, err := getRequest(baseURL, token, isProjectToken)
215230
if err != nil {
216231
return nil, fmt.Errorf("failed to get repository tools: %w", err)
217232
}
@@ -251,7 +266,7 @@ func GetRepositoryTools(initFlags domain.InitFlags) ([]domain.Tool, error) {
251266
func GetToolsVersions() ([]domain.Tool, error) {
252267
baseURL := fmt.Sprintf("%s/api/v3/tools", CodacyApiBase)
253268

254-
bodyResponse, err := getRequest(baseURL, "")
269+
bodyResponse, err := getRequest(baseURL, "", false)
255270
if err != nil {
256271
return nil, fmt.Errorf("failed to get tool versions: %w", err)
257272
}
@@ -273,7 +288,8 @@ func GetRepositoryLanguages(initFlags domain.InitFlags) ([]domain.RepositoryLang
273288
initFlags.Organization,
274289
initFlags.Repository)
275290

276-
bodyResponse, err := getRequest(baseURL, initFlags.ApiToken)
291+
token, isProjectToken := getTokenFromFlags(initFlags)
292+
bodyResponse, err := getRequest(baseURL, token, isProjectToken)
277293
if err != nil {
278294
return nil, fmt.Errorf("failed to get repository languages: %w", err)
279295
}
@@ -291,7 +307,7 @@ func GetRepositoryLanguages(initFlags domain.InitFlags) ([]domain.RepositoryLang
291307
func GetLanguageTools() ([]domain.LanguageTool, error) {
292308
baseURL := fmt.Sprintf("%s/api/v3/languages/tools", CodacyApiBase)
293309

294-
bodyResponse, err := getRequest(baseURL, "")
310+
bodyResponse, err := getRequest(baseURL, "", false)
295311
if err != nil {
296312
return nil, fmt.Errorf("failed to get language tools: %w", err)
297313
}

codacy-client/client_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func TestGetRequest_Success(t *testing.T) {
1919
defer ts.Close()
2020

2121
initFlags := domain.InitFlags{ApiToken: "dummy"}
22-
resp, err := getRequest(ts.URL, initFlags.ApiToken)
22+
resp, err := getRequest(ts.URL, initFlags.ApiToken, false)
2323
assert.NoError(t, err)
2424
assert.Contains(t, string(resp), "ok")
2525
}
@@ -31,7 +31,7 @@ func TestGetRequest_Failure(t *testing.T) {
3131
defer ts.Close()
3232

3333
initFlags := domain.InitFlags{ApiToken: "dummy"}
34-
_, err := getRequest(ts.URL, initFlags.ApiToken)
34+
_, err := getRequest(ts.URL, initFlags.ApiToken, false)
3535
assert.Error(t, err)
3636
}
3737

0 commit comments

Comments
 (0)