diff --git a/sync_nuget_curl_jq_v2.sh b/sync_nuget_curl_jq_v2.sh new file mode 100644 index 0000000..889f7b2 --- /dev/null +++ b/sync_nuget_curl_jq_v2.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# Переменные для Azure DevOps +AZURE_ORG="your_azure_org" +AZURE_FEED="your_feed_name" +AZURE_PROJECT="your_project_name" +AZURE_PAT="your_azure_devops_pat" # Personal Access Token + +# Переменные для GitLab +GITLAB_REGISTRY_URL="https://gitlab.com/api/v4/projects/YOUR_PROJECT_ID/packages/nuget" +GITLAB_PAT="your_gitlab_pat" + +# Путь к временной директории для хранения пакетов +TEMP_DIR="./nuget_temp" +mkdir -p $TEMP_DIR + +# Функция для скачивания пакетов из Azure DevOps +download_packages_from_azure() { + echo "Скачивание пакетов из Azure DevOps..." + + # Запрос списка пакетов + packages=$(curl -s -u ":$AZURE_PAT" \ + "https://dev.azure.com/$AZURE_ORG/$AZURE_PROJECT/_apis/packaging/feeds/$AZURE_FEED/packages?api-version=5.0-preview.1" \ + | jq -r '.value[] | "\(.name) \(.versions[0].version)"') + + # Скачивание каждого пакета + while read -r package; do + name=$(echo $package | awk '{print $1}') + version=$(echo $package | awk '{print $2}') + + echo "Скачивание $name версии $version..." + + curl -s -u ":$AZURE_PAT" \ + -L "https://pkgs.dev.azure.com/$AZURE_ORG/$AZURE_PROJECT/_apis/packaging/feeds/$AZURE_FEED/nuget/packages/$name/versions/$version/content?api-version=5.0-preview.1" \ + -o "$TEMP_DIR/$name.$version.nupkg" + done <<< "$packages" +} + +# Функция для проверки наличия пакета в GitLab +is_package_in_gitlab() { + local package_name=$1 + local package_version=$2 + + # Запрос на наличие пакета в GitLab + response=$(curl -s --header "PRIVATE-TOKEN: $GITLAB_PAT" \ + "$GITLAB_REGISTRY_URL?package_name=$package_name&package_version=$package_version") + + # Если пакет существует, response будет содержать данные + if [[ $response == *"$package_name"* ]] && [[ $response == *"$package_version"* ]]; then + return 0 # Пакет существует + else + return 1 # Пакета нет + fi +} + +# Функция для публикации пакетов в GitLab Package Registry +upload_packages_to_gitlab() { + echo "Загрузка пакетов в GitLab Package Registry..." + + for package_path in $TEMP_DIR/*.nupkg; do + package_name=$(basename "$package_path" | awk -F. '{print $1}') + package_version=$(basename "$package_path" | awk -F. '{print $2}') + + # Проверяем наличие пакета + if is_package_in_gitlab "$package_name" "$package_version"; then + echo "Пакет $package_name версии $package_version уже существует в GitLab, пропускаем..." + continue + fi + + echo "Загрузка $package_name версии $package_version в GitLab..." + + curl --request PUT \ + --header "PRIVATE-TOKEN: $GITLAB_PAT" \ + --header "Content-Type: application/octet-stream" \ + --data-binary @"$package_path" \ + "$GITLAB_REGISTRY_URL" + done +} + +# Запуск функций +download_packages_from_azure +upload_packages_to_gitlab + +# Очистка временной директории +rm -rf $TEMP_DIR + +echo "Синхронизация завершена."