#!/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 "Синхронизация завершена."