traefik/internal/testsci/genmatrix.go
2025-06-02 15:50:06 +02:00

65 lines
1.2 KiB
Go

package main
import (
"encoding/json"
"fmt"
"os"
"strings"
"github.com/rs/zerolog/log"
"golang.org/x/tools/go/packages"
)
const groupCount = 12
type group struct {
Group string `json:"group"`
}
func main() {
cfg := &packages.Config{
Mode: packages.NeedName,
Dir: ".",
}
pkgs, err := packages.Load(cfg, "./cmd/...", "./pkg/...")
if err != nil {
log.Fatal().Err(err).Msg("Loading packages")
}
var packageNames []string
for _, pkg := range pkgs {
if pkg.PkgPath != "" {
packageNames = append(packageNames, pkg.PkgPath)
}
}
total := len(packageNames)
perGroup := (total + groupCount - 1) / groupCount
fmt.Fprintf(os.Stderr, "Total packages: %d\n", total)
fmt.Fprintf(os.Stderr, "Packages per group: %d\n", perGroup)
var matrix []group
for i := range groupCount {
start := i * perGroup
end := start + perGroup
if start >= total {
break
}
if end > total {
end = total
}
g := strings.Join(packageNames[start:end], " ")
matrix = append(matrix, group{Group: g})
}
jsonBytes, err := json.Marshal(matrix)
if err != nil {
log.Fatal().Err(err).Msg("Failed to marshal matrix")
}
// Output for GitHub Actions
fmt.Printf("matrix=%s\n", string(jsonBytes))
}