@@ -68,50 +68,67 @@ sudo /usr/local/google-cloud-sdk/install.sh --quiet
6868export PATH=/usr/local/google-cloud-sdk/bin:$PATH
6969gcloud version && rm gcloud.tar.gz
7070
71- # details.txt file contains the release version and commit hash of the current release.
72- gcloud storage cp gs://gcsfuse-release-packages/version-detail/details.txt .
73- # Writing VM instance name to details.txt (Format: release-test-<os-name>)
74- vm_instance_name=$( curl http://metadata.google.internal/computeMetadata/v1/instance/name -H " Metadata-Flavor: Google" )
75- # first line of details.txt contains the release version in the format MAJOR.MINOR.PATCH
76- to_release_version=$( sed ' 1q' details.txt | tr -d ' \n' )
77- echo $vm_instance_name >> details.txt
71+ # Helper function to fetch metadata value from GCE metadata server
72+ function fetch_meta_data_value() {
73+ local metadata_key=$1
74+ curl -sfS -H " Metadata-Flavor: Google" " http://metadata.google.internal/computeMetadata/v1/instance/attributes/$metadata_key " 2> /dev/null || true
75+ }
76+
77+ # Fetch configuration directly from instance metadata or environment
78+ vm_instance_name=$( curl -sfS -H " Metadata-Flavor: Google" " http://metadata.google.internal/computeMetadata/v1/instance/name" 2> /dev/null || hostname)
79+ to_release_version=$( fetch_meta_data_value " RELEASE_VERSION" )
80+ upload_bucket=$( fetch_meta_data_value " UPLOAD_BUCKET" )
81+ upload_bucket=${upload_bucket:- " gcsfuse-release-packages" }
82+
83+ # Backward compatibility fallback if RELEASE_VERSION is not present in metadata
84+ if [[ -z " $to_release_version " ]]; then
85+ if gcloud storage cp " gs://${upload_bucket} /version-detail/details.txt" ./details.txt 2> /dev/null; then
86+ to_release_version=$( sed -n 1p details.txt | tr -d ' \r\n' )
87+ fi
88+ fi
89+
90+ # Detect OS distribution via /etc/os-release
91+ IS_DEBIAN_OR_UBUNTU=false
92+ if [ -f /etc/os-release ]; then
93+ # shellcheck disable=SC1091
94+ . /etc/os-release
95+ distro_id=" ${ID:- } "
96+ distro_like=" ${ID_LIKE:- } "
97+ if [[ " $distro_id " =~ ^(ubuntu| debian)$ ]] || [[ " $distro_like " =~ (ubuntu| debian) ]]; then
98+ IS_DEBIAN_OR_UBUNTU=true
99+ fi
100+ fi
101+
78102touch ~ /logs.txt
79103
80- # Based on the os type(from vm instance name) in detail.txt, run the following
81- # commands to install gcsfuse.
82- if grep -q ubuntu details.txt || grep -q debian details.txt;
83- then
84- if grep -q " ~beta" details.txt;
85- then
104+ # Based on the OS type, run the installation commands
105+ if [[ " $IS_DEBIAN_OR_UBUNTU " == true ]]; then
106+ if [[ " $to_release_version " == * " ~beta" * ]]; then
86107 export GCSFUSE_REPO=gcsfuse-beta
87108 else
88- export GCSFUSE_REPO=gcsfuse-` lsb_release -c -s`
109+ export GCSFUSE_REPO=" gcsfuse-$( lsb_release -c -s 2> /dev/null || echo ' bullseye ' ) "
89110 fi
90- # For ubuntu and debian os
91111
92112 # Don't use apt-key for Debian 11+ and Ubuntu 21+
93- if { [[ $vm_instance_name == * " debian" * && ! ( " $vm_instance_name " < " release-test-debian-11" ) ]]; } || { [[ $vm_instance_name == * " ubuntu" * && ! (" $vm_instance_name " < " release-test-ubuntu-21" ) ]]; }
94- then
113+ if { [[ $vm_instance_name == * " debian" * && ! ( " $vm_instance_name " < " release-test-debian-11" ) ]]; } || { [[ $vm_instance_name == * " ubuntu" * && ! (" $vm_instance_name " < " release-test-ubuntu-21" ) ]]; }; then
95114 echo " deb [signed-by=/usr/share/keyrings/cloud.google.asc] https://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
96115 curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo tee /usr/share/keyrings/cloud.google.asc >> ~ /apt_key_logs.txt
97116 else
98117 echo " deb https://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
99118 curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - >> ~ /apt_key_logs.txt
100119 fi
101120
102- if grep -q -i warning ~ /apt_key_logs.txt;
103- then
121+ if grep -q -i warning ~ /apt_key_logs.txt; then
104122 echo " Failure: Got warning while using apt-key" >> ~ /logs.txt
105123 fi
106124
107125 sudo apt-get update
108126 # Install to be released gcsfuse version (It can be a patch to older version so allow downgrades)
109127 sudo apt-get install -y --allow-downgrades gcsfuse=" $to_release_version " >> ~ /logs.txt
110128else
111- # For rhel and centos
112- sudo yum install fuse
113- if grep -q " ~beta" details.txt;
114- then
129+ # For RHEL and CentOS
130+ sudo yum install -y fuse
131+ if [[ " $to_release_version " == * " ~beta" * ]]; then
115132 YUM_REPO_NAME=gcsfuse-el7-x86_64-beta
116133 else
117134 YUM_REPO_NAME=gcsfuse-el7-x86_64
@@ -126,66 +143,58 @@ repo_gpgcheck=0
126143gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
127144 https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
128145EOF
129- # Attempt a install first, falling back to a standard downgrade if to be released is older version than already installed (patch releases).
130- sudo yum install -y gcsfuse-" $to_release_version " || sudo yum downgrade -y gcsfuse-" $to_release_version " >> ~ /logs.txt
146+ # Attempt an install first, falling back to a standard downgrade if to-be- released is older version than already installed (patch releases).
147+ sudo yum install -y gcsfuse-" $to_release_version " || sudo yum downgrade -y gcsfuse-" $to_release_version " >> ~ /logs.txt
131148fi
132149
133150# Verify gcsfuse version (successful installation)
134151gcsfuse --version | & tee version.txt
135152installed_version=$( echo $( sed -n 1p version.txt) | cut -d' ' -f3)
136- if grep -q $ installed_version details.txt ; then
153+ if [[ " $installed_version " == " $to_release_version " * ]] || [[ " $to_release_version " == * " $ installed_version" * ]] ; then
137154 echo " GCSFuse to be released version installed correctly." & >> ~ /logs.txt
138155else
139- echo " Failure detected in to be released gcsfuse version installation. " & >> ~ /logs.txt
156+ echo " Failure detected in to be released gcsfuse version installation: expected $to_release_version , got $installed_version " & >> ~ /logs.txt
140157fi
141158
142159# Uninstall gcsfuse and install old version.
143- if grep -q ubuntu details.txt || grep -q debian details.txt;
144- then
160+ if [[ " $IS_DEBIAN_OR_UBUNTU " == true ]]; then
145161 sudo apt-get remove -y gcsfuse | & tee -a ~ /logs.txt
146162 sudo apt-get install -y gcsfuse=1.2.0 | & tee -a ~ /logs.txt
147163else
148164 sudo yum -y remove gcsfuse | & tee -a ~ /logs.txt
149165 sudo yum install -y gcsfuse-1.2.0 | & tee -a ~ /logs.txt
150166fi
151167
152- # verify old version installation
168+ # Verify old version installation
153169gcsfuse --version | & tee version.txt
154170installed_version=$( echo $( sed -n 1p version.txt) | cut -d' ' -f3)
155- if [ $installed_version == " 1.2.0" ]; then
171+ if [ " $installed_version " == " 1.2.0" ]; then
156172 echo " GCSFuse old version (1.2.0) installed successfully" & >> ~ /logs.txt
157173else
158174 echo " Failure detected in GCSFuse old version installation." & >> ~ /logs.txt
159175fi
160176
161177# Upgrade gcsfuse to latest version.
162- if grep -q ubuntu details.txt || grep -q debian details.txt;
163- then
178+ if [[ " $IS_DEBIAN_OR_UBUNTU " == true ]]; then
164179 sudo apt-get install --only-upgrade gcsfuse | & tee -a ~ /logs.txt
165180else
166181 sudo yum -y upgrade gcsfuse | & tee -a ~ /logs.txt
167182fi
168183
169184# Verify that gcsfuse has been upgraded to the to_be_released version using version comparison.
170- # This is to ensure that the correct version is installed after the upgrade.
171185gcsfuse --version | & tee version.txt
172186installed_version=$( echo $( sed -n 1p version.txt) | cut -d' ' -f3)
173- # The following command compares the two versions:
174- # 1. `printf` outputs to_release_version and installed_version on a new line.
175- # 2. `sort -V` sorts them naturally (version sort).
176- # 3. `tail -n 1` gets the last line, which is the highest version.
177- # The condition is true if installed_version is greater than or equal to to_release_version.
178187if [[ " $( printf ' %s\n%s\n' " $to_release_version " " $installed_version " | sort -V | tail -n 1) " == " $installed_version " ]]; then
179188 echo " GCSFuse successfully upgraded to latest version: installed_version ($installed_version ), to_release_version: ($to_release_version )" & >> ~ /logs.txt
180189else
181190 echo " Failure detected in upgrading to latest gcsfuse version: installed_version ($installed_version ), to_release_version: ($to_release_version )" & >> ~ /logs.txt
182191fi
183192
184193if grep -q Failure ~ /logs.txt; then
185- echo " Test failed" & >> ~ /logs.txt ;
194+ echo " Test failed" & >> ~ /logs.txt
186195else
187196 touch success.txt
188- gcloud storage cp success.txt gs://gcsfuse-release-packages /v$( sed -n 1p details.txt ) /installation-test/$( sed -n 3p details.txt ) / ;
197+ gcloud storage cp success.txt " gs://${upload_bucket} /v${to_release_version} /installation-test/${vm_instance_name} / "
189198fi
190199
191- gcloud storage cp ~ /logs.txt gs://gcsfuse-release-packages /v$( sed -n 1p details.txt ) /installation-test/$( sed -n 3p details.txt ) /
200+ gcloud storage cp ~ /logs.txt " gs://${upload_bucket} /v${to_release_version} /installation-test/${vm_instance_name} / "
0 commit comments