1*55e87721SMatt Gilbride#!/bin/bash 2*55e87721SMatt Gilbride 3*55e87721SMatt Gilbrideset -e 4*55e87721SMatt Gilbride 5*55e87721SMatt Gilbridefunction retry_with_backoff { 6*55e87721SMatt Gilbride attempts_left=$1 7*55e87721SMatt Gilbride sleep_seconds=$2 8*55e87721SMatt Gilbride shift 2 9*55e87721SMatt Gilbride command=$@ 10*55e87721SMatt Gilbride 11*55e87721SMatt Gilbride # store current flag state 12*55e87721SMatt Gilbride flags=$- 13*55e87721SMatt Gilbride 14*55e87721SMatt Gilbride # allow a failures to continue 15*55e87721SMatt Gilbride set +e 16*55e87721SMatt Gilbride ${command} 17*55e87721SMatt Gilbride exit_code=$? 18*55e87721SMatt Gilbride 19*55e87721SMatt Gilbride # restore "e" flag 20*55e87721SMatt Gilbride if [[ ${flags} =~ e ]] 21*55e87721SMatt Gilbride then set -e 22*55e87721SMatt Gilbride else set +e 23*55e87721SMatt Gilbride fi 24*55e87721SMatt Gilbride 25*55e87721SMatt Gilbride if [[ $exit_code == 0 ]] 26*55e87721SMatt Gilbride then 27*55e87721SMatt Gilbride return 0 28*55e87721SMatt Gilbride fi 29*55e87721SMatt Gilbride 30*55e87721SMatt Gilbride # failure 31*55e87721SMatt Gilbride if [[ ${attempts_left} -gt 0 ]] 32*55e87721SMatt Gilbride then 33*55e87721SMatt Gilbride echo "failure (${exit_code}), sleeping ${sleep_seconds}..." 34*55e87721SMatt Gilbride sleep ${sleep_seconds} 35*55e87721SMatt Gilbride new_attempts=$((${attempts_left} - 1)) 36*55e87721SMatt Gilbride new_sleep=$((${sleep_seconds} * 2)) 37*55e87721SMatt Gilbride retry_with_backoff ${new_attempts} ${new_sleep} ${command} 38*55e87721SMatt Gilbride fi 39*55e87721SMatt Gilbride 40*55e87721SMatt Gilbride return $exit_code 41*55e87721SMatt Gilbride} 42*55e87721SMatt Gilbride 43*55e87721SMatt Gilbridesnapshot_flag='' 44*55e87721SMatt Gilbridewhile getopts 's' flag; do 45*55e87721SMatt Gilbride case "${flag}" in 46*55e87721SMatt Gilbride s) snapshot_flag='true' ;; 47*55e87721SMatt Gilbride *) snapshot_flag='false' ;; 48*55e87721SMatt Gilbride esac 49*55e87721SMatt Gilbridedone 50*55e87721SMatt Gilbride 51*55e87721SMatt Gilbrideif [[ "${snapshot_flag}" = "true" ]]; then 52*55e87721SMatt Gilbride echo "Bump the current version to -SNAPSHOT" 53*55e87721SMatt Gilbrideelse 54*55e87721SMatt Gilbride echo "Updating current version to latest from Maven" 55*55e87721SMatt Gilbridefi 56*55e87721SMatt Gilbride 57*55e87721SMatt Gilbridecount=0 58*55e87721SMatt Gilbridemissing_artifacts=() 59*55e87721SMatt Gilbride 60*55e87721SMatt Gilbride 61*55e87721SMatt Gilbridepath=. 62*55e87721SMatt Gilbrideversions_array=($(grep -E "^.*:[0-9]+\.[0-9]+\.[0-9]+.*:[0-9]+\.[0-9]+\.[0-9]+.*$" "${path}/versions.txt")) 63*55e87721SMatt Gilbride 64*55e87721SMatt Gilbridefor line in "${versions_array[@]}"; do 65*55e87721SMatt Gilbride artifactId=$(echo "${line}" | cut -d ":" -f1) 66*55e87721SMatt Gilbride 67*55e87721SMatt Gilbride if [[ "${artifactId}" =~ .*grafeas.* ]]; then 68*55e87721SMatt Gilbride maven_url="https://repo1.maven.org/maven2/io/grafeas/${artifactId}/maven-metadata.xml" 69*55e87721SMatt Gilbride elif [[ "${artifactId}" =~ .*area120.* ]] && [[ "${artifactId}" =~ ^google- ]]; then 70*55e87721SMatt Gilbride maven_url="https://repo1.maven.org/maven2/com/google/area120/${artifactId}/maven-metadata.xml" 71*55e87721SMatt Gilbride elif [[ "${artifactId}" =~ .*analytics-.* ]] && [[ "${artifactId}" =~ ^google- ]]; then 72*55e87721SMatt Gilbride maven_url="https://repo1.maven.org/maven2/com/google/analytics/${artifactId}/maven-metadata.xml" 73*55e87721SMatt Gilbride elif [[ "${artifactId}" =~ ^(google-|gapic) ]]; then 74*55e87721SMatt Gilbride maven_url="https://repo1.maven.org/maven2/com/google/cloud/${artifactId}/maven-metadata.xml" 75*55e87721SMatt Gilbride else 76*55e87721SMatt Gilbride maven_url="https://repo1.maven.org/maven2/com/google/api/grpc/${artifactId}/maven-metadata.xml" 77*55e87721SMatt Gilbride fi 78*55e87721SMatt Gilbride 79*55e87721SMatt Gilbride count=$((count + 1)) 80*55e87721SMatt Gilbride echo "Module #${count} -- Downloading ${artifactId} from ${maven_url}" 81*55e87721SMatt Gilbride # Check if the artifact exists in Maven Central, otherwise add to missing_artifacts 82*55e87721SMatt Gilbride if curl --output /dev/null --silent --head --fail "${maven_url}"; then 83*55e87721SMatt Gilbride metadata_file=$(retry_with_backoff 3 10 curl -s "${maven_url}" -H "Accept:application/xml" --limit-rate 200k) 84*55e87721SMatt Gilbride 85*55e87721SMatt Gilbride # Versioning of artifacts in Maven Central follow SemVer (Major.Minor.Patch-{alpha|beta}) 86*55e87721SMatt Gilbride # This keeps track of the additional versioning after the PATCH value (alpha/beta) 87*55e87721SMatt Gilbride # `cut` normally returns the entire string if the delimiter DNE. The `-s` makes cut return nothing 88*55e87721SMatt Gilbride # maven_latest_version stores Major.Minor.Patch or the entire version 89*55e87721SMatt Gilbride # maven_latest_trailing stores alpha/beta/etc. or nothing 90*55e87721SMatt Gilbride maven_metadata_version=$(echo "${metadata_file}" | grep 'latest' | cut -d '>' -f 2 | cut -d '<' -f 1) 91*55e87721SMatt Gilbride maven_latest_version=$(echo "${maven_metadata_version}" | cut -d "-" -f1) 92*55e87721SMatt Gilbride maven_latest_trailing=$(echo "${maven_metadata_version}" | cut -s -d "-" -f2-) 93*55e87721SMatt Gilbride 94*55e87721SMatt Gilbride major_version=$(echo "${maven_latest_version}" | cut -d "." -f1) 95*55e87721SMatt Gilbride minor_version=$(echo "${maven_latest_version}" | cut -d "." -f2) 96*55e87721SMatt Gilbride patch_version=$(echo "${maven_latest_version}" | cut -d "." -f3) 97*55e87721SMatt Gilbride patch_version_bump=$((patch_version + 1)) 98*55e87721SMatt Gilbride if [[ -z "${maven_latest_trailing}" ]]; then 99*55e87721SMatt Gilbride maven_version_bump="${major_version}.${minor_version}.${patch_version_bump}" 100*55e87721SMatt Gilbride else 101*55e87721SMatt Gilbride maven_version_bump="${major_version}.${minor_version}.${patch_version_bump}-${maven_latest_trailing}" 102*55e87721SMatt Gilbride fi 103*55e87721SMatt Gilbride if [[ "${snapshot_flag}" = "true" ]]; then 104*55e87721SMatt Gilbride new_version="${artifactId}:${maven_metadata_version}:${maven_version_bump}-SNAPSHOT" 105*55e87721SMatt Gilbride else 106*55e87721SMatt Gilbride new_version="${artifactId}:${maven_metadata_version}:${maven_metadata_version}" 107*55e87721SMatt Gilbride fi 108*55e87721SMatt Gilbride 109*55e87721SMatt Gilbride sed -i.bak "s/${line}/${new_version}/g" "${path}/versions.txt" && rm "${path}/versions.txt.bak" 110*55e87721SMatt Gilbride else 111*55e87721SMatt Gilbride missing_artifacts+=("${artifactId}") 112*55e87721SMatt Gilbride fi 113*55e87721SMatt Gilbridedone 114*55e87721SMatt Gilbride 115*55e87721SMatt Gilbrideecho "These artifacts don't exist: ${missing_artifacts[*]}"