blob: 17b0074b7500b26fc234976c1b246c01503c1930 [file] [log] [blame] [edit]
#!/bin/bash
set -e
function retry_with_backoff {
attempts_left=$1
sleep_seconds=$2
shift 2
command=$@
# store current flag state
flags=$-
# allow a failures to continue
set +e
${command}
exit_code=$?
# restore "e" flag
if [[ ${flags} =~ e ]]
then set -e
else set +e
fi
if [[ $exit_code == 0 ]]
then
return 0
fi
# failure
if [[ ${attempts_left} -gt 0 ]]
then
echo "failure (${exit_code}), sleeping ${sleep_seconds}..."
sleep ${sleep_seconds}
new_attempts=$((${attempts_left} - 1))
new_sleep=$((${sleep_seconds} * 2))
retry_with_backoff ${new_attempts} ${new_sleep} ${command}
fi
return $exit_code
}
snapshot_flag=''
while getopts 's' flag; do
case "${flag}" in
s) snapshot_flag='true' ;;
*) snapshot_flag='false' ;;
esac
done
if [[ "${snapshot_flag}" = "true" ]]; then
echo "Bump the current version to -SNAPSHOT"
else
echo "Updating current version to latest from Maven"
fi
count=0
missing_artifacts=()
path=.
versions_array=($(grep -E "^.*:[0-9]+\.[0-9]+\.[0-9]+.*:[0-9]+\.[0-9]+\.[0-9]+.*$" "${path}/versions.txt"))
for line in "${versions_array[@]}"; do
artifactId=$(echo "${line}" | cut -d ":" -f1)
if [[ "${artifactId}" =~ .*grafeas.* ]]; then
maven_url="https://repo1.maven.org/maven2/io/grafeas/${artifactId}/maven-metadata.xml"
elif [[ "${artifactId}" =~ .*area120.* ]] && [[ "${artifactId}" =~ ^google- ]]; then
maven_url="https://repo1.maven.org/maven2/com/google/area120/${artifactId}/maven-metadata.xml"
elif [[ "${artifactId}" =~ .*analytics-.* ]] && [[ "${artifactId}" =~ ^google- ]]; then
maven_url="https://repo1.maven.org/maven2/com/google/analytics/${artifactId}/maven-metadata.xml"
elif [[ "${artifactId}" =~ ^(google-|gapic) ]]; then
maven_url="https://repo1.maven.org/maven2/com/google/cloud/${artifactId}/maven-metadata.xml"
else
maven_url="https://repo1.maven.org/maven2/com/google/api/grpc/${artifactId}/maven-metadata.xml"
fi
count=$((count + 1))
echo "Module #${count} -- Downloading ${artifactId} from ${maven_url}"
# Check if the artifact exists in Maven Central, otherwise add to missing_artifacts
if curl --output /dev/null --silent --head --fail "${maven_url}"; then
metadata_file=$(retry_with_backoff 3 10 curl -s "${maven_url}" -H "Accept:application/xml" --limit-rate 200k)
# Versioning of artifacts in Maven Central follow SemVer (Major.Minor.Patch-{alpha|beta})
# This keeps track of the additional versioning after the PATCH value (alpha/beta)
# `cut` normally returns the entire string if the delimiter DNE. The `-s` makes cut return nothing
# maven_latest_version stores Major.Minor.Patch or the entire version
# maven_latest_trailing stores alpha/beta/etc. or nothing
maven_metadata_version=$(echo "${metadata_file}" | grep 'latest' | cut -d '>' -f 2 | cut -d '<' -f 1)
maven_latest_version=$(echo "${maven_metadata_version}" | cut -d "-" -f1)
maven_latest_trailing=$(echo "${maven_metadata_version}" | cut -s -d "-" -f2-)
major_version=$(echo "${maven_latest_version}" | cut -d "." -f1)
minor_version=$(echo "${maven_latest_version}" | cut -d "." -f2)
patch_version=$(echo "${maven_latest_version}" | cut -d "." -f3)
patch_version_bump=$((patch_version + 1))
if [[ -z "${maven_latest_trailing}" ]]; then
maven_version_bump="${major_version}.${minor_version}.${patch_version_bump}"
else
maven_version_bump="${major_version}.${minor_version}.${patch_version_bump}-${maven_latest_trailing}"
fi
if [[ "${snapshot_flag}" = "true" ]]; then
new_version="${artifactId}:${maven_metadata_version}:${maven_version_bump}-SNAPSHOT"
else
new_version="${artifactId}:${maven_metadata_version}:${maven_metadata_version}"
fi
sed -i.bak "s/${line}/${new_version}/g" "${path}/versions.txt" && rm "${path}/versions.txt.bak"
else
missing_artifacts+=("${artifactId}")
fi
done
echo "These artifacts don't exist: ${missing_artifacts[*]}"