Skip to content

Commit af608d4

Browse files
committed
4.0.3
1 parent 60d5838 commit af608d4

2 files changed

Lines changed: 52 additions & 47 deletions

File tree

CHANGELOG.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# CHANGELOG
22

3-
## [4.0.2]
3+
## [4.0.3]
44

5-
2023-11-15
5+
2023-12-14
66

77
### Highlights
88

@@ -29,9 +29,18 @@
2929

3030
### Known Issues
3131

32-
- [IBM Notifier is currently exhibiting an issue](https://github.com/IBM/mac-ibm-notifications/issues/189) where line wrapped text is clipped when the display icon is set for sizes larger than 60 pixels. Until this issue is resolved you can use the `--display-icon-size=60` option to prevent text clipping.
3332
- The Jamf Pro [(Beta) Managed Software Updates](https://learn.jamf.com/bundle/jamf-pro-documentation-current/page/Updating_macOS_Groups_Using_Beta_Managed_Software_Updates.html) workflow is not compatible with the `--install-macos-major-version-target` option. Until this issue is resolved you can revert your Jamf Pro service back to the current macOS software update workflow.
3433

34+
### Specific Changes (4.0.3)
35+
36+
- New [IBM Notifier 3.1.0](https://github.com/IBM/mac-ibm-notifications/releases/tag/v-3.1.0-b-110) is automatically installed. (Thanks to @SMartorelli for his dedication to the project!)
37+
- Improved IBM Notifier behavior no longer clips the end of line wrapped text.
38+
- Improved IBM Notifier behavior now fully ignores the Command-Q keyboard shortcut. Previously `super` had to restart IBM Notifier when a user quit with the Command-Q keyboard shortcut.
39+
- Resolved a workflow issue that could prevent the restart validation workflow from installing non-system updates.
40+
- Resolved an issue preventing accurate reporting of the current macOS version.
41+
- Resolved an issue where macOS installers on any non-system volume was being accidentally deleted.
42+
- `super` 4.0.3 SHA-256: 2c7411a4bfa84a63e20955d18d6c6ba19933b2cf35b04f91bbcac98c666e335c
43+
3544
### Specific Changes (4.0.2)
3645

3746
- Improved `--open-logs` option behavior now opens all possible `super` logs.

super

Lines changed: 40 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
# The next line disables specific ShellCheck codes (https://github.com/koalaman/shellcheck) for the entire script.
88
# shellcheck disable=SC2012,SC2024,SC2207
99

10-
SUPER_VERSION="4.0.2"
11-
SUPER_DATE="2023/11/15"
10+
SUPER_VERSION="4.0.3"
11+
SUPER_DATE="2023/12/14"
1212

1313
# MARK: *** Documentation ***
1414
################################################################################
@@ -283,21 +283,23 @@ readonly SUPER_MANAGED_PLIST
283283

284284
# Path to the "hidden" file that triggers the macOS update/upgrade restart validation workflow (This method is used because the defaults command is unreliable when the system is about to restart):
285285
WORKFLOW_INSTALL_NOW_FILE="${SUPER_FOLDER}/.WorkflowInstallNow"
286+
readonly WORKFLOW_INSTALL_NOW_FILE
286287

287288
# Path to the "hidden" file that triggers the macOS update/upgrade install now workflow (This method is used because the defaults command is unreliable when the system is about to restart):
288289
WORKFLOW_RESTART_VALIDATE_FILE="${SUPER_FOLDER}/.WorkflowRestartValidate"
290+
readonly WORKFLOW_RESTART_VALIDATE_FILE
289291

290292
# Path to the jamf binary:
291293
JAMF_PRO_BINARY="/usr/local/bin/jamf"
292294
readonly JAMF_PRO_BINARY
293295
# IMPORTANT DETAIL: Changing this path provides no benefit as this is the default location for the jamf binary.
294296

295297
# URL to the IBM Notifier.app download:
296-
IBM_NOTIFIER_DOWNLOAD_URL="https://github.com/IBM/mac-ibm-notifications/releases/download/v-3.0.3-b-108/IBM.Notifier.zip"
298+
IBM_NOTIFIER_DOWNLOAD_URL="https://github.com/IBM/mac-ibm-notifications/releases/download/v-3.1.0-b-110/IBM.Notifier.zip"
297299
readonly IBM_NOTIFIER_DOWNLOAD_URL
298300

299301
# Target version for IBM Notifier.app:
300-
IBM_NOTIFIER_TARGET_VERSION="3.0.3"
302+
IBM_NOTIFIER_TARGET_VERSION="3.1.0"
301303
readonly IBM_NOTIFIER_TARGET_VERSION
302304

303305
# Path to the local IBM Notifier.app:
@@ -3296,13 +3298,17 @@ if ! { [[ "${super_current_folder}" == "${SUPER_FOLDER}" ]] || [[ "${super_curre
32963298
exit_clean
32973299
fi
32983300

3299-
# Handle the ${workflow_auth_error} condition, which at this point is a workflow-stopper.
3301+
# Handle the ${workflow_auth_error} condition, which is a workflow-stopper unless the restart validate workflow is active.
33003302
if [[ "${workflow_auth_error}" == "TRUE" ]]; then
3301-
{ [[ "${workflow_install_now_option}" == "TRUE" ]] && [[ "${current_user_account_name}" != "FALSE" ]]; } && notification_install_now_failed
3302-
deferral_timer_minutes="${deferral_timer_error_minutes}"
3303-
log_super "Workflow Error: Configured authentication workflow is not currently possible, trying again in ${deferral_timer_minutes} minutes."
3304-
log_status "Pending: Configured authentication workflow is not currently possible, trying again in ${deferral_timer_minutes} minutes."
3305-
set_auto_launch_deferral
3303+
if [[ -f "${WORKFLOW_RESTART_VALIDATE_FILE}" ]]; then
3304+
log_super "Warning: Configured authentication workflow can not currently install macOS updates/upgrades."
3305+
else
3306+
{ [[ "${workflow_install_now_option}" == "TRUE" ]] && [[ "${current_user_account_name}" != "FALSE" ]]; } && notification_install_now_failed
3307+
deferral_timer_minutes="${deferral_timer_error_minutes}"
3308+
log_super "Workflow Error: Configured authentication workflow is not currently possible, trying again in ${deferral_timer_minutes} minutes."
3309+
log_status "Pending: Configured authentication workflow is not currently possible, trying again in ${deferral_timer_minutes} minutes."
3310+
set_auto_launch_deferral
3311+
fi
33063312
fi
33073313

33083314
# Wait for a valid network connection. If there is still no network after two minutes, an automatic deferral is started.
@@ -3541,23 +3547,29 @@ if [[ "${current_user_account_name}" != "FALSE" ]] && [[ "${current_user_id}" !=
35413547
fi
35423548
}
35433549

3544-
# Collect parameters for detailed system information setting a variety of parameters including ${macos_version_minor}, ${macos_version_number}, ${macos_version_extra}, ${macos_build}, ${macos_marketing_name}, ${mac_cpu_architecture}, ${mac_model_name}, ${mac_is_portable}, and ${mac_last_startup}.
3550+
# Collect parameters for detailed system information setting a variety of parameters including ${macos_version_minor}, ${macos_version_patch}, ${macos_version_number}, ${macos_version_extra}, ${macos_build}, ${macos_marketing_name}, ${macos_version_full}, ${mac_cpu_architecture}, ${mac_model_name}, ${mac_is_portable}, and ${mac_last_startup}.
35453551
check_system() {
35463552
check_error="FALSE"
3547-
macos_version_minor=$(sw_vers -productVersion | cut -d'.' -f2) # Expected output: 14, 15, 06, 01
3553+
macos_version_minor=$(sw_vers -productVersion | cut -d'.' -f2) # Expected output: 6, 1
3554+
macos_version_patch=$(sw_vers -productVersion | cut -d'.' -f3) # Expected output: 6, 1
35483555
macos_version_number="${macos_version_major}$(printf "%02d" "${macos_version_minor}")" # Expected output: 1014, 1015, 1106, 1203
35493556
[[ "${macos_version_major}" -ge 13 ]] && macos_version_extra=$(sw_vers -productVersionExtra | cut -d'.' -f2) # Expected output: (a), (b), (c)
35503557
macos_build=$(sw_vers -buildVersion) # Expected output: 22D68
35513558
macos_marketing_name="macOS $(awk '/SOFTWARE LICENSE AGREEMENT FOR macOS/' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'macOS ' '{print $NF}' | awk '{print substr($0, 0, length($0)-1)}')" # Expected output: macOS Ventura
35523559
mac_cpu_architecture=$(arch) # Expected output: i386, arm64
35533560
mac_model_name=$(system_profiler SPHardwareDataType | grep 'Model Name' | awk -F ': ' '{print $2;}') # Expected output: MacBook Pro
35543561
[[ $(echo "${mac_model_name}" | grep -c 'Book') -gt 0 ]] && mac_is_portable="TRUE" # Expected output: TRUE
3562+
if [[ -n "${macos_version_patch}" ]]; then # macOS version has a patch number.
3563+
[[ -n "${macos_version_extra}" ]] && macos_version_full="${macos_marketing_name} ${macos_version_major}.${macos_version_minor}.${macos_version_patch}${macos_version_extra}-${macos_build}"
3564+
[[ -z "${macos_version_extra}" ]] && macos_version_full="${macos_marketing_name} ${macos_version_major}.${macos_version_minor}.${macos_version_patch}-${macos_build}"
3565+
else # macOS version does not have a patch number.
3566+
[[ -n "${macos_version_extra}" ]] && macos_version_full="${macos_marketing_name} ${macos_version_major}.${macos_version_minor}${macos_version_extra}-${macos_build}"
3567+
[[ -z "${macos_version_extra}" ]] && macos_version_full="${macos_marketing_name} ${macos_version_major}.${macos_version_minor}-${macos_build}"
3568+
fi
35553569
if [[ "${mac_cpu_architecture}" == "arm64" ]]; then # Mac computers with Apple Silicon.
3556-
[[ -z "${macos_version_extra}" ]] && log_super "Status: Mac computer with Apple silicon running: ${macos_marketing_name} ${macos_version_major}.${macos_version_minor}-${macos_build}"
3557-
[[ -n "${macos_version_extra}" ]] && log_super "Status: Mac computer with Apple silicon running: ${macos_marketing_name} ${macos_version_major}.${macos_version_minor}${macos_version_extra}-${macos_build}"
3570+
log_super "Status: Mac computer with Apple silicon running: ${macos_version_full}"
35583571
else # Mac computers with Intel.
3559-
[[ -z "${macos_version_extra}" ]] && log_super "Status: Mac computer with Intel running: ${macos_marketing_name} ${macos_version_major}.${macos_version_minor}-${macos_build}"
3560-
[[ -n "${macos_version_extra}" ]] && log_super "Status: Mac computer with Intel running: ${macos_marketing_name} ${macos_version_major}.${macos_version_minor}${macos_version_extra}-${macos_build}"
3572+
log_super "Status: Mac computer with Intel running: ${macos_version_full}"
35613573
fi
35623574
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: macos_version_number is: ${macos_version_number}"
35633575
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: mac_model_name is: ${mac_model_name}"
@@ -3762,7 +3774,7 @@ check_zero_date() {
37623774
if [[ -n "${workflow_zero_date_manual}" ]]; then # If there is a ${workflow_zero_date_manual} then use that first.
37633775
workflow_zero_date="${workflow_zero_date_manual}"
37643776
log_super "Status: Using manually set zero date of: ${workflow_zero_date}."
3765-
defaults write "${SUPER_LOCAL_PLIST}" WorkflowZeroDateMacOSVersion -string "${workflow_macos_version_target}"
3777+
defaults write "${SUPER_LOCAL_PLIST}" -string "${workflow_macos_version_target}"
37663778
else # Using an automatically set zero date.
37673779
local workflow_zero_date_previous
37683780
workflow_zero_date_previous=$(defaults read "${SUPER_LOCAL_PLIST}" WorkflowZeroDateAutomatic 2> /dev/null)
@@ -5186,7 +5198,7 @@ mdfind_macos_installers_array=($(mdfind kind:app -name "Install macOS" 2> /dev/n
51865198
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: mdfind_macos_installers_array is:\n${mdfind_macos_installers_array[*]}"
51875199
if [[ -n "${mdfind_macos_installers_array[*]}" ]]; then
51885200
for macos_installer_path in "${mdfind_macos_installers_array[@]}"; do
5189-
if [[ $(echo "${macos_installer_path}" | grep -c '/Users/') -gt 0 ]] && [[ $(echo "${macos_installer_path}" | grep -c '/Users/.*/Applications/') -eq 0 ]] && [[ $(echo "${macos_installer_path}" | grep -c '/Users/.*/Desktop/') -eq 0 ]] && [[ $(echo "${macos_installer_path}" | grep -c '/Users/.*/Downloads/') -eq 0 ]]; then
5201+
if [[ $(echo "${macos_installer_path}" | grep -c '/Volumes/') -gt 0 ]] || { [[ $(echo "${macos_installer_path}" | grep -c '/Users/') -gt 0 ]] && [[ $(echo "${macos_installer_path}" | grep -c '/Users/.*/Applications/') -eq 0 ]] && [[ $(echo "${macos_installer_path}" | grep -c '/Users/.*/Desktop/') -eq 0 ]] && [[ $(echo "${macos_installer_path}" | grep -c '/Users/.*/Downloads/') -eq 0 ]]; }; then
51905202
log_super "Status: Skipping deletion of assumed archived macOS installer at: ${macos_installer_path}"
51915203
else
51925204
if [[ "${macos_major_upgrade_version_major_target}" == "FALSE" ]]; then
@@ -7304,9 +7316,9 @@ set_display_strings_optional_buttons
73047316
{ [[ "${display_hide_background_status}" == "TRUE" ]] || [[ "${display_hide_background_status}" == "TEMP" ]]; } && ibm_notifier_array+=(-background_panel translucent)
73057317
{ [[ "${display_silently_status}" == "TRUE" ]] || [[ "${display_silently_status}" == "TEMP" ]]; } && ibm_notifier_array+=(-silent)
73067318
if [[ "${display_notifications_centered_status}" == "TRUE" ]]; then
7307-
ibm_notifier_array+=(-position center -always_on_top)
7319+
ibm_notifier_array+=(-position center -always_on_top -disable_quit)
73087320
else # The default interactive notification location.
7309-
ibm_notifier_array+=(-position top_right -always_on_top)
7321+
ibm_notifier_array+=(-position top_right -always_on_top -disable_quit)
73107322
fi
73117323
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: ibm_notifier_array is:\n${ibm_notifier_array[*]}"
73127324

@@ -7320,17 +7332,6 @@ notification_response=$("${IBM_NOTIFIER_BINARY}" "${ibm_notifier_array[@]}")
73207332
notification_return="$?"
73217333
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: notification_response is: ${notification_response}"
73227334
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: notification_return is: ${notification_return}"
7323-
7324-
# Restart IBM Notifier if the user quits.
7325-
while [[ "${notification_return}" -eq 239 ]]; do
7326-
log_super "Warning: User attempted to quit IBM Notifier.app via Command-Q keyboard shortcut."
7327-
unset notification_response
7328-
unset notification_return
7329-
notification_response=$("${IBM_NOTIFIER_BINARY}" "${ibm_notifier_array[@]}")
7330-
notification_return="$?"
7331-
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: notification_response is: ${notification_response}"
7332-
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: notification_return is: ${notification_return}"
7333-
done
73347335
}
73357336

73367337
# Open ${IBM_NOTIFIER_BINARY} for interactive dialogs using the ${ibm_notifier_array} options, also handle any ${dialog_timeout_seconds}, ${display_accessory_content}, and ${display_accessory_payload} options, and set ${dialog_response} and ${dialog_return}.
@@ -7416,7 +7417,7 @@ set_display_strings_optional_buttons
74167417
{ [[ "${display_unmovable_status}" == "TRUE" ]] || [[ "${display_unmovable_status}" == "TEMP" ]]; } && ibm_notifier_array+=(-unmovable)
74177418
{ [[ "${display_hide_background_status}" == "TRUE" ]] || [[ "${display_hide_background_status}" == "TEMP" ]]; } && ibm_notifier_array+=(-background_panel translucent)
74187419
{ [[ "${display_silently_status}" == "TRUE" ]] || [[ "${display_silently_status}" == "TEMP" ]]; } && ibm_notifier_array+=(-silent)
7419-
ibm_notifier_array+=(-position center -always_on_top)
7420+
ibm_notifier_array+=(-position center -always_on_top -disable_quit)
74207421
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: ibm_notifier_array is:\n${ibm_notifier_array[*]}"
74217422

74227423
# Kill any previous notifications so new ones can take its place.
@@ -7430,18 +7431,6 @@ dialog_return="$?"
74307431
{ [[ "${verbose_mode_option}" == "TRUE" ]] && [[ "${dialog_user_auth_enabled}" != "TRUE" ]]; } && log_super "Verbose Mode: Function ${FUNCNAME[0]}: dialog_response is: ${dialog_response}"
74317432
{ [[ "${verbose_mode_option}" == "TRUE" ]] && [[ "${dialog_user_auth_enabled}" == "TRUE" ]]; } && log_echo "Verbose Mode: Function ${FUNCNAME[0]}: dialog_response is: ${dialog_response}"
74327433
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: dialog_return is: ${dialog_return}"
7433-
7434-
# Restart IBM Notifier if the user quits.
7435-
while [[ "${dialog_return}" -eq 239 ]]; do
7436-
log_super "Warning: User attempted to quit IBM Notifier.app via Command-Q keyboard shortcut."
7437-
unset dialog_response
7438-
unset dialog_return
7439-
dialog_response=$("${IBM_NOTIFIER_BINARY}" "${ibm_notifier_array[@]}")
7440-
dialog_return="$?"
7441-
{ [[ "${verbose_mode_option}" == "TRUE" ]] && [[ "${dialog_user_auth_enabled}" != "TRUE" ]]; } && log_super "Verbose Mode: Function ${FUNCNAME[0]}: dialog_response is: ${dialog_response}"
7442-
{ [[ "${verbose_mode_option}" == "TRUE" ]] && [[ "${dialog_user_auth_enabled}" == "TRUE" ]]; } && log_echo "Verbose Mode: Function ${FUNCNAME[0]}: dialog_response is: ${dialog_response}"
7443-
[[ "${verbose_mode_option}" == "TRUE" ]] && log_super "Verbose Mode: Function ${FUNCNAME[0]}: dialog_return is: ${dialog_return}"
7444-
done
74457434
}
74467435

74477436
# MARK: *** Install Now Notifications ***
@@ -8051,6 +8040,13 @@ if [[ -f "${WORKFLOW_RESTART_VALIDATE_FILE}" ]]; then
80518040
log_status "Running: macOS update/upgrade restart validation."
80528041
workflow_restart_validate
80538042
rm -f "${WORKFLOW_RESTART_VALIDATE_FILE}" 2> /dev/null
8043+
# At this point the ${workflow_auth_error} condition is a workflow-stopper, so try again later.
8044+
if [[ "${workflow_auth_error}" == "TRUE" ]]; then
8045+
deferral_timer_minutes="${deferral_timer_error_minutes}"
8046+
log_super "Workflow Error: Configured authentication workflow is not currently possible, trying again in ${deferral_timer_minutes} minutes."
8047+
log_status "Pending: Configured authentication workflow is not currently possible, trying again in ${deferral_timer_minutes} minutes."
8048+
set_auto_launch_deferral
8049+
fi
80548050
fi
80558051

80568052
# If requested then restart counters.

0 commit comments

Comments
 (0)