#!/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 Package Registry upload_packages_to_gitlab() { echo "Загрузка пакетов в GitLab Package Registry..." for package in $TEMP_DIR/*.nupkg; do echo "Загрузка $package в GitLab..." curl --request PUT \ --header "PRIVATE-TOKEN: $GITLAB_PAT" \ --header "Content-Type: application/octet-stream" \ --data-binary @"$package" \ "$GITLAB_REGISTRY_URL" done } # Запуск функций download_packages_from_azure upload_packages_to_gitlab # Очистка временной директории rm -rf $TEMP_DIR echo "Синхронизация завершена."