Skip to content

Commit 3af22b8

Browse files
author
Christian Weichel
committed
[werft] Added werft compatible reporter
1 parent d6bf2fc commit 3af22b8

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

cmd/build.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,23 @@ var buildCmd = &cobra.Command{
8585
}
8686
}
8787

88+
werftlog, err := cmd.Flags().GetBool("werft")
89+
if err != nil {
90+
log.Fatal(err)
91+
}
92+
var reporter leeway.Reporter
93+
if werftlog {
94+
reporter = leeway.NewWerftReporter()
95+
} else {
96+
reporter = leeway.NewConsoleReporter()
97+
}
98+
8899
err = leeway.Build(pkg,
89100
leeway.WithLocalCache(localCache),
90101
leeway.WithRemoteCache(remoteCache),
91102
leeway.WithDryRun(dryrun),
92103
leeway.WithBuildPlan(planOutlet),
104+
leeway.WithReporter(reporter),
93105
)
94106
if err != nil {
95107
log.Fatal(err)
@@ -157,6 +169,7 @@ func init() {
157169
buildCmd.Flags().String("serve", "", "After a successful build this starts a webserver on the given address serving the build result (e.g. --serve localhost:8080)")
158170
buildCmd.Flags().String("save", "", "After a successful build this saves the build result as tar.gz file in the local filesystem (e.g. --save build-result.tar.gz)")
159171
buildCmd.Flags().String("dump-plan", "", "Writes the build plan as JSON to a file. Use \"-\" to write the build plan to stderr.")
172+
buildCmd.Flags().Bool("werft", false, "Produce werft CI compatible output")
160173
}
161174

162175
type pushOnlyRemoteCache struct {

pkg/leeway/reporter.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,3 +164,52 @@ func (r *ConsoleReporter) PackageBuildFinished(pkg *Package, err error) {
164164
func getRunPrefix(p *Package) string {
165165
return color.Gray.Render(fmt.Sprintf("[%s] ", p.FullName()))
166166
}
167+
168+
// NewWerftReporter craetes a new werft compatible reporter
169+
func NewWerftReporter() *WerftReporter {
170+
return &WerftReporter{
171+
ConsoleReporter: NewConsoleReporter(),
172+
}
173+
}
174+
175+
// WerftReporter works like the console reporter but adds werft output
176+
type WerftReporter struct {
177+
*ConsoleReporter
178+
}
179+
180+
// BuildStarted is called when the build of a package is started by the user.
181+
func (r *WerftReporter) BuildStarted(pkg *Package, status map[*Package]PackageBuildStatus) {
182+
r.ConsoleReporter.BuildStarted(pkg, status)
183+
184+
for p, s := range status {
185+
if s != PackageNotBuiltYet {
186+
continue
187+
}
188+
189+
fmt.Printf("[%s|START] will be built\n", p.FullName())
190+
}
191+
}
192+
193+
// PackageBuildFinished is called when the package build has finished.
194+
func (r *WerftReporter) PackageBuildFinished(pkg *Package, err error) {
195+
r.ConsoleReporter.PackageBuildFinished(pkg, err)
196+
197+
if cfg, ok := pkg.Config.(DockerPkgConfig); ok && pkg.Type == DockerPackage {
198+
for _, img := range cfg.Image {
199+
fmt.Printf("[docker|RESULT] %s\n", img)
200+
}
201+
}
202+
203+
var (
204+
status string
205+
msg string
206+
)
207+
if err == nil {
208+
status = "DONE"
209+
msg = "build succeeded"
210+
} else {
211+
status = "FAIL"
212+
msg = err.Error()
213+
}
214+
fmt.Printf("[%s|%s] %s\n", pkg.FullName(), status, msg)
215+
}

0 commit comments

Comments
 (0)