Use Rest Api to upload to the feed
Add pulling logic to make sure it is uploaded to the feed. Add retry logic for the whole upload process Remove the old upload script
This commit is contained in:
parent
8de61cdcdf
commit
7f54ccb903
19 changed files with 647 additions and 214 deletions
|
@ -1,194 +0,0 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
#
|
||||
|
||||
# This is a VERY basic script for Create/Delete operations on repos and packages
|
||||
#
|
||||
# Environment Dependencies:
|
||||
# $REPO_SERVER
|
||||
# $REPO_USER
|
||||
# $REPO_PASS
|
||||
|
||||
cmd=$1
|
||||
urls=urls.txt
|
||||
defaultPackageFile=new_package.json
|
||||
defaultRepoFile=new_repo.json
|
||||
repositoryId=$REPO_ID
|
||||
server=$REPO_SERVER
|
||||
user=$REPO_USER
|
||||
pass=$REPO_PASS
|
||||
protocol=https
|
||||
port=443
|
||||
baseurl="$protocol://$user:$pass@$server:$port"
|
||||
|
||||
echo $baseurl
|
||||
|
||||
function BailIf
|
||||
{
|
||||
if [ $1 -ne 0 ]; then
|
||||
echo "Failure occurred communicating with $server"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# List packages, using $1 as a regex to filter results
|
||||
function ListPackages
|
||||
{
|
||||
curl -k "$baseurl/v1/packages" | sed 's/{/\n{/g' | egrep "$1" | sed 's/,/,\n/g' | sed 's/^"/\t"/g'
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Create a new Repo using the specified JSON file
|
||||
function AddRepo
|
||||
{
|
||||
repoFile=$1
|
||||
if [ -z $repoFile ]; then
|
||||
echo "Error: Must specify a JSON-formatted file. Reference $defaultRepoFile.template"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f $repoFile ]; then
|
||||
echo "Error: Cannot create repo - $repoFile does not exist"
|
||||
exit 1
|
||||
fi
|
||||
packageUrl=$(grep "url" $repoFile | head -n 1 | awk '{print $2}' | tr -d ',')
|
||||
echo "Creating new repo on $server [$packageUrl]"
|
||||
curl -i -k "$baseurl/v1/repositories" --data @./$repoFile -H "Content-Type: application/json"
|
||||
BailIf $?
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Upload a single package using the specified JSON file
|
||||
function AddPackage
|
||||
{
|
||||
packageFile=$1
|
||||
if [ -z $packageFile ]; then
|
||||
echo "Error: Must specify a JSON-formatted file. Reference $defaultPackageFile.template"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f $packageFile ]; then
|
||||
echo "Error: Cannot add package - $packageFile does not exist"
|
||||
exit 1
|
||||
fi
|
||||
packageUrl=$(grep "sourceUrl" $packageFile | head -n 1 | awk '{print $2}')
|
||||
echo "Adding package to $server [$packageUrl]"
|
||||
curl -i -k "$baseurl/v1/packages" --data @$packageFile -H "Content-Type: application/json"
|
||||
BailIf $?
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Upload a single package by dynamically creating a JSON file using a provided URL
|
||||
function AddPackageByUrl
|
||||
{
|
||||
# Parse URL
|
||||
url=$(echo "$1")
|
||||
if [ -z $url ]; then
|
||||
return
|
||||
fi
|
||||
escapedUrl=$(echo "$url" | sed 's/\//\\\//g')
|
||||
set -- "$1"
|
||||
oldIFS=$IFS
|
||||
IFS="/"; declare -a splitUrl=($*)
|
||||
index=${#splitUrl[@]}
|
||||
let "index -= 1"
|
||||
filename=${splitUrl[$index]}
|
||||
set -- "$filename"
|
||||
IFS="_"; declare -a splitFile=($*)
|
||||
IFS=$oldIFS
|
||||
pkgName=${splitFile[0]}
|
||||
pkgVer=${splitFile[1]}
|
||||
if [ -z $pkgName ] || [ -z $pkgVer ]; then
|
||||
echo "ERROR parsing $url"
|
||||
return
|
||||
fi
|
||||
# Create Package .json file
|
||||
cp $defaultPackageFile.template $defaultPackageFile
|
||||
sed -i "s/PACKAGENAME/$pkgName/g" $defaultPackageFile
|
||||
sed -i "s/PACKAGEVERSION/$pkgVer/g" $defaultPackageFile
|
||||
sed -i "s/PACKAGEURL/$escapedUrl/g" $defaultPackageFile
|
||||
sed -i "s/REPOSITORYID/$repositoryId/g" $defaultPackageFile
|
||||
# Test that URL is ok
|
||||
wget -q --spider "$url"
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo "Ready to upload $pkgName [$pkgVer]"
|
||||
else
|
||||
echo "ERROR testing URL $url"
|
||||
return
|
||||
fi
|
||||
# Perform Upload
|
||||
AddPackage $defaultPackageFile
|
||||
# Cleanup
|
||||
# rm $defaultPackageFile
|
||||
}
|
||||
|
||||
# Upload multiple packages by reading urls line-by-line from the specified file
|
||||
function AddPackages
|
||||
{
|
||||
urlFile=$1
|
||||
if [ -z $urlFile ]; then
|
||||
echo "Error: Must specify a flat text file containing one or more URLs"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f $urlFile ]; then
|
||||
echo "Error: Cannot add packages. File $urlFile does not exist"
|
||||
exit 1
|
||||
fi
|
||||
for url in $(cat $urlFile); do
|
||||
AddPackageByUrl "$url"
|
||||
sleep 5
|
||||
done
|
||||
}
|
||||
|
||||
# Delete the specified repo
|
||||
function DeleteRepo
|
||||
{
|
||||
repoId=$1
|
||||
if [ -z $repoId ]; then
|
||||
echo "Error: Please specify repository ID. Run -listrepos for a list of IDs"
|
||||
exit 1
|
||||
fi
|
||||
curl -I -k -X DELETE "$baseurl/v1/repositories/$repoId"
|
||||
BailIf $?
|
||||
}
|
||||
|
||||
# Delete the specified package
|
||||
function DeletePackage
|
||||
{
|
||||
packageId=$1
|
||||
if [ -z $packageId ]; then
|
||||
echo "Error: Please specify package ID. Run -listpkgs for a list of IDs"
|
||||
exit 1
|
||||
fi
|
||||
echo Removing pkgId $packageId from repo $repositoryId
|
||||
curl -I -k -X DELETE "$baseurl/v1/packages/$packageId"
|
||||
BailIf $?
|
||||
}
|
||||
|
||||
if [[ "$1" == "-listrepos" ]]; then
|
||||
echo "Fetching repo list from $server..."
|
||||
curl -k "$baseurl/v1/repositories" | sed 's/,/,\n/g' | sed 's/^"/\t"/g'
|
||||
echo ""
|
||||
elif [[ "$1" == "-listpkgs" ]]; then
|
||||
echo "Fetching package list from $server"
|
||||
ListPackages $2
|
||||
elif [[ "$1" == "-addrepo" ]]; then
|
||||
AddRepo $2
|
||||
elif [[ "$1" == "-addpkg" ]]; then
|
||||
AddPackage $2
|
||||
elif [[ "$1" == "-addpkgs" ]]; then
|
||||
AddPackages $2
|
||||
elif [[ "$1" == "-delrepo" ]]; then
|
||||
DeleteRepo $2
|
||||
elif [[ "$1" == "-delpkg" ]]; then
|
||||
DeletePackage $2
|
||||
else
|
||||
echo "USAGE: ./repotool.sh -OPTION"
|
||||
echo "-listrepos: Gather a list of repos"
|
||||
echo "-listpkgs: Gather a list of packages"
|
||||
echo "-addrepo [FILENAME] : Create a new repo using the specified JSON file"
|
||||
echo "-addpkg [FILENAME] : Add package to repo using the specified JSON file"
|
||||
echo "-addpkgs [FILENAME] : Add packages to repo using urls contained in FILENAME"
|
||||
echo "-delrepo REPOID : Delete the specified repo by ID"
|
||||
echo "-delpkg PKGID : Delete the specified package by ID"
|
||||
fi
|
Loading…
Add table
Add a link
Reference in a new issue