func CreateEffectiveConfigFiles()

in internal/platform/effectiveconfig/config.go [43:127]


func CreateEffectiveConfigFiles(
	localQodanaYamlFullPath string,
	globalConfigurationsDir string,
	globalConfigId string,
	jrePath string,
	effectiveConfigDir string,
	logDir string,
) (Files, error) {
	if globalConfigId != "" && globalConfigurationsDir == "" {
		return Files{}, fmt.Errorf(
			"global configuration id %s is defined without global cofigurations directory",
			globalConfigId,
		)
	}
	if globalConfigurationsDir != "" && globalConfigId == "" {
		return Files{}, fmt.Errorf(
			"global configurations directory %s is defined without global configuration id",
			globalConfigurationsDir,
		)
	}
	globalConfigurationsFile := ""
	if globalConfigurationsDir != "" {
		globalConfigurationsYamlFilename := "qodana-global-configurations.yaml"
		globalConfigurationsFile = filepath.Join(globalConfigurationsDir, globalConfigurationsYamlFilename)
		if !isFileExists(globalConfigurationsFile) {
			msg.ErrorMessage(
				"%s file not found in global configuration directory %s",
				globalConfigurationsYamlFilename,
				globalConfigurationsDir,
			)
			return Files{}, fmt.Errorf("%s doesn't exist", globalConfigurationsFile)
		}
	}

	configLoaderTempDir, cleanup, err := utils.CreateTempDir("config-loader-cli")
	if err != nil {
		return Files{}, err
	}
	defer cleanup()

	configLoaderCliJar, err := createConfigLoaderCliJar(configLoaderTempDir)
	if err != nil {
		return Files{}, err
	}
	defer func(name string) {
		err := os.Remove(name)
		if err != nil {
			log.Warnf("Failed to delete config-loader-cli.jar: %v", err)
		}
	}(configLoaderCliJar)
	args, err := configurationLoaderCliArgs(
		jrePath,
		configLoaderCliJar,
		localQodanaYamlFullPath,
		globalConfigurationsFile,
		globalConfigId,
		effectiveConfigDir,
	)
	if err != nil {
		return Files{}, err
	}

	log.Debugf("Creating effective configuration in '%s' directory, args: %v", effectiveConfigDir, args)
	if _, _, res, err := utils.LaunchAndLog(logDir, "config-loader-cli", args...); res > 0 || err != nil {
		if err == nil {
			err = errors.New("failed to create effective configuration")
		} else {
			err = fmt.Errorf("failed to create effective configuration: %v", err)
		}
		msg.ErrorMessage("Failed to create effective configuration.")
		return Files{}, err
	}

	effectiveQodanaYamlData, err := getEffectiveQodanaYamlData(effectiveConfigDir)
	if err != nil {
		return Files{}, err
	}

	err = verifyEffectiveQodanaYamlIdeAndLinterMatchLocal(effectiveQodanaYamlData, localQodanaYamlFullPath)
	if err != nil {
		return Files{}, err
	}
	msg.SuccessMessage("Loaded Qodana Configuration")
	return effectiveQodanaYamlData, nil
}