- Contents -
前回作った自身のgitlabリポジトリ取得スクリプトが、動かなくなっていたので
確認したら、GitlabのAPI v3はもう使えなくなっていました。
{"error":"API V3 is no longer supported. Use API V4 instead."}
なので、v4に対応したスクリプトに修正したので、書いておきます。
前回記事: gitlabのリポジトリ取得用スクリプト
API v4 のリポジトリ一覧
v4で自身のリポジトリ一覧を取得するのは、この形。
アクセストークンの取得は前回の記事参照。
userは自身のリポジトリを示す。
curl --header "Private-Token: $token" \
"https://gitlab.com/api/v4/users/$user/projects?visibility=private&page=1&per_page=100"
visibility
visibility を指定しないと、internalレベルまでしか取得できないようだ。
private を指定しておけば、
privateリポジトリまで取得することができる
page
デフォルトでは、最大20件分までしか取得できない。
per_page=100 で一ページあたり最大100件まで取得できるようになります。
API V4 ドキュメント
ユーザープロジェクト
https://docs.gitlab.com/ce/api/projects.html#list-user-projects
ペーシング
https://docs.gitlab.com/ce/api/#pagination
リポジトリ取得スクリプト
スクリプトの全容です。
#!/usr/bin/env bash
set -u
user="YOUR_GITLAB_USER_NAME"
tokenDir=~/.config/gitlab-token
tokenFile=token.enc
if [ ! -f "$tokenDir/$tokenFile" ]; then
echo "Enter PrivateToken"
read inputToken
mkdir -p $tokenDir
echo "$inputToken" | openssl aes-256-cbc -e -base64 -out $tokenDir/$tokenFile
echo "Private-Token saved."
fi
# token取得
token=$(cat $tokenDir/$tokenFile | openssl aes-256-cbc -d -base64)
if [ 0 -ne $? ]; then
echo "Invalid password."
exit 1
fi
# ページャごとに取得
repos=
page=1
while :; do
list=$(curl --header "Private-Token: $token" \
"https://gitlab.com/api/v4/users/$user/projects?visibility=private&per_page=100&page=$page" | \
jq -r ".[].ssh_url_to_repo")
if [ -z "$list" ]; then
break
fi
repos="$repos $list"
page=$((page + 1))
done
if [ -z "$repos" ]; then
echo "取得出来るリポジトリがみつかりません"
exit 1
fi
# ソート
repos=$(for v in $repos; do echo $v; done | sort)
# 取得するリポジトリを選択
echo "取得するリポジトリを選んでください"
PS3='>>> '
select repository in $repos; do
[ -z "$repository" ] && exit 0
break
done
# git clone
git clone --recursive $repository
ページが何件あるのかわからないので、
whileループで取れなくなるまでページをインクリメントしています。
(件数取得するAPIあるのかな??)