in scripts/update_assets_md/main.go [190:261]
func writeSummary(plannedByProvider, implementedByProvider *ByProvider, filepath string) error {
file, err := os.Create(filepath)
if err != nil {
return err
}
defer file.Close()
for providerNo, provider := range []string{AWS_PREFIX, AZURE_PREFIX, GCP_PREFIX} {
planned := plannedByProvider.Get(provider)
implemented := implementedByProvider.Get(provider)
sortedKeys := slices.Sorted(maps.Keys(planned))
// stats
totalImplemented := 0
implementedByCategory := map[string]int{}
plannedByCategory := map[string]int{}
// table of assets
table := []string{
"<details> <summary>Full table</summary>\n",
"| Category | Old Type | Type | Implemented? |",
"|---|---|---|---|",
}
for _, key := range sortedKeys {
item := planned[key]
status := "No ❌"
plannedByCategory[item.Category] += 1
if _, ok := implemented[key]; ok {
status = "Yes ✅"
totalImplemented += 1
implementedByCategory[item.Category] += 1
}
table = append(table,
fmt.Sprintf(
"| %s | %s | %s | %s |",
item.Category, item.OldType, item.Type, status,
),
)
}
table = append(table, "\n</details>")
// write ASSETS.md
if providerNo > 0 {
writeToFile(file, "\n\n")
}
writeToFile(file, fmt.Sprintf("## %s Resources\n\n", strings.ToUpper(provider)))
percentage := totalImplemented * 100 / len(planned)
writeToFile(
file,
fmt.Sprintf("**Progress: %d%% (%d/%d)**\n", percentage, totalImplemented, len(planned)),
)
sortedCategories := slices.Sorted(maps.Keys(plannedByCategory))
for _, category := range sortedCategories {
plannedCount := plannedByCategory[category]
implementedCount := implementedByCategory[category]
percentage = implementedCount * 100 / plannedCount
writeToFile(
file,
fmt.Sprintf("%s: %d%% (%d/%d)\n", category, percentage, implementedCount, plannedCount),
)
}
writeToFile(file, "\n"+strings.Join(table, "\n"))
}
writeToFile(file, "\n") // required for valid Markdown :o
return nil
}