From 1ca5d3a0ee9f29e3524c06c5a0742cf91fe71110 Mon Sep 17 00:00:00 2001 From: Paul Brown <67805647+pb-dod@users.noreply.github.com> Date: Fri, 12 Apr 2024 14:46:12 -0500 Subject: [PATCH] CLOUD-3175: prevent parse error on macos version check (#93) @cobbr2 noticed this error while he was testing the recent m2/m3 mac changes: ``` ln: /usr/local/bin/docker: File exists ln: /usr/local/bin/docker-compose: File exists Parse error: bad token :1 Rancher Desktop has been installed successfully ``` This is caused by an undefined variable, so this PR fixes that. Rick also suggested I rewrite the version checking logic to avoid using `bc -l` to make it simpler. --- VERSION | 2 +- formula/ih-core.rb | 2 +- lib/core/rancher/step.sh | 9 ++++----- lib/utils/arch.sh | 22 ++++++++++++++++++++++ 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/VERSION b/VERSION index a4c528c..7b30067 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.53 +0.1.54 diff --git a/formula/ih-core.rb b/formula/ih-core.rb index b3b6daf..ab3f7c2 100644 --- a/formula/ih-core.rb +++ b/formula/ih-core.rb @@ -1,5 +1,5 @@ class IhCore < Formula - VERSION="0.1.53" + VERSION="0.1.54" desc "Brew formula for installing core tools used at Included Health engineering." homepage "https://github.com/ConsultingMD/homebrew-ih-public" license "CC BY-NC-ND 4.0" diff --git a/lib/core/rancher/step.sh b/lib/core/rancher/step.sh index 7a5c3f0..4408378 100644 --- a/lib/core/rancher/step.sh +++ b/lib/core/rancher/step.sh @@ -12,6 +12,8 @@ RANCHER_AUGMENT_DST="$IH_DEFAULT_DIR/11_rancher.sh" PLIST_SRC="$IH_CORE_LIB_DIR/core/rancher/io.rancherdesktop.profile.defaults.plist" PLIST_DST="$HOME/Library/Preferences/io.rancherdesktop.profile.defaults.plist" +REQUIRED_APPLE_SILICON_MACOS_VERSION="13.3" + # Check if the step has been installed and return 0 if it has. # Otherwise return 1. function ih::setup::core.rancher::test() { @@ -51,10 +53,8 @@ function ih::setup::core.rancher::test() { # Use vz (requires macOS >=13.3) instead of qemu on M3 macs to resolve issues. # More details: https://github.com/lima-vm/lima/issues/1996 - local macos_version=$(ih::arch::get_macos_version) if ih::arch::is_m2_or_m3_mac; then - if (( $(echo "$macos_version < 13.3" | bc -l) )); then - ih::log::error "macOS version 13.3 or higher is required for M3 Macs." + if ! ih::arch::check_macos_version_compatibility "$REQUIRED_APPLE_SILICON_MACOS_VERSION"; then return 1 elif ! grep -q "vz" "$PLIST_DST"; then ih::log::debug "The PLIST file needs to be updated to use 'vz' for M3 Macs." @@ -163,8 +163,7 @@ function ih::setup::core.rancher::install() { # Use vz (requires macOS >=13.3) instead of qemu on M3 macs to resolve issues. # More details: https://github.com/lima-vm/lima/issues/1996 if ih::arch::is_m2_or_m3_mac; then - if (( $(echo "$macos_version < 13.3" | bc -l) )); then - ih::log::error "macOS version 13.3 or higher is required for M3 Macs." + if ! ih::arch::check_macos_version_compatibility "$REQUIRED_APPLE_SILICON_MACOS_VERSION"; then return 1 # Abort the installation for M3 Macs elif ! grep -q "vz" "$PLIST_DST"; then ih::log::debug "Updating PLIST to use 'vz' for Virtualization for M3 Macs." diff --git a/lib/utils/arch.sh b/lib/utils/arch.sh index dce83f7..9c790e4 100644 --- a/lib/utils/arch.sh +++ b/lib/utils/arch.sh @@ -26,6 +26,28 @@ ih::arch::get_macos_version() { sw_vers -productVersion | awk -F '.' '{ printf("%d.%d\n", $1, $2) }' } +ih::arch::check_macos_version_compatibility() { + local required_version="$1" + local current_version=$(ih::arch::get_macos_version) + + # Splitting the current and required versions into major and minor components + IFS='.' read -r current_major current_minor _ <<< "$current_version" + IFS='.' read -r required_major required_minor _ <<< "$required_version" + + # Ensure variables are integers (default to 0 if empty for robust comparison) + current_major=${current_major:-0} + current_minor=${current_minor:-0} + required_major=${required_major:-0} + required_minor=${required_minor:-0} + + if (( current_major > required_major )) || { (( current_major == required_major )) && (( current_minor >= required_minor )); }; then + return 0 # meets minimum requirement + else + ih::log::error "macOS version $required_version or higher is required. Current version: $current_version." + return 1 + fi +} + ih::arch::is_m2_or_m3_mac() { local hw_model=$(sysctl -n machdep.cpu.brand_string) [[ "$hw_model" == *"M2"* ]] || [[ "$hw_model" == *"M3"* ]]