Skip to content
Snippets Groups Projects
Commit a7fd7e34 authored by Pierre Smeyers's avatar Pierre Smeyers
Browse files

Merge branch 'fix/optim-api-calls' into 'master'

perf: reduce the number of API calls

See merge request to-be-continuous/tools/gitlab-sync!36
parents b9ee3d4d d926301c
No related branches found
No related tags found
No related merge requests found
......@@ -106,19 +106,19 @@ function maybe_create_group() {
# Synchronize a Release for a project
# $1: source project ID
# $2: destination project ID
# $3: release (as JSON object)
# $3: source release (as JSON object)
# $4: destination release (as JSON object or empty string)
function sync_release() {
src_project_id=$1
dest_project_id=$2
src_release=$3
dest_release=$4
tag_name=$(echo "$src_release" | jq -r .tag_name)
log_info "Synchronizing release \\e[33;1m${tag_name}\\e[0m to project ID \\e[33;1m${dest_project_id}\\e[0m)"
dest_release_status=$(curl ${INSECURE:+-k} -s -o /dev/null -I -w "%{http_code}" -H "${DEST_TOKEN:+PRIVATE-TOKEN: $DEST_TOKEN}" "$DEST_GITLAB_API/projects/$dest_project_id/releases/$tag_name")
if [[ "$dest_release_status" == 404* ]]
if [[ -z "$dest_release" ]]
then
# dest release does not exist: create
log_info "Release \\e[33;1m${tag_name}\\e[0m not found in project \\e[33;1m${dest_project_id}\\e[0m): create"
curl ${INSECURE:+-k} -sSf -H "${DEST_TOKEN:+PRIVATE-TOKEN: $DEST_TOKEN}" -H "Content-Type: application/json" -X POST "$DEST_GITLAB_API/projects/$dest_project_id/releases" \
--data "{
\"tag_name\": \"$tag_name\",
......@@ -126,12 +126,10 @@ function sync_release() {
\"released_at\": $(echo "$src_release" | jq .released_at),
\"description\": $(echo "$src_release" | jq .description)
}" >/dev/null
elif [[ "$dest_release_status" == 200* ]]
then
if [[ "$UPDATE_RELEASE" == "true" ]]
elif [[ "$UPDATE_RELEASE" == "true" ]]
then
log_info "... release \\e[33;1m$tag_name\\e[0m exists: update"
# dest release does not exist: create
log_info "Release \\e[33;1m${tag_name}\\e[0m found in project \\e[33;1m${dest_project_id}\\e[0m): update (force)"
# dest release already exists: update
curl ${INSECURE:+-k} -sSf -H "${DEST_TOKEN:+PRIVATE-TOKEN: $DEST_TOKEN}" -H "Content-Type: application/json" -X PUT "$DEST_GITLAB_API/projects/$dest_project_id/releases/$tag_name" \
--data "{
\"tag_name\": \"$tag_name\",
......@@ -140,11 +138,8 @@ function sync_release() {
\"description\": $(echo "$src_release" | jq .description)
}" >/dev/null
else
log_info "... release \\e[33;1m$tag_name\\e[0m exists: skip"
fi
else
# another error: abort
fail "... unexpected error: $dest_release_status"
# dest release already exists: skip
log_info "Release \\e[33;1m${tag_name}\\e[0m found in project \\e[33;1m${dest_project_id}\\e[0m): skip"
fi
}
......@@ -274,8 +269,13 @@ function sync_project() {
fi
# 3: sync Releases
curl ${INSECURE:+-k} -sSf -H "${SRC_TOKEN:+PRIVATE-TOKEN: $SRC_TOKEN}" "$SRC_GITLAB_API/projects/$src_project_id/releases?per_page=100" | jq -c '.[]' | while read -r release; do
sync_release "$src_project_id" "$dest_project_id" "$release"
src_releases_json=$(curl ${INSECURE:+-k} -sSf -H "${SRC_TOKEN:+PRIVATE-TOKEN: $SRC_TOKEN}" "$SRC_GITLAB_API/projects/$src_project_id/releases?per_page=100")
dest_releases_json=$(curl ${INSECURE:+-k} -sSf -H "${DEST_TOKEN:+PRIVATE-TOKEN: $DEST_TOKEN}" "$DEST_GITLAB_API/projects/$dest_project_id/releases?per_page=100")
printf '%s' "$src_releases_json" | jq -c '.[]' | while read -r src_release_json
do
tag_name=$(printf '%s' "$src_release_json" | jq -r '.tag_name')
dest_release_json=$(printf '%s' "$dest_releases_json" | jq -c '.[] | select(.tag_name == "'"${tag_name}"'")')
sync_release "$src_project_id" "$dest_project_id" "$src_release_json" "$dest_release_json"
done
fi
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment