capture-build-details.sh 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/bin/sh -e
  2. # capture-build-details.sh
  3. # Trio
  4. #
  5. # Created by Jonas Björkert on 2024-05-08.
  6. # Path to BuildDetails.plist in the built product
  7. info_plist_path="${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/BuildDetails.plist"
  8. # Ensure the path to BuildDetails.plist is valid.
  9. if [ "${info_plist_path}" = "/" -o ! -e "${info_plist_path}" ]; then
  10. echo "BuildDetails.plist file does not exist at path: ${info_plist_path}" >&2
  11. exit 1
  12. fi
  13. echo "Gathering build details..."
  14. # Capture the current date
  15. plutil -replace com-trio-build-date -string "$(date -u '+%a %b %e %H:%M:%S UTC %Y')" "${info_plist_path}"
  16. # --- Root repo details ---
  17. # Retrieve current branch (or tag) and commit SHA.
  18. git_branch=$(git symbolic-ref --short -q HEAD || echo "")
  19. git_tag=$(git describe --tags --exact-match 2>/dev/null || echo "")
  20. git_commit_sha=$(git log -1 --format="%h" --abbrev=7)
  21. git_branch_or_tag="${git_branch:-${git_tag}}"
  22. if [ -z "${git_branch_or_tag}" ]; then
  23. git_branch_or_tag="detached"
  24. fi
  25. plutil -replace com-trio-branch -string "${git_branch_or_tag}" "${info_plist_path}"
  26. plutil -replace com-trio-commit-sha -string "${git_commit_sha}" "${info_plist_path}"
  27. # --- Submodule details ---
  28. # Remove an existing submodules key if it exists, then create an empty dictionary.
  29. # (Using PlistBuddy, which is available on macOS)
  30. submodules_key="com-trio-submodules"
  31. if /usr/libexec/PlistBuddy -c "Print :${submodules_key}" "${info_plist_path}" 2>/dev/null; then
  32. /usr/libexec/PlistBuddy -c "Delete :${submodules_key}" "${info_plist_path}"
  33. fi
  34. /usr/libexec/PlistBuddy -c "Add :${submodules_key} dict" "${info_plist_path}"
  35. # Gather submodule details.
  36. # We use git submodule foreach to output lines in the form:
  37. # submodule_name|branch_or_tag|commit_sha
  38. submodules_info=$(git submodule foreach --quiet '
  39. sub_git_branch=$(git symbolic-ref --short -q HEAD || echo "")
  40. sub_git_tag=$(git describe --tags --exact-match 2>/dev/null || echo "")
  41. sub_git_commit_sha=$(git log -1 --format="%h" --abbrev=7)
  42. sub_git_branch_or_tag="${sub_git_branch:-${sub_git_tag}}"
  43. if [ -z "${sub_git_branch_or_tag}" ]; then
  44. sub_git_branch_or_tag="detached"
  45. fi
  46. echo "$name|$sub_git_branch_or_tag|$sub_git_commit_sha"
  47. ')
  48. # For each line, add a dictionary entry for that submodule.
  49. echo "${submodules_info}" | while IFS="|" read -r submodule_name sub_branch sub_sha; do
  50. # Create a dictionary for this submodule
  51. /usr/libexec/PlistBuddy -c "Add :${submodules_key}:${submodule_name} dict" "${info_plist_path}"
  52. /usr/libexec/PlistBuddy -c "Add :${submodules_key}:${submodule_name}:branch string ${sub_branch}" "${info_plist_path}"
  53. /usr/libexec/PlistBuddy -c "Add :${submodules_key}:${submodule_name}:commit_sha string ${sub_sha}" "${info_plist_path}"
  54. done
  55. echo "BuildDetails.plist has been updated at: ${info_plist_path}"