diff --git a/scripts/mac_bridge/install_autorecover_launchagent.sh b/scripts/mac_bridge/install_autorecover_launchagent.sh index 14ac198e..42f32f4f 100755 --- a/scripts/mac_bridge/install_autorecover_launchagent.sh +++ b/scripts/mac_bridge/install_autorecover_launchagent.sh @@ -7,6 +7,8 @@ set -euo pipefail REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)" RECOVER_SCRIPT="${REPO_ROOT}/scripts/mac_bridge/recover_runner_after_reboot.sh" +SUPPORT_DIR="${HOME}/Library/Application Support/Kakeya" +INSTALLED_RECOVER_SCRIPT="${SUPPORT_DIR}/recover_runner_after_reboot.sh" LABEL="com.kakeya.mac-bridge-runner-autorecover" UID_NUM="$(id -u)" USER_NAME="$(id -un)" @@ -20,6 +22,8 @@ fi [ -x "$RECOVER_SCRIPT" ] || chmod +x "$RECOVER_SCRIPT" mkdir -p "${HOME}/actions-runner/_diag" +mkdir -p "$SUPPORT_DIR" +install -m 755 "$RECOVER_SCRIPT" "$INSTALLED_RECOVER_SCRIPT" TMP_PLIST="$(mktemp)" trap 'rm -f "$TMP_PLIST"' EXIT @@ -34,11 +38,11 @@ cat >"$TMP_PLIST" <ProgramArguments /bin/bash - ${RECOVER_SCRIPT} + ${INSTALLED_RECOVER_SCRIPT} WorkingDirectory - ${REPO_ROOT} + ${HOME}/actions-runner EnvironmentVariables @@ -48,6 +52,8 @@ cat >"$TMP_PLIST" <RunAtLoad + AbandonProcessGroup + KeepAlive SuccessfulExit diff --git a/tests/inference_engine/bridge/test_autorecover_installer.py b/tests/inference_engine/bridge/test_autorecover_installer.py new file mode 100644 index 00000000..e2a5002b --- /dev/null +++ b/tests/inference_engine/bridge/test_autorecover_installer.py @@ -0,0 +1,19 @@ +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[3] +INSTALLER = ROOT / "scripts" / "mac_bridge" / "install_autorecover_launchagent.sh" + + +def test_installer_uses_tcc_safe_support_directory(): + source = INSTALLER.read_text() + assert 'SUPPORT_DIR="${HOME}/Library/Application Support/Kakeya"' in source + assert 'install -m 755 "$RECOVER_SCRIPT" "$INSTALLED_RECOVER_SCRIPT"' in source + assert "${INSTALLED_RECOVER_SCRIPT}" in source + assert "${HOME}/actions-runner" in source + + +def test_installer_preserves_direct_runner_child(): + source = INSTALLER.read_text() + assert "AbandonProcessGroup" in source + assert "" in source