Skip to content

Commit 4fa6111

Browse files
committed
Introduce composite reporter
1 parent 669a4b6 commit 4fa6111

File tree

2 files changed

+70
-30
lines changed

2 files changed

+70
-30
lines changed

cmd/build.go

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -236,23 +236,18 @@ func getBuildOpts(cmd *cobra.Command) ([]leeway.BuildOption, *leeway.FilesystemC
236236
}
237237
}
238238

239-
werftlog, err := cmd.Flags().GetBool("werft")
240-
if err != nil {
241-
log.Fatal(err)
242-
}
243-
var reporter leeway.Reporter
244-
if werftlog {
245-
reporter = leeway.NewWerftReporter()
246-
} else {
247-
reporter = leeway.NewConsoleReporter()
248-
}
239+
var reporter leeway.CompositeReporter
240+
reporter = append(reporter, leeway.NewConsoleReporter())
249241

250-
report, err := cmd.Flags().GetString("report")
251-
if err != nil {
242+
if werftlog, err := cmd.Flags().GetBool("werft"); err != nil {
252243
log.Fatal(err)
244+
} else if werftlog {
245+
reporter = append(reporter, leeway.NewWerftReporter())
253246
}
254-
if report != "" {
255-
reporter = leeway.NewHTMLReporter(reporter, report)
247+
if report, err := cmd.Flags().GetString("report"); err != nil {
248+
log.Fatal(err)
249+
} else if report != "" {
250+
reporter = append(reporter, leeway.NewHTMLReporter(report))
256251
}
257252

258253
dontTest, err := cmd.Flags().GetBool("dont-test")

pkg/leeway/reporter.go

Lines changed: 61 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -183,20 +183,16 @@ func getRunPrefix(p *Package) string {
183183

184184
// NewWerftReporter craetes a new werft compatible reporter
185185
func NewWerftReporter() *WerftReporter {
186-
return &WerftReporter{
187-
ConsoleReporter: NewConsoleReporter(),
188-
}
186+
return &WerftReporter{}
189187
}
190188

191189
// WerftReporter works like the console reporter but adds werft output
192190
type WerftReporter struct {
193-
*ConsoleReporter
191+
NoopReporter
194192
}
195193

196194
// BuildStarted is called when the build of a package is started by the user.
197195
func (r *WerftReporter) BuildStarted(pkg *Package, status map[*Package]PackageBuildStatus) {
198-
r.ConsoleReporter.BuildStarted(pkg, status)
199-
200196
for p, s := range status {
201197
if s != PackageNotBuiltYet {
202198
continue
@@ -211,8 +207,6 @@ func (r *WerftReporter) BuildStarted(pkg *Package, status map[*Package]PackageBu
211207

212208
// PackageBuildFinished is called when the package build has finished.
213209
func (r *WerftReporter) PackageBuildFinished(pkg *Package, err error) {
214-
r.ConsoleReporter.PackageBuildFinished(pkg, err)
215-
216210
if cfg, ok := pkg.Config.(DockerPkgConfig); ok && pkg.Type == DockerPackage {
217211
for _, img := range cfg.Image {
218212
fmt.Printf("[docker|RESULT] %s\n", img)
@@ -291,16 +285,14 @@ func (r *PackageReport) Error() string {
291285
}
292286

293287
type HTMLReporter struct {
294-
delegate Reporter
295288
filename string
296289
reports map[string]*PackageReport
297290
rootPackage *Package
298291
mu sync.RWMutex
299292
}
300293

301-
func NewHTMLReporter(del Reporter, filename string) *HTMLReporter {
294+
func NewHTMLReporter(filename string) *HTMLReporter {
302295
return &HTMLReporter{
303-
delegate: del,
304296
filename: filename,
305297
reports: make(map[string]*PackageReport),
306298
}
@@ -331,16 +323,13 @@ func (r *HTMLReporter) getReport(pkg *Package) *PackageReport {
331323

332324
func (r *HTMLReporter) BuildStarted(pkg *Package, status map[*Package]PackageBuildStatus) {
333325
r.rootPackage = pkg
334-
r.delegate.BuildStarted(pkg, status)
335326
}
336327

337328
func (r *HTMLReporter) BuildFinished(pkg *Package, err error) {
338-
r.delegate.BuildFinished(pkg, err)
339329
r.Report()
340330
}
341331

342332
func (r *HTMLReporter) PackageBuildStarted(pkg *Package) {
343-
r.delegate.PackageBuildStarted(pkg)
344333
rep := r.getReport(pkg)
345334
rep.start = time.Now()
346335
rep.status = PackageBuilding
@@ -349,11 +338,9 @@ func (r *HTMLReporter) PackageBuildStarted(pkg *Package) {
349338
func (r *HTMLReporter) PackageBuildLog(pkg *Package, isErr bool, buf []byte) {
350339
report := r.getReport(pkg)
351340
report.logs.Write(buf)
352-
r.delegate.PackageBuildLog(pkg, isErr, buf)
353341
}
354342

355343
func (r *HTMLReporter) PackageBuildFinished(pkg *Package, err error) {
356-
r.delegate.PackageBuildFinished(pkg, err)
357344
rep := r.getReport(pkg)
358345
rep.duration = time.Since(rep.start)
359346
rep.status = PackageBuilt
@@ -432,3 +419,61 @@ func (r *HTMLReporter) Report() {
432419
log.WithError(err).Fatal("Can't render template")
433420
}
434421
}
422+
423+
type CompositeReporter []Reporter
424+
425+
// BuildFinished implements Reporter
426+
func (cr CompositeReporter) BuildFinished(pkg *Package, err error) {
427+
for _, r := range cr {
428+
r.BuildFinished(pkg, err)
429+
}
430+
}
431+
432+
// BuildStarted implements Reporter
433+
func (cr CompositeReporter) BuildStarted(pkg *Package, status map[*Package]PackageBuildStatus) {
434+
for _, r := range cr {
435+
r.BuildStarted(pkg, status)
436+
}
437+
}
438+
439+
// PackageBuildFinished implements Reporter
440+
func (cr CompositeReporter) PackageBuildFinished(pkg *Package, err error) {
441+
for _, r := range cr {
442+
r.PackageBuildFinished(pkg, err)
443+
}
444+
}
445+
446+
// PackageBuildLog implements Reporter
447+
func (cr CompositeReporter) PackageBuildLog(pkg *Package, isErr bool, buf []byte) {
448+
for _, r := range cr {
449+
r.PackageBuildLog(pkg, isErr, buf)
450+
}
451+
}
452+
453+
// PackageBuildStarted implements Reporter
454+
func (cr CompositeReporter) PackageBuildStarted(pkg *Package) {
455+
for _, r := range cr {
456+
r.PackageBuildStarted(pkg)
457+
}
458+
}
459+
460+
var _ Reporter = CompositeReporter{}
461+
462+
type NoopReporter struct{}
463+
464+
// BuildFinished implements Reporter
465+
func (*NoopReporter) BuildFinished(pkg *Package, err error) {}
466+
467+
// BuildStarted implements Reporter
468+
func (*NoopReporter) BuildStarted(pkg *Package, status map[*Package]PackageBuildStatus) {}
469+
470+
// PackageBuildFinished implements Reporter
471+
func (*NoopReporter) PackageBuildFinished(pkg *Package, err error) {}
472+
473+
// PackageBuildLog implements Reporter
474+
func (*NoopReporter) PackageBuildLog(pkg *Package, isErr bool, buf []byte) {}
475+
476+
// PackageBuildStarted implements Reporter
477+
func (*NoopReporter) PackageBuildStarted(pkg *Package) {}
478+
479+
var _ Reporter = ((*NoopReporter)(nil))

0 commit comments

Comments
 (0)