blob: 7e462bf7d5d588439dd182f2a688e417e3331c28 [file] [log] [blame]
package main
import (
"bufio"
"fmt"
"os"
"path/filepath"
)
const baseDir = "ops" // The main directory containing A, B, C, etc.
func main() {
if err := mergeYamlFiles("categories.yaml"); err != nil {
fmt.Printf("Error processing categories.yaml: %v\n", err)
os.Exit(1)
}
if err := mergeYamlFiles("go.yaml"); err != nil {
fmt.Printf("Error processing go.yaml: %v\n", err)
os.Exit(1)
}
}
func mergeYamlFiles(targetFileName string) error {
outputFile, err := os.Create(targetFileName)
if err != nil {
return fmt.Errorf("failed to create output file %s: %w", targetFileName, err)
}
defer outputFile.Close()
writer := bufio.NewWriter(outputFile)
_, err = writer.WriteString("!sum\n")
if err != nil {
return fmt.Errorf("failed to write '!sum' to %s: %w", targetFileName, err)
}
entries, err := os.ReadDir(baseDir)
if err != nil {
return fmt.Errorf("failed to read base directory %s: %w", baseDir, err)
}
for _, entry := range entries {
if !entry.IsDir() {
continue
}
subdirPath := filepath.Join(baseDir, entry.Name())
sourceFilePath := filepath.Join(subdirPath, targetFileName)
sourceFile, err := os.Open(sourceFilePath)
if err != nil {
if os.IsNotExist(err) {
fmt.Printf("Skipping: %s not found in %s\n", targetFileName, subdirPath)
continue
}
return fmt.Errorf("failed to open source file %s: %w", sourceFilePath, err)
}
defer sourceFile.Close()
scanner := bufio.NewScanner(sourceFile)
// Skip first line
scanner.Scan()
// Append the rest of the lines to the output file
for scanner.Scan() {
line := scanner.Text()
_, err = writer.WriteString(line + "\n")
if err != nil {
return fmt.Errorf("failed to write line from %s to %s: %w", sourceFilePath, targetFileName, err)
}
}
if err := scanner.Err(); err != nil {
return fmt.Errorf("error reading lines from %s: %w", sourceFilePath, err)
}
}
return writer.Flush()
}