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