buildx-manager/main.go

90 lines
1.5 KiB
Go

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)
}
}
}