sync_nuget/sync_nuget_curl_jq_v3.sh

84 lines
3.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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