Skip to content

Commit

Permalink
Merge pull request #95 from buildpulse/quota
Browse files Browse the repository at this point in the history
Added support for quotas
  • Loading branch information
siddhantdange committed Nov 29, 2023
2 parents 1d8893d + edf2a73 commit 3c98406
Show file tree
Hide file tree
Showing 8 changed files with 133 additions and 14 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- name: Set up Go 1.x
uses: actions/setup-go@v2
with:
go-version: "1.19"
go-version: "1.21"
check-latest: true
id: go

Expand Down Expand Up @@ -61,7 +61,7 @@ jobs:
- name: Set up Go 1.x
uses: actions/setup-go@v2
with:
go-version: "1.19"
go-version: "1.21"
check-latest: true

- name: Install govulncheck
Expand All @@ -82,7 +82,7 @@ jobs:
- name: Set up Go 1.x
uses: actions/setup-go@v2
with:
go-version: "1.19"
go-version: "1.21"
check-latest: true
id: go

Expand Down Expand Up @@ -122,7 +122,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.19
go-version: 1.21
check-latest: true
- name: Install upx
run: brew install upx
Expand Down
3 changes: 1 addition & 2 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/buildpulse/test-reporter

go 1.19
go 1.21

require (
github.com/aws/aws-sdk-go v1.44.211
Expand All @@ -11,7 +11,6 @@ require (
github.com/mholt/archiver/v3 v3.5.1
github.com/otiai10/copy v1.9.0
github.com/stretchr/testify v1.8.2
github.com/yargevad/filepathx v1.0.0
gopkg.in/yaml.v3 v3.0.1
)

Expand Down
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,6 @@ github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
github.com/yargevad/filepathx v1.0.0 h1:SYcT+N3tYGi+NvazubCNlvgIPbzAk7i7y2dwg3I5FYc=
github.com/yargevad/filepathx v1.0.0/go.mod h1:BprfX/gpYNJHJfc35GjRRpVcwWXS89gGulUIU5tK3tA=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
golang.org/x/arch v0.1.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
Expand Down
8 changes: 7 additions & 1 deletion internal/cmd/submit/submit.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ type Submit struct {
repositoryID uint64
repositoryPath string
tree string
quotaID string
disableCoverageAutoDiscovery bool
credentials credentials
commitResolver metadata.CommitResolver
Expand All @@ -97,6 +98,7 @@ func NewSubmit(version *metadata.Version, log logger.Logger) *Submit {
s.fs.StringVar(&s.repositoryPath, "repository-dir", ".", "Path to local clone of repository")
s.fs.StringVar(&s.tree, "tree", "", "SHA-1 hash of git tree")
s.fs.StringVar(&s.coveragePathsString, "coverage-files", "", "Paths to coverage files (space-separated)")
s.fs.StringVar(&s.quotaID, "quota-id", "", "Quota ID to submit against")
s.fs.BoolVar(&s.disableCoverageAutoDiscovery, "disable-coverage-auto", false, "Disables coverage file autodiscovery")
s.fs.StringVar(&s.tagsString, "tags", "", "Tags to apply to the build (space-separated)")
s.fs.SetOutput(io.Discard) // Disable automatic writing to STDERR
Expand Down Expand Up @@ -201,6 +203,10 @@ func (s *Submit) Init(args []string, envs map[string]string, commitResolverFacto
return nil
}

if !flagset["quota-id"] {
s.logger.Printf("Submitting against quota: %s", s.quotaID)
}

if !flagset["repository-dir"] {
s.logger.Printf("Using default value for -repository-dir flag: %s", s.repositoryPath)
}
Expand Down Expand Up @@ -247,7 +253,7 @@ func (s *Submit) bundle() (string, error) {

s.logger.Printf("Gathering metadata to describe the build")
tags := strings.Split(s.tagsString, " ")
meta, err := metadata.NewMetadata(s.version, s.envs, tags, s.commitResolver, time.Now, s.logger)
meta, err := metadata.NewMetadata(s.version, s.envs, tags, s.quotaID, s.commitResolver, time.Now, s.logger)
if err != nil {
return "", err
}
Expand Down
17 changes: 17 additions & 0 deletions internal/cmd/submit/submit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,23 @@ func TestSubmit_Init(t *testing.T) {
assert.Equal(t, s.tagsString, "tag1 tag2")
})

t.Run("WithTagsString", func(t *testing.T) {
s := NewSubmit(&metadata.Version{}, logger.New())
err := s.Init([]string{"testdata/example-reports-dir/example-*.xml", "--account-id", "42", "--repository-id", "8675309", "--tags", "tag1 tag2", "--quota-id", "quota1"}, exampleEnv, new(stubCommitResolverFactory))
require.NoError(t, err)
assert.ElementsMatch(t, []string{"testdata/example-reports-dir/example-1.xml"}, s.paths)
assert.EqualValues(t, 42, s.accountID)
assert.EqualValues(t, 8675309, s.repositoryID)
assert.Equal(t, "buildpulse-uploads", s.bucket)
assert.Equal(t, "some-access-key-id", s.credentials.AccessKeyID)
assert.Equal(t, "some-secret-access-key", s.credentials.SecretAccessKey)
assert.Equal(t, "quota1", s.quotaID)
assert.Equal(t, exampleEnv, s.envs)
assert.Equal(t, ".", s.repositoryPath)
assert.Equal(t, "Repository", s.commitResolver.Source())
assert.Equal(t, s.tagsString, "tag1 tag2")
})

t.Run("WithMultiplePathArgs", func(t *testing.T) {
s := NewSubmit(&metadata.Version{}, logger.New())
err := s.Init(
Expand Down
4 changes: 3 additions & 1 deletion internal/metadata/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ type Metadata struct {
CommittedAt time.Time `yaml:":committed_at,omitempty"`
CommitterEmail string `yaml:":committer_email,omitempty"`
CommitterName string `yaml:":committer_name,omitempty"`
QuotaID string `yaml:":quota_id,omitempty"`
RepoNameWithOwner string `yaml:":repo_name_with_owner"`
ReporterOS string `yaml:":reporter_os"`
ReporterVersion string `yaml:":reporter_version"`
Expand All @@ -37,7 +38,7 @@ type Metadata struct {
}

// NewMetadata creates a new Metadata instance from the given args.
func NewMetadata(version *Version, envs map[string]string, tags []string, resolver CommitResolver, now func() time.Time, logger logger.Logger) (*Metadata, error) {
func NewMetadata(version *Version, envs map[string]string, tags []string, quotaID string, resolver CommitResolver, now func() time.Time, logger logger.Logger) (*Metadata, error) {
m := &Metadata{logger: logger}

if err := m.initProviderData(envs); err != nil {
Expand All @@ -51,6 +52,7 @@ func NewMetadata(version *Version, envs map[string]string, tags []string, resolv
m.initTimestamp(now)
m.initVersionData(version)

m.QuotaID = quotaID
m.Tags = tags

return m, nil
Expand Down
76 changes: 72 additions & 4 deletions internal/metadata/metadata_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ func TestNewMetadata(t *testing.T) {
)

version := &Version{Number: "v1.2.3", GoOS: "linux"}
meta, err := NewMetadata(version, tt.envs, tt.tags, commitResolver, now, logger.New())
meta, err := NewMetadata(version, tt.envs, tt.tags, "", commitResolver, now, logger.New())
assert.NoError(t, err)

yaml, err := meta.MarshalYAML()
Expand All @@ -204,7 +204,7 @@ func TestNewMetadata(t *testing.T) {
}

func TestNewMetadata_unsupportedProvider(t *testing.T) {
_, err := NewMetadata(&Version{}, map[string]string{}, []string{}, newCommitResolverStub(), time.Now, logger.New())
_, err := NewMetadata(&Version{}, map[string]string{}, []string{}, "", newCommitResolverStub(), time.Now, logger.New())
if assert.Error(t, err) {
assert.Contains(t, err.Error(), "env: environment variable \"GIT_BRANCH\" should not be empty; environment variable \"GIT_COMMIT\" should not be empty; environment variable \"BUILD_URL\" should not be empty; environment variable \"ORGANIZATION_NAME\" should not be empty; environment variable \"REPOSITORY_NAME\" should not be empty")
}
Expand Down Expand Up @@ -242,7 +242,7 @@ func TestNewMetadata_customCheckName(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
meta, err := NewMetadata(&Version{}, tt.envs, []string{}, newCommitResolverStub(), time.Now, logger.New())
meta, err := NewMetadata(&Version{}, tt.envs, []string{}, "", newCommitResolverStub(), time.Now, logger.New())
assert.NoError(t, err)

yaml, err := meta.MarshalYAML()
Expand Down Expand Up @@ -314,7 +314,75 @@ func TestNewMetadata_appliesTags(t *testing.T) {
)

version := &Version{Number: "v1.2.3", GoOS: "linux"}
meta, err := NewMetadata(version, tt.envs, tt.tags, commitResolver, now, logger.New())
meta, err := NewMetadata(version, tt.envs, tt.tags, "", commitResolver, now, logger.New())
assert.NoError(t, err)

yaml, err := meta.MarshalYAML()
assert.NoError(t, err)
assert.Equal(t, string(expected), string(yaml))
})
}
}

func TestNewMetadata_appliesQuotaID(t *testing.T) {
tests := []struct {
name string
envs map[string]string
quotaID string
fixture string
}{
{
name: "GitHubActions",
envs: map[string]string{
"GITHUB_ACTIONS": "true",
"GITHUB_ACTOR": "some-user",
"GITHUB_BASE_REF": "refs/heads/main",
"GITHUB_EVENT_NAME": "push",
"GITHUB_HEAD_REF": "refs/heads/some-feature",
"GITHUB_REF": "refs/heads/some-feature",
"GITHUB_REPOSITORY": "some-owner/some-repo",
"GITHUB_RUN_ATTEMPT": "1",
"GITHUB_RUN_ID": "8675309",
"GITHUB_RUN_NUMBER": "42",
"GITHUB_SERVER_URL": "https://github.com",
"GITHUB_SHA": "1f192ff735f887dd7a25229b2ece0422d17931f5",
"GITHUB_WORKFLOW": "build",
},
fixture: "./testdata/github_quota.yml",
quotaID: "quota1",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
now := func() time.Time {
return time.Date(2020, 7, 11, 1, 2, 3, 0, time.UTC)
}

expected, err := os.ReadFile(tt.fixture)
require.NoError(t, err)

authoredAt, err := time.Parse(time.RFC3339, "2020-07-09T04:05:06-05:00")
require.NoError(t, err)

committedAt, err := time.Parse(time.RFC3339, "2020-07-10T07:08:09+13:00")
require.NoError(t, err)

commitResolver := NewStaticCommitResolver(
&Commit{
AuthoredAt: authoredAt,
AuthorEmail: "[email protected]",
AuthorName: "Some Author",
CommittedAt: committedAt,
CommitterEmail: "[email protected]",
CommitterName: "Some Committer",
Message: "Some message",
TreeSHA: "0da9df599c02da5e7f5058b7108dcd5e1929a0fe",
},
logger.New(),
)

version := &Version{Number: "v1.2.3", GoOS: "linux"}
meta, err := NewMetadata(version, tt.envs, []string{}, tt.quotaID, commitResolver, now, logger.New())
assert.NoError(t, err)

yaml, err := meta.MarshalYAML()
Expand Down
29 changes: 29 additions & 0 deletions internal/metadata/testdata/github_quota.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
:authored_at: 2020-07-09T04:05:06-05:00
:author_email: [email protected]
:author_name: Some Author
:branch: some-feature
:build_url: https://github.com/some-owner/some-repo/actions/runs/8675309/attempts/1
:check: github-actions
:ci_provider: github-actions
:commit_message: Some message
:commit_metadata_source: Static
:commit: 1f192ff735f887dd7a25229b2ece0422d17931f5
:committed_at: 2020-07-10T07:08:09+13:00
:committer_email: [email protected]
:committer_name: Some Committer
:quota_id: quota1
:repo_name_with_owner: some-owner/some-repo
:reporter_os: linux
:reporter_version: v1.2.3
:timestamp: 2020-07-11T01:02:03Z
:tree: 0da9df599c02da5e7f5058b7108dcd5e1929a0fe
:github_actor: some-user
:github_base_ref: refs/heads/main
:github_event_name: push
:github_head_ref: refs/heads/some-feature
:github_ref: refs/heads/some-feature
:github_repo_url: https://github.com/some-owner/some-repo
:github_run_attempt: 1
:github_run_id: 8675309
:github_run_number: 42
:github_workflow: build

0 comments on commit 3c98406

Please sign in to comment.