diff --git a/sync_nuget_curl_jq_v3.sh b/sync_nuget_curl_jq_v3.sh new file mode 100644 index 0000000..e88f763 --- /dev/null +++ b/sync_nuget_curl_jq_v3.sh @@ -0,0 +1,83 @@ +#!/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 с помощью dotnet nuget push +upload_packages_to_gitlab() { + echo "Загрузка пакетов в GitLab Package Registry с использованием dotnet nuget push..." + + # Добавляем GitLab в список источников NuGet + dotnet nuget add source \ + --name "GitLab" \ + --source "$GITLAB_REGISTRY_URL" \ + --username "PRIVATE-TOKEN" \ + --password "$GITLAB_PAT" + + 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..." + + # Загружаем пакет + dotnet nuget push "$package_path" \ + --source "GitLab" \ + --api-key "$GITLAB_PAT" + + if [ $? -eq 0 ]; then + echo "Пакет $package_name версии $package_version успешно опубликован." + else + echo "Ошибка при публикации $package_name версии $package_version." + fi + done +} + + +# Запуск функций +download_packages_from_azure +upload_packages_to_gitlab + +# Очистка временной директории +rm -rf $TEMP_DIR + +echo "Синхронизация завершена."