0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Github appを使った組織メンバーをTeamに編成する

Posted at

Githubの組織管理についての記事です。

ピンポイントで組織のTeamに追加したり削除したり
Team自体を作成したりなどを行う方法についてです。

詳細は下記公式ページを参照ください。


Teamにメンバーを追加する作業を行います。
下記公式を読む限り、メンバーを追加するボタンから
追加するしかなさそうです。

※csvから一括でインポートするというような項目がありません(汗)

※さらに、コピペでまとめて追加するという事もできそうにありません(汗汗汗)

これ、、なん十件もあったら手間すぎる


そんな時はAPIを使おう

Github appを使った組織メンバーをTeamに編成する手順です。

  1. Github appのを構成する
  2. Github appのインストール
  3. Github appの認証と使用

1.Github appを構成する

※組織アカウントで作成、個人アカウントだと権限が反映されませんでした

組織アカウントに切り替えて、左のタブからDeveloper settingsを選択、Github appを選んでNew GitHub Appを作成

image.png

image.png

image.png

image.png

項目は

  • 名前
  • Homepage URL 適当でも何でもいいです。
  • Webhook Activeチェックは外しました WebhookURL求められるため
  • Permissions
    • Organization permissionsのMembersにR/W権限、一応AdminにもReadを付けました。
  • 作成
  • 作成後、アプリのGeneral画面から秘密鍵を生成します。

image.png

各アクセス権限で実行可能なAPIは下記参照ください。


2.Github appのインストール

GitHub appの設定画面からInstall Appします。
付与したアクセス権限がインストールされています。

image.png

image.png


3.Github appの認証と使用

参考にしたのは下記記事です。

App IDはアプリのGeneral画面に表示されています。

Install IDはアプリ設定、インストール状態のページに表示されているURLに記載されています。

image.png

qiita.py
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)


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?