@@ -16,6 +16,8 @@ GITHUB_URL="https://github.com/${REPO}"
1616RELEASE_TAG=" ${OPENSHELL_VERSION:- dev} "
1717CHECKSUMS_NAME=" openshell-checksums-sha256.txt"
1818LOCAL_GATEWAY_PORT=" 17670"
19+ HOMEBREW_TAP=" nvidia/openshell"
20+ HOMEBREW_FORMULA_NAME=" openshell"
1921
2022info () {
2123 printf ' %s: %s\n' " $APP_NAME " " $* " >&2
@@ -269,6 +271,34 @@ install_deb_package() {
269271 fi
270272}
271273
274+ homebrew_formula_path () {
275+ _tap=" $1 "
276+ _formula=" $2 "
277+
278+ if ! as_target_user brew tap-info " $_tap " > /dev/null 2>&1 ; then
279+ info " creating local Homebrew tap ${_tap} ..."
280+ as_target_user brew tap-new --no-git " $_tap " > /dev/null
281+ fi
282+
283+ _tap_dir=" $( as_target_user brew --repository " $_tap " 2> /dev/null || true) "
284+ [ -n " $_tap_dir " ] || error " could not locate Homebrew tap ${_tap} "
285+
286+ _formula_dir=" ${_tap_dir} /Formula"
287+ as_target_user mkdir -p " $_formula_dir "
288+ printf ' %s/%s.rb\n' " $_formula_dir " " $_formula "
289+ }
290+
291+ patch_homebrew_formula () {
292+ _formula_file=" $1 "
293+ _patched_file=" ${_formula_file} .patched"
294+
295+ if grep -q ' entitlements.write <<~XML' " $_formula_file " ; then
296+ info " patching Homebrew formula for idempotent postinstall..."
297+ sed ' s/entitlements\.write <<~XML/entitlements.atomic_write <<~XML/' " $_formula_file " > " $_patched_file "
298+ mv " $_patched_file " " $_formula_file "
299+ fi
300+ }
301+
272302start_user_gateway () {
273303 info " restarting openshell-gateway user service as ${TARGET_USER} ..."
274304
@@ -386,19 +416,31 @@ install_macos_homebrew() {
386416 download_release_asset " $RELEASE_TAG " " openshell.rb" " $_formula_file " || {
387417 error " failed to download ${_formula_url} ; the selected release may not include a Homebrew formula"
388418 }
419+ chmod 0644 " $_formula_file "
420+ patch_homebrew_formula " $_formula_file "
421+
422+ _tap_formula_file=" $( homebrew_formula_path " $HOMEBREW_TAP " " $HOMEBREW_FORMULA_NAME " ) "
423+ info " staging Homebrew formula in tap ${HOMEBREW_TAP} ..."
424+ cp " $_formula_file " " $_tap_formula_file "
425+ chmod 0644 " $_tap_formula_file "
426+ if [ " $( id -u) " -eq 0 ]; then
427+ chown " $TARGET_USER " " $_tap_formula_file " 2> /dev/null || true
428+ fi
429+
430+ _formula_ref=" ${HOMEBREW_TAP} /${HOMEBREW_FORMULA_NAME} "
389431
390432 if as_target_user brew list --formula openshell > /dev/null 2>&1 ; then
391433 info " reinstalling OpenShell with Homebrew..."
392- as_target_user brew reinstall --formula " $_formula_file "
434+ as_target_user brew reinstall --formula " $_formula_ref "
393435 else
394436 info " installing OpenShell with Homebrew..."
395- as_target_user brew install --formula " $_formula_file "
437+ as_target_user brew install --formula " $_formula_ref "
396438 fi
397439
398440 info " restarting OpenShell Homebrew service..."
399- if ! as_target_user brew services restart openshell ; then
441+ if ! as_target_user brew services restart " $_formula_ref " ; then
400442 warn " could not restart the OpenShell Homebrew service"
401- info " restart it later with: brew services restart openshell "
443+ info " restart it later with: brew services restart ${_formula_ref} "
402444 info " then register it with: openshell gateway add http://127.0.0.1:${LOCAL_GATEWAY_PORT} --local --name local"
403445 return 0
404446 fi
0 commit comments