Skip to content

Commit 91d5975

Browse files
committed
feature: cli-config.yaml also has provider/org/repo info CF-1766
1 parent d348aba commit 91d5975

File tree

5 files changed

+101
-11
lines changed

5 files changed

+101
-11
lines changed

cmd/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func runConfigResetLogic(cmd *cobra.Command, args []string, flags domain.InitFla
112112
fmt.Println()
113113
fmt.Println("ℹ️ Resetting to local default configurations.")
114114
noTools := []domain.Tool{} // Empty slice for tools as we are in local mode without specific toolset from API initially
115-
if err := configsetup.CreateConfigurationFiles(noTools, cliLocalMode); err != nil {
115+
if err := configsetup.CreateConfigurationFiles(noTools, cliLocalMode, flags); err != nil {
116116
log.Fatalf("Failed to create base configuration files: %v", err)
117117
}
118118
// Create default configuration files for tools

cmd/configsetup/setup.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -212,15 +212,15 @@ func CreateGitIgnoreFile() error {
212212
return writeConfigFile(gitIgnorePath, []byte(content))
213213
}
214214

215-
func CreateConfigurationFiles(tools []domain.Tool, cliLocalMode bool) error {
215+
func CreateConfigurationFiles(tools []domain.Tool, cliLocalMode bool, flags domain.InitFlags) error {
216216
// Create project config file
217217
configContent := ConfigFileTemplate(tools)
218218
if err := writeConfigFile(config.Config.ProjectConfigFile(), []byte(configContent)); err != nil {
219219
return fmt.Errorf("failed to write project config file: %w", err)
220220
}
221221

222222
// Create CLI config file
223-
cliConfigContent := buildCliConfigContent(cliLocalMode)
223+
cliConfigContent := buildCliConfigContent(cliLocalMode, flags)
224224
if err := writeConfigFile(config.Config.CliConfigFile(), []byte(cliConfigContent)); err != nil {
225225
return fmt.Errorf("failed to write CLI config file: %w", err)
226226
}
@@ -229,12 +229,12 @@ func CreateConfigurationFiles(tools []domain.Tool, cliLocalMode bool) error {
229229
}
230230

231231
// buildCliConfigContent creates the CLI configuration content
232-
func buildCliConfigContent(cliLocalMode bool) string {
233-
mode := "remote"
232+
func buildCliConfigContent(cliLocalMode bool, initFlags domain.InitFlags) string {
234233
if cliLocalMode {
235-
mode = "local"
234+
return fmt.Sprintf("mode: local")
235+
} else {
236+
return fmt.Sprintf("mode: remote\nprovider: %s\norg: %s\nrepository: %s", initFlags.Provider, initFlags.Organization, initFlags.Repository)
236237
}
237-
return fmt.Sprintf("mode: %s", mode)
238238
}
239239

240240
// RuntimePluginConfig holds the structure of the runtime plugin.yaml file
@@ -425,7 +425,7 @@ func BuildRepositoryConfigurationFiles(flags domain.InitFlags) error {
425425
logVersionConflicts(familyToVersions, toolsWithLatestVersion)
426426

427427
// Create main config files with all enabled API tools (including cli-config.yaml)
428-
if err := CreateConfigurationFiles(toolsWithLatestVersion, false); err != nil {
428+
if err := CreateConfigurationFiles(toolsWithLatestVersion, false, flags); err != nil {
429429
return err
430430
}
431431

cmd/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ var initCmd = &cobra.Command{
4242
fmt.Println()
4343
fmt.Println("ℹ️ No project token was specified, fetching codacy default configurations")
4444
noTools := []domain.Tool{}
45-
err := configsetup.CreateConfigurationFiles(noTools, cliLocalMode)
45+
err := configsetup.CreateConfigurationFiles(noTools, cliLocalMode, initFlags)
4646
if err != nil {
4747
log.Fatal(err)
4848
}

cmd/init_test.go

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ func TestInitCommand_NoToken(t *testing.T) {
220220
cliLocalMode := len(currentInitFlags.ApiToken) == 0
221221
if cliLocalMode {
222222
noTools := []domain.Tool{}
223-
err := configsetup.CreateConfigurationFiles(noTools, cliLocalMode)
223+
err := configsetup.CreateConfigurationFiles(noTools, cliLocalMode, currentInitFlags)
224224
assert.NoError(t, err, "CreateConfigurationFiles should not return an error")
225225
if err := configsetup.BuildDefaultConfigurationFiles(toolsConfigDir, currentInitFlags); err != nil {
226226
t.Fatalf("Failed to build default configuration files: %v", err)
@@ -255,4 +255,91 @@ func TestInitCommand_NoToken(t *testing.T) {
255255
_, err := os.Stat(filePath)
256256
assert.NoError(t, err, "Expected config file %s to be created at %s", file, filePath)
257257
}
258+
259+
cliConfigPath := filepath.Join(codacyDir, "cli-config.yaml")
260+
cliConfigFileContent, err := os.ReadFile(cliConfigPath)
261+
assert.NoError(t, err, "Expected cli-config.yaml file to be created at %s", cliConfigPath)
262+
263+
assert.Equal(t, cliConfigFileContent, "mode: remote")
264+
}
265+
266+
func TestInitCommand_WithToken(t *testing.T) {
267+
tempDir := t.TempDir()
268+
originalWD, err := os.Getwd()
269+
assert.NoError(t, err, "Failed to get current working directory")
270+
defer os.Chdir(originalWD)
271+
272+
// Use the real plugins/tools/semgrep/rules.yaml file
273+
rulesPath := filepath.Join("..", "plugins", "tools", "semgrep", "rules.yaml")
274+
if _, err := os.Stat(rulesPath); os.IsNotExist(err) {
275+
t.Skipf("plugins/tools/semgrep/rules.yaml not found at %s; skipping test", rulesPath)
276+
}
277+
278+
// Change to the temp directory to simulate a new project
279+
err = os.Chdir(tempDir)
280+
assert.NoError(t, err, "Failed to change working directory to tempDir")
281+
282+
// Simulate running init with no token
283+
currentInitFlags := domain.InitFlags{
284+
ApiToken: "token",
285+
Provider: "gh",
286+
Organization: "acme",
287+
Repository: "acme-repo",
288+
}
289+
290+
// Call the Run logic from initCmd
291+
if err := config.Config.CreateLocalCodacyDir(); err != nil {
292+
t.Fatalf("Failed to create local codacy directory: %v", err)
293+
}
294+
295+
toolsConfigDir := config.Config.ToolsConfigDirectory()
296+
if err := os.MkdirAll(toolsConfigDir, constants.DefaultDirPerms); err != nil {
297+
t.Fatalf("Failed to create tools-configs directory: %v", err)
298+
}
299+
300+
cliLocalMode := len(currentInitFlags.ApiToken) == 0
301+
if cliLocalMode {
302+
noTools := []domain.Tool{}
303+
err := configsetup.CreateConfigurationFiles(noTools, cliLocalMode, currentInitFlags)
304+
assert.NoError(t, err, "CreateConfigurationFiles should not return an error")
305+
if err := configsetup.BuildDefaultConfigurationFiles(toolsConfigDir, currentInitFlags); err != nil {
306+
t.Fatalf("Failed to build default configuration files: %v", err)
307+
}
308+
if err := configsetup.CreateLanguagesConfigFileLocal(toolsConfigDir); err != nil {
309+
t.Fatalf("Failed to create languages config file: %v", err)
310+
}
311+
}
312+
313+
// Assert that the expected config files are created
314+
codacyDir := config.Config.LocalCodacyDirectory()
315+
expectedFiles := []string{
316+
filepath.Join("tools-configs", "eslint.config.mjs"),
317+
filepath.Join("tools-configs", "trivy.yaml"),
318+
filepath.Join("tools-configs", "ruleset.xml"),
319+
filepath.Join("tools-configs", "pylint.rc"),
320+
filepath.Join("tools-configs", "analysis_options.yaml"),
321+
filepath.Join("tools-configs", "semgrep.yaml"),
322+
filepath.Join("tools-configs", "lizard.yaml"),
323+
"codacy.yaml",
324+
"cli-config.yaml",
325+
filepath.Join("tools-configs", "languages-config.yaml"),
326+
".gitignore",
327+
}
328+
329+
for _, file := range expectedFiles {
330+
filePath := filepath.Join(codacyDir, file)
331+
if file == ".gitignore" {
332+
filePath = filepath.Join(config.Config.LocalCodacyDirectory(), file)
333+
}
334+
335+
_, err := os.Stat(filePath)
336+
assert.NoError(t, err, "Expected config file %s to be created at %s", file, filePath)
337+
}
338+
339+
cliConfigPath := filepath.Join(codacyDir, "cli-config.yaml")
340+
cliConfigFileContent, err := os.ReadFile(cliConfigPath)
341+
assert.NoError(t, err, "Expected cli-config.yaml file to be created at %s", cliConfigPath)
342+
343+
assert.Equal(t, cliConfigFileContent, "mode: remote\nprovider: gh\norganizg4g4ation: acme\nrepository: acme-repo")
344+
258345
}
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
mode: remote
1+
mode: remote
2+
provider: gh
3+
organization: troubleshoot-codacy-dev
4+
repository: codacy-cli-test

0 commit comments

Comments
 (0)