Commit 2f0d39bd authored by Jonathan Schaeffer's avatar Jonathan Schaeffer
Browse files

Amélioration du dump gitlab

parent 4ebbac3d
......@@ -17,12 +17,13 @@ Les configurations se font par variable d'environnement :
* `RESIFDD_CONTINUE_FROM` : la valeur est un fichier de rapport précédent à partir duquel le script pourra reprendre le travail là où il l'a laissé. Si le rapport mentionne des erreurs de transfert, le script réessayera
* `RESIFDD_START_AT` : permet d'indiquer une année à partir de laquelle reprendre le transfert. Tous les éléments appartenant à une année inférieur sont ignorés
* `RESIFDD_KEYFILE` : si cette variable indique le chemin d'un fichier valide, alors il sera utilisé pour transférer les données correspondantes aux clés listées dans le fichier.
* `GITLAB_TOKEN` : si cette variable est fournie, alors le script va récupérer tous les projets GIT pour les sauvegarder. Ce token doit avoir les privilègres `read_api` et `read_repository` sur tout le groupre OSUG/RESIF.
## Exemples
### Lancer tout le dump
``` shell
RESIFDD_WORKDIR=/osug-dc/resif RESIFDD_DATATIR=/scratch/resifdumper resifdatadump
GITLAB_TOKEN=plop RESIFDD_WORKDIR=/osug-dc/resif RESIFDD_DATATIR=/scratch/resifdumper resifdatadump
```
### Options particulières de l'outil
......
......@@ -6,6 +6,8 @@
# This line tells to redirect all outputs to logger and stdout
exec 1> >(logger -s -t $(basename $0)) 2>&1
basepath=$(dirname $0)
set -a
####################
#
......@@ -228,7 +230,6 @@ if [[ ! -f ~/.irods/.irodsA ]] ; then
echo "The irods scrambled password file is not present. Please run iinit and provide the password. Exit 1"
exit 1
fi
# Test for working directory
if [[ ! -w $RESIFDD_WORKDIR ]] ; then
echo "RESIFDD_WORKDIR \"$RESIFDD_WORKDIR\" not writable. Check permissions. Exit 1"
......@@ -244,6 +245,7 @@ if [[ ! -d $RESIFDD_DATADIR ]]; then
exit 1
fi
####################
#
# Option ContinueFrom
......@@ -266,6 +268,52 @@ format_report "Year_Network_Station" "Size(MB)" "Dumpdate" "Duration(s)" "Throug
imkdir -p reports
iput -f $LOCAL_REPORT $IRODS_REPORT
##################
#
# Dump projects hosted at gricad-gitlab
#
##################
# Test if GITLAB_TOKEN environment variable is provided
if [ -z ${GITLAB_TOKEN+x} ]; then
echo "GITLAB_TOKEN is not set. We will NOT dump gitlab projects"
else
username="ccdump"
# number of results per pages (max = 100)
per_page=50
url_repositories="https://gricad-gitlab.univ-grenoble-alpes.fr/api/v4/groups/192/projects?simple=true&include_subgroups=true&per_page=$per_page"
# total number of projects
total=$(curl -i -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" "$url_repositories" | awk '/x-total:/ {printf "%.0f\n", $2}')
# check if $total is a number:
re_is_num='^[0-9]+$'
if [[ "$total" =~ $re_is_num ]]; then
# max page calculation
max_page=$(($total / $per_page +1))
for page in `seq $max_page`; do
# get projects list
project_list=$(curl -s --header "PRIVATE-TOKEN: $GITLAB_TOKEN" $url_repositories"&page="$page | grep -o "\"http_url_to_repo\":[^ ,]\+" | xargs -n 1|sed -e 's/http_url_to_repo:https:\/\///')
for url in ${project_list[@]}; do
# This pattern captures the project name (group 2) and the possible subdirectories (group 1).
pattern="^.*\/OSUG\/RESIF\/(.*\/)*(.+.git)$"
if [[ "$url" =~ $pattern ]]; then
destdir=$RESIFDD_WORKDIR/projetcs/${BASH_REMATCH[1]}
project=${BASH_REMATCH[2]}
echo "Cloning $url in $destdir/$project"
mkdir -p $destdir
git clone -q --bare https://$username:$GITLAB_TOKEN@$url $destdir/$project
fi
done
done
# Now compress all the project and send to irods
KEY=git_projects
tar cJf $RESIFDD_WORKDIR/${KEY}.tar.xz $RESIFDD_WORKDIR/projects
iput --retries 5 -T -f -X $RESIFDD_WORKDIR/${KEY}.restart $RESIFDD_WORKDIR/${KEY}.tar.xz .
else
echo "ERROR: gitlab projects could not be dumped, maybe token or gitlab url is wrong ?"
fi
fi
##################
#
# Dump Metadata
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment