Skip to content

Commit

Permalink
feat(github): Add Releases and Release Assets (#6097)
Browse files Browse the repository at this point in the history

#### Summary

<!--
Explain what problem this PR addresses
-->

<!--
  • Loading branch information
bbernays authored and pull[bot] committed Mar 21, 2023
1 parent e64d1b4 commit d6ffb76
Show file tree
Hide file tree
Showing 15 changed files with 468 additions and 2 deletions.
32 changes: 32 additions & 0 deletions plugins/source/github/client/mocks/mock_repositories.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions plugins/source/github/client/resolvers.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,9 @@ func ResolveParentColumn(field string) schema.ColumnResolver {
return r.Set(c.Name, funk.Get(r.Parent.Item, field))
}
}

func ResolveGrandParentColumn(field string) schema.ColumnResolver {
return func(_ context.Context, _ schema.ClientMeta, r *schema.Resource, c schema.Column) error {
return r.Set(c.Name, funk.Get(r.Parent.Parent.Item, field))
}
}
2 changes: 2 additions & 0 deletions plugins/source/github/client/services.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ type BillingService interface {
type RepositoriesService interface {
GetContents(ctx context.Context, owner, repo, path string, opts *github.RepositoryContentGetOptions) (fileContent *github.RepositoryContent, directoryContent []*github.RepositoryContent, resp *github.Response, err error)
ListByOrg(ctx context.Context, org string, opts *github.RepositoryListByOrgOptions) ([]*github.Repository, *github.Response, error)
ListReleases(ctx context.Context, owner, repo string, opts *github.ListOptions) ([]*github.RepositoryRelease, *github.Response, error)
ListReleaseAssets(ctx context.Context, owner, repo string, id int64, opts *github.ListOptions) ([]*github.ReleaseAsset, *github.Response, error)
}

//go:generate mockgen -package=mocks -destination=./mocks/mock_orgs.go . OrganizationsService
Expand Down
30 changes: 28 additions & 2 deletions plugins/source/github/codegen/recipes/repositories.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,35 @@ func Repositories() []*Resource {
repo.Service = "repositories"
repo.TableName = "repositories"
repo.Multiplex = orgMultiplex
repo.Relations = []string{"Alerts()", "Secrets()"}
repo.Relations = []string{"Alerts()", "Secrets()", "Releases()"}

return []*Resource{repo, alert, sec}
return []*Resource{
repo, alert, sec,
{
Service: "repositories",
TableName: "releases",
Multiplex: orgMultiplex,
SubService: "releases",
Struct: new(github.RepositoryRelease),
PKColumns: []string{"id"},
ExtraColumns: codegen.ColumnDefinitions{orgColumn, repositoryID},
Relations: []string{"Assets()"},
},
{
Service: "repositories",
TableName: "release_assets",
Multiplex: orgMultiplex,
SubService: "assets",
Struct: new(github.ReleaseAsset),
PKColumns: []string{"id"},
ExtraColumns: codegen.ColumnDefinitions{orgColumn, codegen.ColumnDefinition{
Name: "repository_id",
Type: schema.TypeInt,
Resolver: `client.ResolveGrandParentColumn("ID")`,
Options: schema.ColumnCreationOptions{PrimaryKey: true},
}},
},
}
}

func repository() *Resource {
Expand Down
2 changes: 2 additions & 0 deletions plugins/source/github/docs/tables/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
- [github_repositories](github_repositories.md)
- [github_repository_dependabot_alerts](github_repository_dependabot_alerts.md)
- [github_repository_dependabot_secrets](github_repository_dependabot_secrets.md)
- [github_releases](github_releases.md)
- [github_release_assets](github_release_assets.md)
- [github_teams](github_teams.md)
- [github_team_members](github_team_members.md)
- [github_team_repositories](github_team_repositories.md)
31 changes: 31 additions & 0 deletions plugins/source/github/docs/tables/github_release_assets.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Table: github_release_assets

The composite primary key for this table is (**org**, **repository_id**, **id**).

## Relations

This table depends on [github_releases](github_releases.md).

## Columns

| Name | Type |
| ------------- | ------------- |
|_cq_source_name|String|
|_cq_sync_time|Timestamp|
|_cq_id|UUID|
|_cq_parent_id|UUID|
|org (PK)|String|
|repository_id (PK)|Int|
|id (PK)|Int|
|url|String|
|name|String|
|label|String|
|state|String|
|content_type|String|
|size|Int|
|download_count|Int|
|created_at|Timestamp|
|updated_at|Timestamp|
|browser_download_url|String|
|uploader|JSON|
|node_id|String|
42 changes: 42 additions & 0 deletions plugins/source/github/docs/tables/github_releases.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Table: github_releases

The composite primary key for this table is (**org**, **repository_id**, **id**).

## Relations

This table depends on [github_repositories](github_repositories.md).

The following tables depend on github_releases:
- [github_release_assets](github_release_assets.md)

## Columns

| Name | Type |
| ------------- | ------------- |
|_cq_source_name|String|
|_cq_sync_time|Timestamp|
|_cq_id|UUID|
|_cq_parent_id|UUID|
|org (PK)|String|
|repository_id (PK)|Int|
|tag_name|String|
|target_commitish|String|
|name|String|
|body|String|
|draft|Bool|
|prerelease|Bool|
|make_latest|String|
|discussion_category_name|String|
|generate_release_notes|Bool|
|id (PK)|Int|
|created_at|Timestamp|
|published_at|Timestamp|
|url|String|
|html_url|String|
|assets_url|String|
|assets|JSON|
|upload_url|String|
|zipball_url|String|
|tarball_url|String|
|author|JSON|
|node_id|String|
1 change: 1 addition & 0 deletions plugins/source/github/docs/tables/github_repositories.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ The composite primary key for this table is (**org**, **id**).
The following tables depend on github_repositories:
- [github_repository_dependabot_alerts](github_repository_dependabot_alerts.md)
- [github_repository_dependabot_secrets](github_repository_dependabot_secrets.md)
- [github_releases](github_releases.md)

## Columns

Expand Down
103 changes: 103 additions & 0 deletions plugins/source/github/resources/services/repositories/assets.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package repositories

import (
"context"

"github.com/cloudquery/cloudquery/plugins/source/github/client"
"github.com/cloudquery/plugin-sdk/schema"
"github.com/google/go-github/v48/github"
)

func fetchAssets(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error {
c := meta.(*client.Client)
release := parent.Item.(*github.RepositoryRelease)
repo := parent.Parent.Item.(*github.Repository)
opts := &github.ListOptions{PerPage: 100}
for {
releases, resp, err := c.Github.Repositories.ListReleaseAssets(ctx, c.Org, *repo.Name, *release.ID, opts)
if err != nil {
return err
}
res <- releases
opts.Page = resp.NextPage
if opts.Page == resp.LastPage {
break
}
}
return nil
}

0 comments on commit d6ffb76

Please sign in to comment.