package main import ( "fmt" "sync" "git.tek.govt.hu/dowerx/buildx-manager/buildx" "git.tek.govt.hu/dowerx/buildx-manager/config" "github.com/sanity-io/litter" ) func main() { cfg := config.GetConfig() job, err := buildx.LoadJob(cfg.File) if err != nil { panic(err) } var buildCommands []buildx.Command var tagCommands []buildx.Command for _, repo := range job.Repositories { bcmd, tcmd, err := buildx.RepoToCommands(&repo, job.Registries) if err != nil { panic(err) } buildCommands = append(buildCommands, bcmd...) tagCommands = append(tagCommands, tcmd...) } if cfg.Verbose { fmt.Println("config:") litter.Dump(cfg) fmt.Println("\njob loaded:") litter.Dump(job) fmt.Println("\nbuild commands:", len(buildCommands)) litter.Dump(buildCommands) fmt.Println("\ntag commands:", len(tagCommands)) litter.Dump(tagCommands) } if cfg.Dryrun { return } // build if cfg.Parallel { errors := make(chan error, len(buildCommands)) var wait sync.WaitGroup // start builds for _, cmd := range buildCommands { wait.Add(1) go func() { errors <- cmd.Run() wait.Done() }() } // wait for builds wait.Wait() close(errors) for err := range errors { if err != nil { panic(err) } } } else { for _, cmd := range buildCommands { err = cmd.Run() if err != nil { panic(err) } } } // tag for _, cmd := range tagCommands { err = cmd.Run() if err != nil { panic(err) } } }