65 lines
1.2 KiB
Go
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))
|
|
}
|