Skip to content

Commit e8d0fe4

Browse files
committed
Add GitHub action build reporter
1 parent 60f3625 commit e8d0fe4

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

cmd/build.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ func addBuildFlags(cmd *cobra.Command) {
174174
cmd.Flags().StringToString("docker-build-options", nil, "Options passed to all 'docker build' commands")
175175
cmd.Flags().String("report", "", "Generate a HTML report after the build has finished. (e.g. --report myreport.html)")
176176
cmd.Flags().String("report-segment", os.Getenv("LEEWAY_SEGMENT_KEY"), "Report build events to segment using the segment key (defaults to $LEEWAY_SEGMENT_KEY)")
177+
cmd.Flags().Bool("report-github", os.Getenv("GITHUB_OUTPUT") != "", "Report package build success/failure to GitHub Actions using the GITHUB_OUTPUT environment variable")
177178
}
178179

179180
func getBuildOpts(cmd *cobra.Command) ([]leeway.BuildOption, *leeway.FilesystemCache) {
@@ -255,6 +256,11 @@ func getBuildOpts(cmd *cobra.Command) ([]leeway.BuildOption, *leeway.FilesystemC
255256
} else if segmentkey != "" {
256257
reporter = append(reporter, leeway.NewSegmentReporter(segmentkey))
257258
}
259+
if github, err := cmd.Flags().GetBool("report-github"); err != nil {
260+
log.Fatal(err)
261+
} else if github {
262+
reporter = append(reporter, leeway.NewGitHubReporter())
263+
}
258264

259265
dontTest, err := cmd.Flags().GetBool("dont-test")
260266
if err != nil {

pkg/leeway/reporter.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,3 +621,35 @@ func (sr *SegmentReporter) track(event string, props segment.Properties) {
621621
log.WithField("evt", string(fc)).Debug("reported segment event")
622622
}
623623
}
624+
625+
func NewGitHubReporter() *GitHubActionReporter {
626+
return &GitHubActionReporter{}
627+
}
628+
629+
type GitHubActionReporter struct {
630+
NoopReporter
631+
632+
mu sync.Mutex
633+
}
634+
635+
func (sr *GitHubActionReporter) PackageBuildFinished(pkg *Package, rep *PackageBuildReport) {
636+
sr.mu.Lock()
637+
defer sr.mu.Unlock()
638+
639+
fn, ok := os.LookupEnv("GITHUB_OUTPUT")
640+
if !ok || fn == "" {
641+
return
642+
}
643+
f, err := os.OpenFile(fn, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
644+
if err != nil {
645+
log.WithField("fn", fn).WithError(err).Warn("cannot open GITHUB_OUTPUT file")
646+
return
647+
}
648+
defer f.Close()
649+
650+
var success bool
651+
if rep.Error == nil {
652+
success = true
653+
}
654+
fmt.Fprintf(f, "%s=%v\n", pkg.FilesystemSafeName(), success)
655+
}

0 commit comments

Comments
 (0)