Files
obs-studio/.github/scripts/utils.zsh/create_diskimage
PatTheMav abd29b9760 CI: Use older compression and file system for macOS disk image
Using older file system (HFS+ instead of APFS) and compression
(lzfse instead of lzma) allows the disk image to be opened on older
versions of macOS, avoiding the cryptic error message that users
are greeted with otherwise.

This is a temporary fix for the still-alive installed base of
Intel-based Macs.
2023-08-16 16:01:55 -04:00

84 lines
1.8 KiB
Plaintext

autoload -Uz log_debug log_error log_info log_status log_group log_output log_warning
local -r _usage="Usage: %B${0}%b <source> <volume name> <output_name>
Create macOS disk image <volume name> <output_name> with contents of <source>"
if (( ! # )) {
log_error 'Called without arguments.'
log_output ${_usage}
return 2
}
local source=${1}
local volume_name=${2}
local output_name=${3}
log_group "Create macOS disk image"
trap "safe_hdiutil detach /Volumes/${output_name}; rm temp.dmg; log_group; return 2" ERR
safe_hdiutil() {
local _status=0
local -r -a _backoff=(2 5 10 15 30)
for i ({1..5}) {
hdiutil ${@} && _status=0 || _status=1
if (( _status )) {
log_warning "Unable to run 'hdiutil ${@}' (attempt #${i}). Retrying."
sleep ${_backoff[${i}]}
} else {
break
}
}
if (( _status )) {
log_error "Unable to run 'hdiutil ${@}'. Aborting"
log_group
return 2
}
}
safe_hdiutil create \
-volname "${volume_name}" \
-srcfolder ${source} \
-ov \
-fs HFS+ \
-format UDRW \
temp.dmg
safe_hdiutil attach \
-noverify \
-readwrite \
-mountpoint /Volumes/${output_name} \
temp.dmg
log_info "Waiting 2 seconds to ensure mounted volume is available..."
sleep 2
log_status "Done"
log_info "Setting up disk volume..."
log_status "Volume icon"
SetFile -c icnC /Volumes/${output_name}/.VolumeIcon.icns
log_status "Icon positions"
osascript package.applescript ${output_name}
log_status "File permissions"
chmod -Rf go-w /Volumes/${output_name}
SetFile -a C /Volumes/${output_name}
rm -rf -- /Volumes/${output_name}/.fseventsd(N)
log_info "Converting disk image..."
safe_hdiutil detach /Volumes/${output_name}
safe_hdiutil convert \
-format ULFO \
-ov \
-o ${output_name}.dmg temp.dmg
rm temp.dmg
trap '' ERR
log_group
return 0