in cli/bpmetadata/tfconfig.go [93:137]
func getBlueprintVersion(configPath string) (*blueprintVersion, error) {
bytes, err := os.ReadFile(configPath)
if err != nil {
return nil, err
}
//create hcl file object from the provided tf config
fileName := filepath.Base(configPath)
var diags hcl.Diagnostics
p := hclparse.NewParser()
versionsFile, fileDiags := p.ParseHCL(bytes, fileName)
diags = append(diags, fileDiags...)
err = hasHclErrors(diags)
if err != nil {
return nil, err
}
//parse out the blueprint version from the config
modName, err := parseBlueprintVersion(versionsFile, diags)
if err != nil {
return nil, fmt.Errorf("error parsing blueprint version: %w", err)
}
//parse out the required version from the config
var hclModule tfconfig.Module
hclModule.RequiredProviders = make(map[string]*tfconfig.ProviderRequirement)
hclModuleDiag := tfconfig.LoadModuleFromFile(versionsFile, &hclModule)
diags = append(diags, hclModuleDiag...)
err = hasHclErrors(diags)
if err != nil {
return nil, err
}
requiredCore := ""
if len(hclModule.RequiredCore) != 0 {
//always looking for the first element since tf blueprints
//have one required core version
requiredCore = hclModule.RequiredCore[0]
}
return &blueprintVersion{
moduleVersion: modName,
requiredTfVersion: requiredCore,
}, nil
}