Skip to content

Commit 5f83f0d

Browse files
committed
🚧 Add diagnostic logging when constructing metadata
This approach feels very "brute force." I'd like to look for a way to not have to pass the logger in so many places. 🤔
1 parent c33868f commit 5f83f0d

File tree

3 files changed

+36
-27
lines changed

3 files changed

+36
-27
lines changed

cmd/submit.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ func (s *Submit) Init(args []string, envs map[string]string) error {
143143
// Run packages up the test results and sends them to BuildPulse. It returns the
144144
// key that uniquely identifies the uploaded object.
145145
func (s *Submit) Run() (string, error) {
146-
meta, err := metadata.NewMetadata(s.version, s.envs, s.commitResolver, time.Now)
146+
meta, err := metadata.NewMetadata(s.version, s.envs, s.commitResolver, time.Now, s.diagnostics)
147147
if err != nil {
148148
return "", err
149149
}

metadata/metadata.go

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package metadata
22

33
import (
44
"fmt"
5-
"os"
65
"regexp"
76
"strconv"
87
"strings"
@@ -18,11 +17,16 @@ import (
1817
type Metadata interface {
1918
MarshalYAML() (out []byte, err error)
2019

21-
initEnvData(envs map[string]string, resolver CommitResolver) error
20+
initEnvData(envs map[string]string, resolver CommitResolver, log Logger) error
2221
initTimestamp(now func() time.Time)
2322
initVersionData(version *Version)
2423
}
2524

25+
// Logger -- TODO Add docs
26+
type Logger interface {
27+
Printf(format string, v ...interface{})
28+
}
29+
2630
// AbstractMetadata provides the fields that are common across all Metadata
2731
// instances, regardless of the specific CI provider.
2832
type AbstractMetadata struct {
@@ -45,10 +49,10 @@ type AbstractMetadata struct {
4549
TreeSHA string `yaml:":tree,omitempty"`
4650
}
4751

48-
func (a *AbstractMetadata) initCommitData(cr CommitResolver, sha string) error {
52+
func (a *AbstractMetadata) initCommitData(cr CommitResolver, sha string, log Logger) error {
4953
// Git metadata functionality is experimental. While it's experimental, detect a nil CommitResolver and allow the commit metadata fields to be uploaded with empty values.
5054
if cr == nil {
51-
fmt.Fprintf(os.Stderr, "[experimental] no commit resolver available; falling back to commit data from environment\n")
55+
log.Printf("[experimental] no commit resolver available; falling back to commit data from environment\n")
5256

5357
a.CommitSHA = sha
5458
return nil
@@ -57,7 +61,7 @@ func (a *AbstractMetadata) initCommitData(cr CommitResolver, sha string) error {
5761
// Git metadata functionality is experimental. While it's experimental, don't let this error prevent the test-reporter from continuing normal operation. Allow the commit metadata fields to be uploaded with empty values.
5862
c, err := cr.Lookup(sha)
5963
if err != nil {
60-
fmt.Fprintf(os.Stderr, "[experimental] git-based commit lookup unsuccessful; falling back to commit data from environment: %v\n", err)
64+
log.Printf("[experimental] git-based commit lookup unsuccessful; falling back to commit data from environment: %v\n", err)
6165

6266
a.CommitSHA = sha
6367
return nil
@@ -86,7 +90,7 @@ func (a *AbstractMetadata) initVersionData(version *Version) {
8690
}
8791

8892
// NewMetadata creates a new Metadata instance from the given args.
89-
func NewMetadata(version *Version, envs map[string]string, resolver CommitResolver, now func() time.Time) (Metadata, error) {
93+
func NewMetadata(version *Version, envs map[string]string, resolver CommitResolver, now func() time.Time, log Logger) (Metadata, error) {
9094
var m Metadata
9195

9296
switch {
@@ -106,7 +110,7 @@ func NewMetadata(version *Version, envs map[string]string, resolver CommitResolv
106110
return nil, fmt.Errorf("unrecognized environment: system does not appear to be a supported CI provider (Buildkite, CircleCI, GitHub Actions, Jenkins, Semaphore, or Travis CI)")
107111
}
108112

109-
if err := m.initEnvData(envs, resolver); err != nil {
113+
if err := m.initEnvData(envs, resolver, log); err != nil {
110114
return nil, err
111115
}
112116
m.initTimestamp(now)
@@ -142,12 +146,12 @@ type buildkiteMetadata struct {
142146
BuildkiteTag string `env:"BUILDKITE_TAG" yaml:":buildkite_tag,omitempty"`
143147
}
144148

145-
func (b *buildkiteMetadata) initEnvData(envs map[string]string, resolver CommitResolver) error {
149+
func (b *buildkiteMetadata) initEnvData(envs map[string]string, resolver CommitResolver, log Logger) error {
146150
if err := env.Parse(b, env.Options{Environment: envs}); err != nil {
147151
return err
148152
}
149153

150-
if err := b.initCommitData(resolver, b.BuildkiteCommit); err != nil {
154+
if err := b.initCommitData(resolver, b.BuildkiteCommit, log); err != nil {
151155
return err
152156
}
153157

@@ -199,12 +203,12 @@ type circleMetadata struct {
199203
CircleWorkflowID string `env:"CIRCLE_WORKFLOW_ID" yaml:":circle_workflow_id"`
200204
}
201205

202-
func (c *circleMetadata) initEnvData(envs map[string]string, resolver CommitResolver) error {
206+
func (c *circleMetadata) initEnvData(envs map[string]string, resolver CommitResolver, log Logger) error {
203207
if err := env.Parse(c, env.Options{Environment: envs}); err != nil {
204208
return err
205209
}
206210

207-
if err := c.initCommitData(resolver, c.CircleSHA1); err != nil {
211+
if err := c.initCommitData(resolver, c.CircleSHA1, log); err != nil {
208212
return err
209213
}
210214

@@ -243,12 +247,12 @@ type githubMetadata struct {
243247
GithubWorkflow string `env:"GITHUB_WORKFLOW" yaml:":github_workflow"`
244248
}
245249

246-
func (g *githubMetadata) initEnvData(envs map[string]string, resolver CommitResolver) error {
250+
func (g *githubMetadata) initEnvData(envs map[string]string, resolver CommitResolver, log Logger) error {
247251
if err := env.Parse(g, env.Options{Environment: envs}); err != nil {
248252
return err
249253
}
250254

251-
if err := g.initCommitData(resolver, g.GithubSHA); err != nil {
255+
if err := g.initCommitData(resolver, g.GithubSHA, log); err != nil {
252256
return err
253257
}
254258

@@ -302,12 +306,12 @@ type jenkinsMetadata struct {
302306
JenkinsWorkspace string `env:"WORKSPACE" yaml:":jenkins_workspace"`
303307
}
304308

305-
func (j *jenkinsMetadata) initEnvData(envs map[string]string, resolver CommitResolver) error {
309+
func (j *jenkinsMetadata) initEnvData(envs map[string]string, resolver CommitResolver, log Logger) error {
306310
if err := env.Parse(j, env.Options{Environment: envs}); err != nil {
307311
return err
308312
}
309313

310-
if err := j.initCommitData(resolver, j.GitCommit); err != nil {
314+
if err := j.initCommitData(resolver, j.GitCommit, log); err != nil {
311315
return err
312316
}
313317

@@ -363,12 +367,12 @@ type semaphoreMetadata struct {
363367
SemaphoreWorkflowNumber uint `env:"SEMAPHORE_WORKFLOW_NUMBER" yaml:":semaphore_workflow_number"`
364368
}
365369

366-
func (s *semaphoreMetadata) initEnvData(envs map[string]string, resolver CommitResolver) error {
370+
func (s *semaphoreMetadata) initEnvData(envs map[string]string, resolver CommitResolver, log Logger) error {
367371
if err := env.Parse(s, env.Options{Environment: envs}); err != nil {
368372
return err
369373
}
370374

371-
if err := s.initCommitData(resolver, s.SemaphoreGitSHA); err != nil {
375+
if err := s.initCommitData(resolver, s.SemaphoreGitSHA, log); err != nil {
372376
return err
373377
}
374378

@@ -419,12 +423,12 @@ type travisMetadata struct {
419423
TravisTestResult uint `env:"TRAVIS_TEST_RESULT" yaml:":travis_test_result"`
420424
}
421425

422-
func (t *travisMetadata) initEnvData(envs map[string]string, resolver CommitResolver) error {
426+
func (t *travisMetadata) initEnvData(envs map[string]string, resolver CommitResolver, log Logger) error {
423427
if err := env.Parse(t, env.Options{Environment: envs}); err != nil {
424428
return err
425429
}
426430

427-
if err := t.initCommitData(resolver, t.TravisCommit); err != nil {
431+
if err := t.initCommitData(resolver, t.TravisCommit, log); err != nil {
428432
return err
429433
}
430434

metadata/metadata_test.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ func TestNewMetadata(t *testing.T) {
176176
})
177177

178178
version := &Version{Number: "v1.2.3", GoOS: "linux"}
179-
meta, err := NewMetadata(version, tt.envs, commitResolverDouble, now)
179+
meta, err := NewMetadata(version, tt.envs, commitResolverDouble, now, &stubLogger{})
180180
assert.NoError(t, err)
181181

182182
yaml, err := meta.MarshalYAML()
@@ -187,7 +187,7 @@ func TestNewMetadata(t *testing.T) {
187187
}
188188

189189
func TestNewMetadata_unsupportedProvider(t *testing.T) {
190-
_, err := NewMetadata(&Version{}, map[string]string{}, newCommitResolverStub(), time.Now)
190+
_, err := NewMetadata(&Version{}, map[string]string{}, newCommitResolverStub(), time.Now, &stubLogger{})
191191
if assert.Error(t, err) {
192192
assert.Contains(t, err.Error(), "unrecognized environment")
193193
}
@@ -260,7 +260,7 @@ func TestNewMetadata_customCheckName(t *testing.T) {
260260
}
261261
for _, tt := range tests {
262262
t.Run(tt.name, func(t *testing.T) {
263-
meta, err := NewMetadata(&Version{}, tt.envs, newCommitResolverStub(), time.Now)
263+
meta, err := NewMetadata(&Version{}, tt.envs, newCommitResolverStub(), time.Now, &stubLogger{})
264264
assert.NoError(t, err)
265265

266266
yaml, err := meta.MarshalYAML()
@@ -315,7 +315,7 @@ func Test_buildkiteMetadata_initEnvData_extraFields(t *testing.T) {
315315
for _, tt := range tests {
316316
t.Run(tt.name, func(t *testing.T) {
317317
meta := buildkiteMetadata{}
318-
err := meta.initEnvData(tt.envs, newCommitResolverStub())
318+
err := meta.initEnvData(tt.envs, newCommitResolverStub(), &stubLogger{})
319319
assert.NoError(t, err)
320320

321321
yaml, err := meta.MarshalYAML()
@@ -359,7 +359,7 @@ func Test_circleMetadata_initEnvData_extraFields(t *testing.T) {
359359
for _, tt := range tests {
360360
t.Run(tt.name, func(t *testing.T) {
361361
meta := circleMetadata{}
362-
err := meta.initEnvData(tt.envs, newCommitResolverStub())
362+
err := meta.initEnvData(tt.envs, newCommitResolverStub(), &stubLogger{})
363363
assert.NoError(t, err)
364364

365365
yaml, err := meta.MarshalYAML()
@@ -400,7 +400,7 @@ func Test_githubMetadata_initEnvData_refTypes(t *testing.T) {
400400
for _, tt := range tests {
401401
t.Run(tt.name, func(t *testing.T) {
402402
meta := githubMetadata{}
403-
err := meta.initEnvData(tt.envs, newCommitResolverStub())
403+
err := meta.initEnvData(tt.envs, newCommitResolverStub(), &stubLogger{})
404404
assert.NoError(t, err)
405405

406406
yaml, err := meta.MarshalYAML()
@@ -449,7 +449,7 @@ func Test_travisMetadata_initEnvData_extraFields(t *testing.T) {
449449
for _, tt := range tests {
450450
t.Run(tt.name, func(t *testing.T) {
451451
meta := travisMetadata{}
452-
err := meta.initEnvData(tt.envs, newCommitResolverStub())
452+
err := meta.initEnvData(tt.envs, newCommitResolverStub(), &stubLogger{})
453453
assert.NoError(t, err)
454454

455455
yaml, err := meta.MarshalYAML()
@@ -492,3 +492,8 @@ func newCommitResolverStub() CommitResolver {
492492
return &Commit{}, nil
493493
})
494494
}
495+
496+
// TODO: Look for better way to create a no-op logger for testing
497+
type stubLogger struct{}
498+
499+
func (s *stubLogger) Printf(format string, v ...interface{}) {}

0 commit comments

Comments
 (0)