1 # SPDX-License-Identifier: EPL-1.0
2 ##############################################################################
3 # Copyright (c) 2019 The Linux Foundation and others.
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Eclipse Public License v1.0
7 # which accompanies this distribution, and is available at
8 # http://www.eclipse.org/legal/epl-v10.html
9 ##############################################################################
12 from __future__ import print_function
17 from github import Github, GithubException
19 from lftools import config
21 log = logging.getLogger(__name__)
24 def helper_list(ctx, organization, repos, audit, full, teams, team, repofeatures):
25 """List options for github org repos."""
26 # Optionally pick token based on gitub org
28 if config.has_section("github"):
29 token = config.get_setting("github", "token")
31 section = "github.{}".format(organization)
32 token = config.get_setting(section, "token")
35 orgName = organization
38 org = g.get_organization(orgName)
39 except GithubException as ghe:
42 # Extend this to check if a repo exists
44 print("All repos for organization: ", orgName)
45 repos = org.get_repos()
50 log.info("{} members without 2fa:".format(orgName))
52 members = org.get_members(filter_="2fa_disabled")
53 except GithubException as ghe:
55 for member in members:
56 log.info(member.login)
57 log.info("{} outside collaborators without 2fa:".format(orgName))
59 collaborators = org.get_outside_collaborators(filter_="2fa_disabled")
60 except GithubException as ghe:
62 for collaborator in collaborators:
63 log.info(collaborator.login)
66 repos = org.get_repos()
68 log.info("{} wiki:{} issues:{}".format(repo.name, repo.has_wiki, repo.has_issues))
69 issues = repo.get_issues
70 for issue in issues():
71 log.info("{}".format(issue))
75 log.info("# All owners for {}:".format(orgName))
76 log.info("{}-owners:".format(orgName))
79 members = org.get_members(role="admin")
80 except GithubException as ghe:
82 for member in members:
83 log.info(" - '{}'".format(member.login))
84 log.info("# All members for {}".format(orgName))
85 log.info("{}-members:".format(orgName))
88 members = org.get_members()
89 except GithubException as ghe:
91 for member in members:
92 log.info(" - '{}'".format(member.login))
93 log.info("# All members and all teams for {}".format(orgName))
97 except GithubException as ghe:
100 log.info("{}:".format(team.name))
101 for user in team.get_members():
102 log.info(" - '{}'".format(user.login))
108 teams = org.get_teams
109 except GithubException as ghe:
112 log.info("{}".format(team.name))
116 teams = org.get_teams
117 except GithubException as ghe:
124 log.info("{}".format(t.name))
125 for user in t.get_members():
126 team_members.append(user.login)
127 log.info(" - '{}'".format(user.login))
132 def prvotes(organization, repo, pr):
133 """Get votes on a github pr."""
134 token = config.get_setting("github", "token")
136 orgName = organization
138 org = g.get_organization(orgName)
139 except GithubException as ghe:
142 repo = org.get_repo(repo)
144 author = repo.get_pull(pr).user.login
145 approval_list.append(author)
147 pr_mergable = repo.get_pull(pr).mergeable
148 log.info("MERGEABLE: {}".format(pr_mergable))
150 approvals = repo.get_pull(pr).get_reviews()
151 for approve in approvals:
152 if approve.state == ("APPROVED"):
153 approval_list.append(approve.user.login)
157 def helper_user_github(ctx, organization, user, team, delete, admin):
158 """Add and Remove users from an org team."""
159 token = config.get_setting("github", "token")
161 orgName = organization
163 org = g.get_organization(orgName)
164 except GithubException as ghe:
167 user_object = g.get_user(user)
168 log.info(user_object)
169 except GithubException as ghe:
171 log.info("user {} not found".format(user))
173 # check if user is a member
175 is_member = org.has_in_members(user_object)
176 log.info("Is {} a member of org {}".format(user, is_member))
177 except GithubException as ghe:
181 teams = org.get_teams
182 except GithubException as ghe:
185 # set team to proper object
187 this_team = [team for team in teams() if team.name in my_teams]
190 team = org.get_team(team_id)
197 team.remove_membership(user_object)
198 except GithubException as ghe:
200 log.info("Removing user {} from {}".format(user_object, team))
202 log.info("{} is not a member of org cannot delete".format(user))
203 # TODO add revoke invite
204 log.info("Code does not handle revoking invitations.")
206 if user and not delete:
207 if admin and is_member:
209 team.add_membership(member=user_object, role="maintainer")
210 except GithubException as ghe:
212 if admin and not is_member:
214 org.invite_user(user=user_object, role="admin", teams=teams)
215 except GithubException as ghe:
217 log.info("Sending Admin invite to {} for {}".format(user_object, team))
219 if not admin and is_member:
221 team.add_membership(member=user_object, role="member")
222 except GithubException as ghe:
225 if not admin and not is_member:
227 org.invite_user(user=user_object, teams=teams)
228 except GithubException as ghe:
230 log.info("Sending invite to {} for {}".format(user_object, team))