|
| 1 | +package main |
| 2 | + |
| 3 | +import ( |
| 4 | + "encoding/json" |
| 5 | + "fmt" |
| 6 | + "io" |
| 7 | + "net/http" |
| 8 | + "time" |
| 9 | +) |
| 10 | + |
| 11 | +func FetchGitHubRepos(apiToken, organisation string) GitHubRepositories { |
| 12 | + var repositories GitHubRepositories |
| 13 | + url := fmt.Sprintf("https://api.github.com/orgs/%v/repos?per_page=100", organisation) |
| 14 | + repoPage := FetchGitHubReposPage(apiToken, url) |
| 15 | + repositories = repoPage |
| 16 | + return repositories |
| 17 | +} |
| 18 | + |
| 19 | +func FetchGitHubReposPage(apiToken, url string) GitHubRepositories { |
| 20 | + var Response GitHubRepositories |
| 21 | + client := http.Client{} |
| 22 | + req, err := http.NewRequest("GET", url, nil) |
| 23 | + checkErr(err) |
| 24 | + req.Header.Set("Authorization", "bearer "+apiToken) |
| 25 | + req.Header.Set("Accept", "application/json") |
| 26 | + resp, err := client.Do(req) |
| 27 | + checkErr(err) |
| 28 | + defer resp.Body.Close() |
| 29 | + bodyText, err := io.ReadAll(resp.Body) |
| 30 | + checkErr(err) |
| 31 | + err = json.Unmarshal(bodyText, &Response) |
| 32 | + checkErr(err) |
| 33 | + return Response |
| 34 | +} |
| 35 | + |
| 36 | +type GitHubRepositories []GitHubRepository |
| 37 | + |
| 38 | +type GitHubRepository struct { |
| 39 | + Id int64 `json:"id"` |
| 40 | + NodeID string `json:"node_id"` |
| 41 | + Name string `json:"name"` |
| 42 | + FullName string `json:"full_name"` |
| 43 | + Private bool `json:"private"` |
| 44 | + Owner GitHubRepositoryOwner `json:"owner"` |
| 45 | + HtmlUrl string `json:"html_url"` |
| 46 | + Description string `json:"description"` |
| 47 | + Fork bool `json:"fork"` |
| 48 | + Url string `json:"url"` |
| 49 | + ForksUrl string `json:"forks_url"` |
| 50 | + KeysUrl string `json:"keys_url"` |
| 51 | + CollaboratorsUrl string `json:"collaborators_url"` |
| 52 | + TeamsUrl string `json:"teams_url"` |
| 53 | + HooksUrl string `json:"hooks_url"` |
| 54 | + IssueEventsUrl string `json:"issue_events_url"` |
| 55 | + EventsUrl string `json:"events_url"` |
| 56 | + AssigneesUrl string `json:"assignees_url"` |
| 57 | + BranchesUrl string `json:"branches_url"` |
| 58 | + TagsUrl string `json:"tags_url"` |
| 59 | + BlobsUrl string `json:"blobs_url"` |
| 60 | + GitTagsUrl string `json:"git_tags_url"` |
| 61 | + GitRefsUrl string `json:"git_refs_url"` |
| 62 | + TreesUrl string `json:"trees_url"` |
| 63 | + StatusesUrl string `json:"statuses_url"` |
| 64 | + LanguagesUrl string `json:"languages_url"` |
| 65 | + StargazersUrl string `json:"stargazers_url"` |
| 66 | + ContributorsUrl string `json:"contributors_url"` |
| 67 | + SubscribersUrl string `json:"subscribers_url"` |
| 68 | + SubscriptionUrl string `json:"subscription_url"` |
| 69 | + CommitsUrl string `json:"commits_url"` |
| 70 | + GitCommitsUrl string `json:"git_commits_url"` |
| 71 | + CommentsUrl string `json:"comments_url"` |
| 72 | + IssueCommentUrl string `json:"issue_comment_url"` |
| 73 | + ContentsUrl string `json:"contents_url"` |
| 74 | + CompareUrl string `json:"compare_url"` |
| 75 | + MergesUrl string `json:"merges_url"` |
| 76 | + ArchiveUrl string `json:"archive_url"` |
| 77 | + DownloadsUrl string `json:"downloads_url"` |
| 78 | + IssuesUrl string `json:"issues_url"` |
| 79 | + PullsUrl string `json:"pulls_url"` |
| 80 | + MilestonesUrl string `json:"milestones_url"` |
| 81 | + NotificationsUrl string `json:"notifications_url"` |
| 82 | + LabelsUrl string `json:"labels_url"` |
| 83 | + ReleasesUrl string `json:"releases_url"` |
| 84 | + DeploymentsUrl string `json:"deployments_url"` |
| 85 | + CreatedAt time.Time `json:"created_at"` |
| 86 | + UpdatedAt time.Time `json:"updated_at"` |
| 87 | + PushedAt time.Time `json:"pushed_at"` |
| 88 | + GitUrl string `json:"git_url"` |
| 89 | + SSHUrl string `json:"ssh_url"` |
| 90 | + CloneUrl string `json:"clone_url"` |
| 91 | + SvnUrl string `json:"svn_url"` |
| 92 | + HomePage string `json:"homepage"` |
| 93 | + Size int64 `json:"size"` |
| 94 | + StargazersCount int64 `json:"stargazers_count"` |
| 95 | + WatchersCount int64 `json:"watchers_count"` |
| 96 | + Language string `json:"language"` |
| 97 | + HasIssues bool `json:"has_issues"` |
| 98 | + HasProjects bool `json:"has_projects"` |
| 99 | + HasDownloads bool `json:"has_downloads"` |
| 100 | + HasWiki bool `json:"has_wiki"` |
| 101 | + HasPages bool `json:"has_pages"` |
| 102 | + HasDiscussions bool `json:"has_discussions"` |
| 103 | + ForksCount int64 `json:"forks_count"` |
| 104 | + MirrorUrl string `json:"mirror_url"` |
| 105 | + Archived bool `json:"archived"` |
| 106 | + Disabled bool `json:"disabled"` |
| 107 | + OpenIssuesCount int64 `json:"open_issues_count"` |
| 108 | + License GitHubRepositoryLicense `json:"license"` |
| 109 | + AllowForking bool `json:"allow_forking"` |
| 110 | + IsTemplate bool `json:"is_template"` |
| 111 | + WebCommitSignoffRequired bool `json:"web_commit_signoff_required"` |
| 112 | + Topics []string `json:"topics"` |
| 113 | + Visibility string `json:"visibility"` |
| 114 | + Forks int64 `json:"forks"` |
| 115 | + OpenIssues int64 `json:"open_issues"` |
| 116 | + Watchers int64 `json:"watchers"` |
| 117 | + DefaultBranch string `json:"default_branch"` |
| 118 | + Permissions GitHubRepoPermissions `json:"permissions"` |
| 119 | +} |
| 120 | + |
| 121 | +type GitHubRepositoryOwner struct { |
| 122 | + Login string `json:"login"` |
| 123 | + Id int64 `json:"id"` |
| 124 | + Name string `json:"name"` |
| 125 | + Email string `json:"email"` |
| 126 | + NodeID string `json:"node_id"` |
| 127 | + AvatarUrl string `json:"avatar_url"` |
| 128 | + GravatarId string `json:"gravatar_id"` |
| 129 | + Url string `json:"url"` |
| 130 | + HtmlUrl string `json:"html_url"` |
| 131 | + FollowersUrl string `json:"followers_url"` |
| 132 | + FollowingUrl string `json:"following_url"` |
| 133 | + GistsUrl string `json:"gists_url"` |
| 134 | + StarredUrl string `json:"starred_url"` |
| 135 | + SubscriptionsUrl string `json:"subscriptions_url"` |
| 136 | + OrganizationsUrl string `json:"organizations_url"` |
| 137 | + ReposUrl string `json:"repos_url"` |
| 138 | + EventsUrl string `json:"events_url"` |
| 139 | + ReceivedEventsUrl string `json:"received_events_url"` |
| 140 | + Type string `json:"type"` |
| 141 | + UserViewType string `json:"user_view_type"` |
| 142 | + SiteAdmin bool `json:"site_admin"` |
| 143 | +} |
| 144 | + |
| 145 | +type GitHubRepositoryLicense struct { |
| 146 | + Key string `json:"key"` |
| 147 | + Name string `json:"name"` |
| 148 | + SpdxId string `json:"spdx_id"` |
| 149 | + Url string `json:"url"` |
| 150 | + NodeId string `json:"node_id"` |
| 151 | +} |
| 152 | + |
| 153 | +type GitHubRepoPermissions struct { |
| 154 | + Admin bool `json:"admin"` |
| 155 | + Maintain bool `json:"maintain"` |
| 156 | + Push bool `json:"push"` |
| 157 | + Triage bool `json:"triage"` |
| 158 | + Pull bool `json:"pull"` |
| 159 | +} |
0 commit comments