-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathconfig_creators.go
More file actions
72 lines (60 loc) · 2.44 KB
/
config_creators.go
File metadata and controls
72 lines (60 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Package configsetup provides helpers to create Codacy configuration
// and helper files locally.
package configsetup
import (
"fmt"
"path/filepath"
"codacy/cli-v2/config"
"codacy/cli-v2/constants"
"codacy/cli-v2/domain"
"codacy/cli-v2/tools"
"gopkg.in/yaml.v3"
)
// CreateLanguagesConfigFileLocal writes the languages configuration file to
// the provided directory using data from the Codacy API.
func CreateLanguagesConfigFileLocal(toolsConfigDir string) error {
// Build tool language configurations from API
configTools, err := tools.BuildLanguagesConfigFromAPI()
if err != nil {
return fmt.Errorf("failed to build languages config from API: %w", err)
}
// Create the config structure
config := domain.LanguagesConfig{
Tools: configTools,
}
// Marshal to YAML
data, err := yaml.Marshal(config)
if err != nil {
return fmt.Errorf("failed to marshal languages config to YAML: %w", err)
}
return writeConfigFile(filepath.Join(toolsConfigDir, constants.LanguagesConfigFileName), data)
}
// CreateGitIgnoreFile creates a default .gitignore in the local Codacy
// directory to avoid committing generated files.
func CreateGitIgnoreFile() error {
gitIgnorePath := filepath.Join(config.Config.LocalCodacyDirectory(), constants.GitIgnoreFileName)
content := "# Codacy CLI\ntools-configs/\n.gitignore\ncli-config.yaml\nlogs/\n"
return writeConfigFile(gitIgnorePath, []byte(content))
}
// CreateConfigurationFiles generates project configuration files
// (codacy.yaml and cli-config.yaml).
func CreateConfigurationFiles(tools []domain.Tool, cliLocalMode bool, flags domain.InitFlags) error {
// Create project config file
configContent := ConfigFileTemplate(tools)
if err := writeConfigFile(config.Config.ProjectConfigFile(), []byte(configContent)); err != nil {
return fmt.Errorf("failed to write project config file: %w", err)
}
// Create CLI config file
cliConfigContent := buildCliConfigContent(cliLocalMode, flags)
if err := writeConfigFile(config.Config.CliConfigFile(), []byte(cliConfigContent)); err != nil {
return fmt.Errorf("failed to write CLI config file: %w", err)
}
return nil
}
// buildCliConfigContent creates the CLI configuration content.
func buildCliConfigContent(cliLocalMode bool, initFlags domain.InitFlags) string {
if cliLocalMode {
return fmt.Sprintf("mode: local")
}
return fmt.Sprintf("mode: remote\nprovider: %s\norganization: %s\nrepository: %s", initFlags.Provider, initFlags.Organization, initFlags.Repository)
}