| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 
							- 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."
 
-       if (( ${+CI} )) sudo pkill -9 XProtect >/dev/null || true
 
-       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
 
 
  |