Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects

Resolve "export one group, all sub groups and level 1 project"

1 file
+ 7
5
Compare changes
  • Side-by-side
  • Inline
+ 26
10
@@ -38,6 +38,7 @@ readonly DELAY_EXPORT_DL=60
# -- Vars
config_file='.mygb_config'
export_all=false
mygb_date="$(date +"%Y%m%d_%H%M")"
# -- Functions
_exit() {
@@ -75,7 +76,8 @@ _load_config() {
fi
backup_dir=${backup_dir:-/tmp/mygb}
mkdir -p "${backup_dir}"
mygb_tmp_dir=${backup_dir}/${mygb_date}
mkdir -p "${mygb_tmp_dir}"
}
_create_config() {
@@ -115,17 +117,26 @@ _api() {
"${gitlab_url}api/v4/${path}"
}
_get_projects() {
_api GET "projects?simple=true&owned=true" | jq '.[].path_with_namespace'
_get_projects_from_group() {
_api GET "groups/${group_url_encoded}/projects" | jq -r '.[].path_with_namespace'
}
_get_project_info() {
_api GET "projects/${project_url_encoded}" | jq
}
_get_url_encode() {
echo "${1//\//%2F}"
}
_get_export_filename() {
echo "${mygb_tmp_dir}/${mygb_date}_${1}_${2//\//-}_export.tar.gz"
}
# ---[ Export Project ]---
_schedule_project_export() {
set -x
sleep ${DELAY_EXPORT}
_api POST "projects/${project_url_encoded}/export" | jq | grep --silent "202 Accepted" \
|| _fail "Can't schedule export for project [${project}]"
@@ -143,15 +154,16 @@ _wait_export_finished() {
}
_download_project_export() {
export_filename="${backup_dir}/$(date +"%Y%m%d_%H%M")_project_${project/\//-}_export.tar.gz"
export_filename=$(_get_export_filename project "${project}")
_api GET "projects/${project_url_encoded}/export/download" "-o ${export_filename}"
echo "The project was exported :"
ls -l "${export_filename}"
}
_export_project() {
project_url_encoded=$(_get_url_encode "${project}")
if [[ -n ${project} ]]; then
echo -e "\nExporting project : [${project}] in ${backup_dir} ..."
echo -e "\nExporting project : [${project}] in ${mygb_tmp_dir} ..."
_schedule_project_export
_wait_export_finished
_download_project_export
@@ -180,18 +192,25 @@ _wait_group_finished() {
}
_download_group_export() {
export_filename="${backup_dir}/$(date +"%Y%m%d_%H%M")_group_${group/\//-}_export.tar.gz"
export_filename=$(_get_export_filename group "${group}")
_api GET "groups/${group_url_encoded}/export/download" "-o ${export_filename}"
echo "The group was exported :"
ls -l "${export_filename}"
}
_export_group() {
group_url_encoded=$(_get_url_encode "${group}")
if [[ -n ${group} ]]; then
echo -e "\nExporting group : [${group}] in ${backup_dir} ..."
echo -e "\nExporting group : [${group}] in ${mygb_tmp_dir} ..."
_schedule_group_export
_wait_group_finished
_download_group_export
projects=$(_get_projects_from_group)
for project in ${projects}; do
_export_project
done
fi
}
@@ -227,9 +246,6 @@ main() {
esac
done
project_url_encoded="${project/\//%2F}"
group_url_encoded="${group/\//%2F}"
case "${action}" in
init) _create_config ;;
export) _export ;;
Loading