Skip to content

Commit 2269b52

Browse files
committed
[GITLAB] multi-repo basé sur l'API Gitlab
1 parent 5e34638 commit 2269b52

File tree

2 files changed

+140
-0
lines changed

2 files changed

+140
-0
lines changed

get-gitlab-repo.sh

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#!/bin/bash
2+
3+
# **** Aide à l'utilisation ****
4+
function usage() {
5+
echo "Usage: "$1" <ID_GROUPE_RACINE> <PRIVATE_TOKEN_API>"
6+
}
7+
8+
# **** Lister les ID des sous-groupes d'un groupe (donné par son ID) : ****
9+
function get_subgroups_id() {
10+
echo "$(curl -s --header "PRIVATE-TOKEN: $PRIVATE_TOKEN_API" "https://gitlab.com/api/v4/groups/$1/subgroups" | jq -r ".[].id")"
11+
}
12+
13+
# **** Récupérer le nom d'un groupe (donné par son ID) : ****
14+
function get_groupname() {
15+
echo "$(curl -s --header "PRIVATE-TOKEN: $PRIVATE_TOKEN_API" "https://gitlab.com/api/v4/groups/$1" | jq -r ".name")"
16+
}
17+
18+
# **** Récupérer les URLs des dépots d'un groupe (donné par son ID) : ****
19+
function get_repo_https() {
20+
echo "$(curl -s --header "PRIVATE-TOKEN: $PRIVATE_TOKEN_API" "https://gitlab.com/api/v4/groups/$1" | jq -r ".projects[].http_url_to_repo")"
21+
}
22+
23+
# **** Descends dans l'arbre des groupes et affiche les éléments rencontrés : ***
24+
function process_group() {
25+
echo "$1"
26+
local sg=$(get_subgroups_id $1)
27+
local g=""
28+
29+
for g in $sg
30+
do echo $(process_group $g)
31+
done
32+
}
33+
34+
35+
if [ $# -ne 2 ] ; then
36+
usage "$0"
37+
exit -1
38+
fi
39+
40+
PRIVATE_TOKEN_API="$2"
41+
42+
ROOT_GITLAB_GROUP_ID="$1"
43+
44+
echo "Get Gitlab repo list for group '$ROOT_GITLAB_GROUP_ID' using token '$PRIVATE_TOKEN_API' ..."
45+
46+
echo "Root group name is '"$(get_groupname $ROOT_GITLAB_GROUP_ID)"'"
47+
48+
GITLAB_GROUPS_ID="$(process_group $ROOT_GITLAB_GROUP_ID)"
49+
50+
echo $GITLAB_GROUPS_ID
51+
52+
OUTPUT_FILE="gitlab-urls.txt"
53+
54+
echo "" > /tmp/$OUTPUT_FILE
55+
56+
for i in $GITLAB_GROUPS_ID ; do echo "Group name : '"$(get_groupname $i)"'" ; echo $(get_repo_https $i) | tee --append /tmp/$OUTPUT_FILE ; done
57+
58+
echo "******** Repo URL list ********"
59+
60+
cat /tmp/$OUTPUT_FILE | tr -s " " "\n" | sed '/^$/d' | tee $OUTPUT_FILE
61+
62+
echo ">>>>>>>>>>> Result file is : '"$OUTPUT_FILE"'"
63+
64+
echo "end."
65+
66+

gitlab-repo-do.sh

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#!/bin/bash
2+
3+
GITLAB_URL_FILE="gitlab-urls.txt"
4+
5+
# **** Aide à l'utilisation ****
6+
function usage() {
7+
echo "Usage: "$1" <COMMANDE>"
8+
echo "<COMMANDE>=clone|pull|status"
9+
echo "Nécessite la présence d'un fichier '"$GITLAB_URL_FILE"'"
10+
}
11+
12+
if [ $# -ne 1 ] ; then
13+
usage "$0"
14+
exit -1
15+
fi
16+
17+
OPERATION="$1"
18+
19+
if [ "$OPERATION" == "clone" ] ; then
20+
21+
echo "*** CLONE ***"
22+
23+
for REPO_URL in `cat $GITLAB_URL_FILE`
24+
25+
do echo "***************** $REPO_URL *****************"
26+
27+
CURRENT_DIR=`echo $REPO_URL | sed s%https://gitlab.com/%%g | sed s%.git$%%g`
28+
29+
echo $CURRENT_DIR
30+
31+
echo "*** MKDIR ***"
32+
33+
mkdir -pv $CURRENT_DIR
34+
35+
echo "*** GIT ***"
36+
37+
git clone $REPO_URL $CURRENT_DIR
38+
39+
done
40+
fi
41+
42+
if [ "$OPERATION" == "pull" ] ; then
43+
44+
echo "*** CLONE ***"
45+
46+
for REPO_URL in `cat $GITLAB_URL_FILE`
47+
48+
do echo "***************** $REPO_URL *****************"
49+
50+
CURRENT_DIR=`echo $REPO_URL | sed s%https://gitlab.com/%%g | sed s%.git$%%g`
51+
52+
(cd $CURRENT_DIR && git pull)
53+
54+
done
55+
fi
56+
57+
if [ "$OPERATION" == "status" ] ; then
58+
59+
echo "*** CLONE ***"
60+
61+
for REPO_URL in `cat $GITLAB_URL_FILE`
62+
63+
do echo ""
64+
65+
CURRENT_DIR=`echo $REPO_URL | sed s%https://gitlab.com/%%g | sed s%.git$%%g`
66+
67+
echo "************* $CURRENT_DIR *************"
68+
69+
(cd $CURRENT_DIR && git status --short)
70+
71+
done
72+
fi
73+
74+
echo "end."

0 commit comments

Comments
 (0)