【GitHub】【Octokit】特定のOrganization下のリポジトリを一括でcloneする
はじめに
お世話になります、hosochinです
今回は「GitHubのリポジトリを一括でclone」してみます
GitHubのAPIを使って特定Organizationのリポジトリ一覧を取得後、git cloneするスクリプトを作ってみた感じです🍺
Octokitを使ってみる
Octokit は、GitHubAPIを使用するためのクライアントライブラリをいくつかの言語で提供してくれています
今回はその中のJavascript用のoctokit/rest を使った方法を紹介します
前提
nodejsの開発環境が整っていること
プロジェクトを作成していきます
$ mkdir github-tool
$ cd github-tool
$ npm init
-- @octokit/restをインストールする
$ npm install @octokit/rest --save
-- child_processをインストールする
$ npm install child_process --save
実装
- clone.js
import { execSync } from "child_process";
import { Octokit } from "@octokit/rest";
const octokit = new Octokit({
// baseUrl: "https://api.ghe.xxxx",
auth: "Access Token",
});
octokit
.paginate(octokit.repos.listForOrg, {
org: "特定のOrganization", // Organizationを指定
sort: "updated", // ソート順を更新日時順に
per_page: 100,
})
.then((response) => {
for (const data of response) {
if (process.argv[2]) {
if (
data.language &&
process.argv[2].toUpperCase() === data.language.toUpperCase()
) {
// 言語でフィルターあり
clone(data.name, data.ssh_url);
}
} else {
// 言語でフィルターなし
clone(data.name, ssh_url);
}
}
})
.catch((err) => console.error(err));
function clone(name, ssh_url) {
var cmd = "git clone " + sshUrl + " " + "./tmp/" + name;
console.log(name + "のクローンを開始");
try {
const result = execSync(cmd).toString();
console.log(result);
console.log(name + "のクローンを完了");
} catch (err) {
console.log(name + "のクローンを失敗");
console.error(err);
}
}
動かしてみる
-- 言語フィルターなし
node clone.js
-- 言語フィルターあり
node clone.js java
ディスカッション
コメント一覧
まだ、コメントがありません