feat(provider): add repositories data-source
This commit is contained in:
parent
2063f5ffef
commit
f04d7b341d
10 changed files with 1171 additions and 173 deletions
7
internal/client/permissions.go
Normal file
7
internal/client/permissions.go
Normal file
|
@ -0,0 +1,7 @@
|
|||
package client
|
||||
|
||||
type Permission struct {
|
||||
Admin bool `json:"admin"`
|
||||
Pull bool `json:"pull"`
|
||||
Push bool `json:"push"`
|
||||
}
|
122
internal/client/repositories.go
Normal file
122
internal/client/repositories.go
Normal file
|
@ -0,0 +1,122 @@
|
|||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"time"
|
||||
)
|
||||
|
||||
type RepositoryExternalTracker struct {
|
||||
Description string `json:"description"`
|
||||
Format string `json:"external_tracker_format"`
|
||||
RegexpPattern string `json:"external_tracker_regexp_pattern"`
|
||||
Style string `json:"external_tracker_style"`
|
||||
Url string `json:"external_tracker_url"`
|
||||
}
|
||||
|
||||
type RepositoryExternalWiki struct {
|
||||
Description string `json:"description"`
|
||||
Url string `json:"external_wiki_url"`
|
||||
}
|
||||
|
||||
type RepositoryInternalTracker struct {
|
||||
AllowOnlyContributorsToTrackTime bool `json:"allow_only_contributors_to_track_time"`
|
||||
EnableIssueDependencies bool `json:"enable_issue_dependencies"`
|
||||
EnableTimeTracker bool `json:"enable_time_tracker"`
|
||||
}
|
||||
|
||||
type RepositoryTransfer struct {
|
||||
Description string `json:"description"`
|
||||
Doer *User `json:"doer"`
|
||||
Recipient *User `json:"recipient"`
|
||||
Teams []Team `json:"teams"`
|
||||
}
|
||||
|
||||
type Repository struct {
|
||||
AllowFastForwardOnlyMerge bool `json:"allow_fast_forward_only_merge"`
|
||||
AllowMergeCommits bool `json:"allow_merge_commits"`
|
||||
AllowRebase bool `json:"allow_rebase"`
|
||||
AllowRebaseExplicit bool `json:"allow_rebase_explicit"`
|
||||
AllowRebaseUpdate bool `json:"allow_rebase_update"`
|
||||
AllowSquashMerge bool `json:"allow_squash_merge"`
|
||||
ArchivedAt time.Time `json:"archived_at"`
|
||||
Archived bool `json:"archived"`
|
||||
AvatarUrl string `json:"avatar_url"`
|
||||
CloneUrl string `json:"clone_url"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
DefaultAllowMaintainerEdit bool `json:"default_allow_maintainer_edit"`
|
||||
DefaultBranch string `json:"default_branch"`
|
||||
DefaultDeleteBranchAfterMerge bool `json:"default_delete_branch_after_merge"`
|
||||
DefaultMergeStyle string `json:"default_merge_style"`
|
||||
DefaultUpdateStyle string `json:"default_update_style"`
|
||||
Description string `json:"description"`
|
||||
Empty bool `json:"empty"`
|
||||
ExternalTracker *RepositoryExternalTracker `json:"external_tracker"`
|
||||
ExternalWiki *RepositoryExternalWiki `json:"external_wiki"`
|
||||
Fork bool `json:"fork"`
|
||||
ForksCount int64 `json:"forks_count"`
|
||||
FullName string `json:"full_name"`
|
||||
GloballyEditableWiki bool `json:"globally_editable_wiki"`
|
||||
HasActions bool `json:"has_actions"`
|
||||
HasIssues bool `json:"has_issues"`
|
||||
HasPackages bool `json:"has_packages"`
|
||||
HasProjects bool `json:"has_projects"`
|
||||
HasPullRequests bool `json:"has_pull_requests"`
|
||||
HasReleases bool `json:"has_releases"`
|
||||
HasWiki bool `json:"has_wiki"`
|
||||
HtmlUrl string `json:"html_url"`
|
||||
Id int64 `json:"id"`
|
||||
IgnoreWhitespaceConflicts bool `json:"ignore_whitespace_conflicts"`
|
||||
Internal bool `json:"internal"`
|
||||
InternalTracker *RepositoryInternalTracker `json:"internal_tracker"`
|
||||
Language string `json:"language"`
|
||||
LanguagesUrl string `json:"languages_url"`
|
||||
Link string `json:"link"`
|
||||
Mirror bool `json:"mirror"`
|
||||
MirrorInterval string `json:"mirror_interval"`
|
||||
MirrorUpdated time.Time `json:"mirror_updated"`
|
||||
Name string `json:"name"`
|
||||
ObjectFormatName string `json:"object_format_name"`
|
||||
OpenIssuesCount int64 `json:"open_issues_count"`
|
||||
OpenPrCounter int64 `json:"open_pr_counter"`
|
||||
OriginalUrl string `json:"original_url"`
|
||||
Owner *User `json:"owner"`
|
||||
Parent *Repository `json:"parent"`
|
||||
Permissions *Permission `json:"permissions"`
|
||||
Private bool `json:"private"`
|
||||
ReleaseCounter int64 `json:"release_counter"`
|
||||
RepoTransfer *RepositoryTransfer `json:"repo_transfer"`
|
||||
Size int64 `json:"size"`
|
||||
SshUrl string `json:"ssh_url"`
|
||||
StarsCount int64 `json:"stars_count"`
|
||||
Template bool `json:"template"`
|
||||
Topics []string `json:"topics"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
Url string `json:"url"`
|
||||
WatchersCount int64 `json:"watchers_count"`
|
||||
Website string `json:"website"`
|
||||
WikiBranch string `json:"wiki_branch"`
|
||||
}
|
||||
|
||||
func (c *Client) RepositoriesList(ctx context.Context) ([]Repository, error) {
|
||||
type Response struct {
|
||||
Data []Repository `json:"data"`
|
||||
Ok bool `json:"ok"`
|
||||
}
|
||||
var response Response
|
||||
query := make(url.Values)
|
||||
query.Set("limit", "50")
|
||||
query.Set("page", "1")
|
||||
uriRef := url.URL{
|
||||
Path: "api/v1/repos/search",
|
||||
RawQuery: query.Encode(),
|
||||
}
|
||||
if err := c.Send(ctx, "GET", &uriRef, nil, &response); err != nil {
|
||||
return nil, fmt.Errorf("failed to search repositories: %w", err)
|
||||
}
|
||||
if !response.Ok {
|
||||
return response.Data, fmt.Errorf("got a non OK status when querying repos/search")
|
||||
}
|
||||
return response.Data, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue