Githubの組織管理についての記事です。
ピンポイントで組織のTeamに追加したり削除したり
Team自体を作成したりなどを行う方法についてです。
詳細は下記公式ページを参照ください。
Teamにメンバーを追加する作業を行います。
下記公式を読む限り、メンバーを追加するボタンから
追加するしかなさそうです。
※csvから一括でインポートするというような項目がありません(汗)
※さらに、コピペでまとめて追加するという事もできそうにありません(汗汗汗)
これ、、なん十件もあったら手間すぎる
そんな時はAPIを使おう
Github appを使った組織メンバーをTeamに編成する手順です。
- Github appのを構成する
- Github appのインストール
- Github appの認証と使用
1.Github appを構成する
※組織アカウントで作成、個人アカウントだと権限が反映されませんでした
組織アカウントに切り替えて、左のタブからDeveloper settingsを選択、Github appを選んでNew GitHub Appを作成
項目は
- 名前
- Homepage URL 適当でも何でもいいです。
- Webhook Activeチェックは外しました WebhookURL求められるため
- Permissions
- Organization permissionsのMembersにR/W権限、一応AdminにもReadを付けました。
- 作成
- 作成後、アプリのGeneral画面から秘密鍵を生成します。
各アクセス権限で実行可能なAPIは下記参照ください。
2.Github appのインストール
GitHub appの設定画面からInstall Appします。
付与したアクセス権限がインストールされています。
3.Github appの認証と使用
参考にしたのは下記記事です。
App IDはアプリのGeneral画面に表示されています。
Install IDはアプリ設定、インストール状態のページに表示されているURLに記載されています。
import jwt
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
import requests
import time
# アクセストークンの取得
with open('[秘密鍵ファイル名].pem', 'r') as f:
pem_bin = f.read().encode()
private_key = serialization.load_pem_private_key(pem_bin, None, default_backend())
unix_time_now = int(time.time())
payload = {
"iat": unix_time_now - 60,
"exp": unix_time_now + (10 * 60),
"iss": [App ID] # 1111111
}
jwt = jwt.encode(payload, private_key, algorithm='RS256')
headers = {
"Authorization": f"Bearer {jwt}",
"Accept": "application/vnd.github.v3+json"
}
# Install IDを上書きしてください。
url = 'https://api.github.com/app/installations/[Install ID]/access_tokens'
response = requests.post(url, headers=headers)
response_text = response.json()
token = response_text["token"]
# print(token) アクセストークンが取得できていればOK
# APIの使用
headers = {
"Authorization": f"Bearer {token}",
"Accept": "application/vnd.github.v3+json",
"X-GitHub-Api-Version": "2022-11-28"
}
# チーム情報の取得(Get)
# url = "https://api.github.com/orgs/[組織名]/teams/[チーム名]"
# チームにメンバーを追加する(Put)
# url = "https://api.github.com/orgs/[組織名]/teams/[チーム名]/memberships/[ユーザー名]"
payload = {
"role": "maintainer"
}
url = "https://api.github.com/orgs/Qiita/teams/team-01/memberships/qiita_user
response = requests.put(url, headers=headers, params=payload)
print(response.text)