対象githubアカウントの、全てのリポジトリから、指定したCollaboratorsを削除する。
こんにちは,Rinと申します。
今回は、githubアカウント内の全てのリポジトリから同一Collaboratorsを一括削除するスクリプトを作成しました。
社内共有しているアカウントからメンバーの離脱があった場合などに有効かと思います。
(自分が退職するので、Collaboratorsを手動で外すのが面倒で作成しましたw)
詳しくはこちらのGithubをご確認ください。
全体像
remove.php
/**
* GLOBAL
* gitアカウントのメールアドレス
* ログインパスワード
* githubのアカウント名
* 削除したいユーザー
* を入力してください。
*/
$Email = '';
$PASS = '';
$USER = '';
$DELTE_USER = '';
/**
* 下記のAPIを実行し、api.jsonを作成してください。別途アクセストークンが必要です。
* curl "https://api.github.com/user/repos?access_token={token}&per_page=100&page=1&sort=created" > api.json
*/
$url = './api.json';
$json = file_get_contents($url);
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$arr = json_decode($json,true);
echo $count = count($arr);
for ($i = 0; $i < $count; ++$i) {
$repoName = $arr[$i]['name'];
$cmd = "curl -X DELETE -u $Email:$PASS 'https://api.github.com/repos/$USER/$repoName/collaborators/$DELTE_USER'";
echo $repoName;
echo exec($cmd);
}
使い方
まず始めにGithubのsettingからAPIKEYを作成します。
その際にSelect scopesのrepoをチェックしておいてください。
アクセストークンを入手したら下記コマンドを実行しapi.jsonを作成します。
.bash
curl "https://api.github.com/user/repos?access_token={token}&per_page=100&page=1&sort=created" > api.json
remove.phpの変数を指定します。
remove.php
$Email = 'hoge@gmail.com';
$PASS = 'password';
$USER = 'MYACCOUNT';
$DELTE_USER = 'user_id';
remove.phpを実行します。
.bash
php remove.php
留意点
- リポジトリは最大で、100個までしか取得できないようです。
100個以上のリポジトリを取得する場合は、下記の様に別途追加のjsonファイルを生成し、
ファイルを指定して再度PHPを実行する必要があります。
.bash
curl "https://api.github.com/user/repos?access_token={token}&per_page=100&page=2&sort=created" > api_2.json
remove.php
$url = './api_2.json';
- organizationアカウントについて
このスクリプトは通常のuserアカウントで動作を保証していますが、おそらく、
下記のAPIを使用すれば同様のことが可能だと思います。(検証はしておりません。)
参照: GitHub Developer
.bash
curl "https://api.github.com/orgs/repos?access_token={token}&per_page=100&page=1&sort=created" > api.json
ハマりどころ
アクセストークンを使用した場合、-uオプションなどで、ユーザを指定する必要ありません。
(むしろ指定すると、うまく取得できませんでした。)