Skip to content

Commit dd0592b

Browse files
authored
feat(github): Add tables related to GitHub Dependabot API (#6046)
#### Summary Added the following tables related to @dependabot API: * `github_organization_dependabot_alerts` * `github_organization_dependabot_secrets` * `github_repository_dependabot_alerts` * `github_repository_dependabot_secrets`
1 parent d469d2d commit dd0592b

28 files changed

+788
-9
lines changed

plugins/source/github/client/client.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,12 @@ func Configure(ctx context.Context, logger zerolog.Logger, s specs.Source) (sche
6666
logger: logger,
6767
Github: GithubServices{
6868
Actions: c.Actions,
69-
Teams: c.Teams,
7069
Billing: c.Billing,
71-
Repositories: c.Repositories,
72-
Organizations: c.Organizations,
70+
Dependabot: c.Dependabot,
7371
Issues: c.Issues,
72+
Organizations: c.Organizations,
73+
Repositories: c.Repositories,
74+
Teams: c.Teams,
7475
},
7576
Orgs: spec.Orgs,
7677
}, nil

plugins/source/github/client/mocks/mock_dependabot.go

Lines changed: 100 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/source/github/client/services.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
type GithubServices struct {
1010
Actions ActionsService
1111
Billing BillingService
12+
Dependabot DependabotService
1213
Issues IssuesService
1314
Organizations OrganizationsService
1415
Repositories RepositoriesService
@@ -56,3 +57,12 @@ type IssuesService interface {
5657
type ActionsService interface {
5758
ListWorkflows(ctx context.Context, owner, repo string, opts *github.ListOptions) (*github.Workflows, *github.Response, error)
5859
}
60+
61+
//go:generate mockgen -package=mocks -destination=./mocks/mock_dependabot.go . DependabotService
62+
type DependabotService interface {
63+
ListOrgAlerts(ctx context.Context, org string, opts *github.ListAlertsOptions) ([]*github.DependabotAlert, *github.Response, error)
64+
ListRepoAlerts(ctx context.Context, owner, repo string, opts *github.ListAlertsOptions) ([]*github.DependabotAlert, *github.Response, error)
65+
66+
ListRepoSecrets(ctx context.Context, owner, repo string, opts *github.ListOptions) (*github.Secrets, *github.Response, error)
67+
ListOrgSecrets(ctx context.Context, org string, opts *github.ListOptions) (*github.Secrets, *github.Response, error)
68+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package recipes
2+
3+
import (
4+
"github.com/cloudquery/plugin-sdk/codegen"
5+
"github.com/google/go-github/v48/github"
6+
)
7+
8+
func dependabotAlert() *Resource {
9+
return &Resource{
10+
SubService: "alerts",
11+
Struct: new(github.DependabotAlert),
12+
PKColumns: []string{"number"},
13+
ExtraColumns: codegen.ColumnDefinitions{orgColumn},
14+
}
15+
}
16+
17+
func dependabotSecret() *Resource {
18+
return &Resource{
19+
SubService: "secrets",
20+
Struct: new(github.Secret),
21+
PKColumns: []string{"name"},
22+
ExtraColumns: codegen.ColumnDefinitions{orgColumn},
23+
}
24+
}

plugins/source/github/codegen/recipes/organizations.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,32 @@ import (
77
)
88

99
func Organizations() []*Resource {
10+
alert := dependabotAlert()
11+
alert.Service = "organizations"
12+
alert.TableName = "organization_dependabot_alerts"
13+
14+
sec := dependabotSecret()
15+
sec.Service = "organizations"
16+
sec.TableName = "organization_dependabot_secrets"
17+
1018
return []*Resource{
1119
{
20+
TableName: "organizations",
1221
Service: "organizations",
1322
SubService: "organizations",
1423
Struct: new(github.Organization),
15-
TableName: "organizations",
1624
PKColumns: []string{"id"},
1725
ExtraColumns: codegen.ColumnDefinitions{orgColumn},
1826
Multiplex: orgMultiplex,
19-
Relations: []string{"Members()"},
27+
Relations: []string{"Alerts()", "Secrets()", "Members()"},
2028
},
29+
alert,
30+
sec,
2131
{
32+
TableName: "organization_members",
2233
Service: "organizations",
2334
SubService: "members",
2435
Struct: new(github.User),
25-
TableName: "organization_members",
2636
PKColumns: []string{"id"},
2737
ExtraColumns: codegen.ColumnDefinitions{
2838
orgColumn, // we can use orgColumn here

plugins/source/github/codegen/recipes/repositories.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,37 @@ package recipes
22

33
import (
44
"github.com/cloudquery/plugin-sdk/codegen"
5+
"github.com/cloudquery/plugin-sdk/schema"
56
"github.com/google/go-github/v48/github"
67
)
78

89
func Repositories() []*Resource {
10+
repositoryID := codegen.ColumnDefinition{
11+
Name: "repository_id",
12+
Type: schema.TypeInt,
13+
Resolver: `client.ResolveParentColumn("ID")`,
14+
Options: schema.ColumnCreationOptions{PrimaryKey: true},
15+
}
16+
17+
alert := dependabotAlert()
18+
alert.Service = "repositories"
19+
alert.TableName = "repository_dependabot_alerts"
20+
alert.SkipFields = []string{"RepositoryID"}
21+
alert.ExtraColumns = append(alert.ExtraColumns, repositoryID)
22+
23+
sec := dependabotSecret()
24+
sec.Service = "repositories"
25+
sec.TableName = "repository_dependabot_secrets"
26+
sec.SkipFields = []string{"RepositoryID"}
27+
sec.ExtraColumns = append(sec.ExtraColumns, repositoryID)
28+
929
repo := repository()
1030
repo.Service = "repositories"
1131
repo.TableName = "repositories"
1232
repo.Multiplex = orgMultiplex
33+
repo.Relations = []string{"Alerts()", "Secrets()"}
1334

14-
return []*Resource{repo}
35+
return []*Resource{repo, alert, sec}
1536
}
1637

1738
func repository() *Resource {

plugins/source/github/docs/tables/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@
1212
- [github_hook_deliveries](github_hook_deliveries.md)
1313
- [github_installations](github_installations.md)
1414
- [github_organizations](github_organizations.md)
15+
- [github_organization_dependabot_alerts](github_organization_dependabot_alerts.md)
16+
- [github_organization_dependabot_secrets](github_organization_dependabot_secrets.md)
1517
- [github_organization_members](github_organization_members.md)
1618
- [github_repositories](github_repositories.md)
19+
- [github_repository_dependabot_alerts](github_repository_dependabot_alerts.md)
20+
- [github_repository_dependabot_secrets](github_repository_dependabot_secrets.md)
1721
- [github_teams](github_teams.md)
1822
- [github_team_members](github_team_members.md)
1923
- [github_team_repositories](github_team_repositories.md)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Table: github_organization_dependabot_alerts
2+
3+
The composite primary key for this table is (**org**, **number**).
4+
5+
## Relations
6+
7+
This table depends on [github_organizations](github_organizations.md).
8+
9+
## Columns
10+
11+
| Name | Type |
12+
| ------------- | ------------- |
13+
|_cq_source_name|String|
14+
|_cq_sync_time|Timestamp|
15+
|_cq_id|UUID|
16+
|_cq_parent_id|UUID|
17+
|org (PK)|String|
18+
|number (PK)|Int|
19+
|state|String|
20+
|dependency|JSON|
21+
|security_advisory|JSON|
22+
|security_vulnerability|JSON|
23+
|url|String|
24+
|html_url|String|
25+
|created_at|Timestamp|
26+
|updated_at|Timestamp|
27+
|dismissed_at|Timestamp|
28+
|dismissed_by|JSON|
29+
|dismissed_reason|String|
30+
|dismissed_comment|String|
31+
|fixed_at|Timestamp|
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Table: github_organization_dependabot_secrets
2+
3+
The composite primary key for this table is (**org**, **name**).
4+
5+
## Relations
6+
7+
This table depends on [github_organizations](github_organizations.md).
8+
9+
## Columns
10+
11+
| Name | Type |
12+
| ------------- | ------------- |
13+
|_cq_source_name|String|
14+
|_cq_sync_time|Timestamp|
15+
|_cq_id|UUID|
16+
|_cq_parent_id|UUID|
17+
|org (PK)|String|
18+
|name (PK)|String|
19+
|created_at|Timestamp|
20+
|updated_at|Timestamp|
21+
|visibility|String|
22+
|selected_repositories_url|String|

plugins/source/github/docs/tables/github_organizations.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ The composite primary key for this table is (**org**, **id**).
55
## Relations
66

77
The following tables depend on github_organizations:
8+
- [github_organization_dependabot_alerts](github_organization_dependabot_alerts.md)
9+
- [github_organization_dependabot_secrets](github_organization_dependabot_secrets.md)
810
- [github_organization_members](github_organization_members.md)
911

1012
## Columns

0 commit comments

Comments
 (0)