check_packages 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. if (( ! ${+commands[packagesbuild]} )) {
  2. autoload -Uz log_group log_info log_status mkcd
  3. if (( ! ${+commands[curl]} )) {
  4. log_error 'curl not found. Please install curl.'
  5. return 2
  6. }
  7. if (( ! ${+project_root} )) {
  8. log_error "'project_root' not set. Please set before running ${0}."
  9. return 2
  10. }
  11. local -a curl_opts=()
  12. if (( ${+CI} )) {
  13. curl_opts+=(--show-error --silent)
  14. } else {
  15. curl_opts+=(--progress-bar)
  16. }
  17. curl_opts+=(--location -O)
  18. log_group 'Installing Packages.app...'
  19. local version
  20. local base_url
  21. local hash
  22. IFS=';' read -r version base_url hash <<< \
  23. "$(jq -r '.tools.packages | {version, baseUrl, hash} | join(";")' buildspec.json)"
  24. mkdir -p ${project_root}/.deps && pushd ${project_root}/.deps
  25. curl ${curl_opts} "${base_url}/Packages.dmg"
  26. local checksum="$(sha256sum Packages.dmg | cut -d " " -f 1)"
  27. if [[ ${hash} != ${checksum} ]] {
  28. log_error "Checksum mismatch of Packages.dmg download.
  29. Expected : ${hash}
  30. Actual : ${checksum}"
  31. return 2
  32. }
  33. hdiutil attach -readonly -noverify -noautoopen -plist Packages.dmg > .result.plist
  34. local -i num_entities=$(( $(plutil -extract system-entities raw -- .result.plist) - 1 ))
  35. local keys
  36. local mount_point
  37. for i ({0..${num_entities}}) {
  38. keys=($(plutil -extract system-entities.${i} raw -- .result.plist))
  39. if [[ ${keys} == *mount-point* ]] {
  40. mount_point=$(plutil -extract system-entities.${i}.mount-point raw -- .result.plist)
  41. break
  42. }
  43. }
  44. rm .result.plist
  45. log_status 'Installing Packages.app requires elevated privileges!'
  46. sudo installer -pkg ${mount_point}/packages/Packages.pkg -target / && rehash
  47. hdiutil detach ${mount_point} &> /dev/null && log_status 'Packages.dmg image unmounted.'
  48. popd
  49. log_group
  50. }