xref: /aosp_15_r20/external/google-cloud-java/generation/update_versions.sh (revision 55e87721aa1bc457b326496a7ca40f3ea1a63287)
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[*]}"