90 lines
1.5 KiB
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)
|
|
}
|
|
}
|
|
}
|