Add sync_nuget_curl_jq_v2.sh
This commit is contained in:
parent
dffc18f2f4
commit
95306c83a9
87
sync_nuget_curl_jq_v2.sh
Normal file
87
sync_nuget_curl_jq_v2.sh
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
#!/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
|
||||||
|
is_package_in_gitlab() {
|
||||||
|
local package_name=$1
|
||||||
|
local package_version=$2
|
||||||
|
|
||||||
|
# Запрос на наличие пакета в GitLab
|
||||||
|
response=$(curl -s --header "PRIVATE-TOKEN: $GITLAB_PAT" \
|
||||||
|
"$GITLAB_REGISTRY_URL?package_name=$package_name&package_version=$package_version")
|
||||||
|
|
||||||
|
# Если пакет существует, response будет содержать данные
|
||||||
|
if [[ $response == *"$package_name"* ]] && [[ $response == *"$package_version"* ]]; then
|
||||||
|
return 0 # Пакет существует
|
||||||
|
else
|
||||||
|
return 1 # Пакета нет
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для публикации пакетов в GitLab Package Registry
|
||||||
|
upload_packages_to_gitlab() {
|
||||||
|
echo "Загрузка пакетов в GitLab Package Registry..."
|
||||||
|
|
||||||
|
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..."
|
||||||
|
|
||||||
|
curl --request PUT \
|
||||||
|
--header "PRIVATE-TOKEN: $GITLAB_PAT" \
|
||||||
|
--header "Content-Type: application/octet-stream" \
|
||||||
|
--data-binary @"$package_path" \
|
||||||
|
"$GITLAB_REGISTRY_URL"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Запуск функций
|
||||||
|
download_packages_from_azure
|
||||||
|
upload_packages_to_gitlab
|
||||||
|
|
||||||
|
# Очистка временной директории
|
||||||
|
rm -rf $TEMP_DIR
|
||||||
|
|
||||||
|
echo "Синхронизация завершена."
|
||||||
Loading…
x
Reference in New Issue
Block a user