@@ -85,6 +85,7 @@ EXECUTABLE_NAME="aura-launcher"
8585EXECUTABLE_PATH=" ${MACOS_DIR} /${EXECUTABLE_NAME} "
8686ICON_SOURCE=" ${ROOT_DIR} /aura_icon.icns"
8787ROOT_PATH_FALLBACK=" ${RESOURCES_DIR} /aura-root-path"
88+ PYTHON_RUNTIME_FILE=" ${RESOURCES_DIR} /aura-python-path"
8889VERSION_FILE=" ${RESOURCES_DIR} /aura-version"
8990VERSION_FULL_FILE=" ${RESOURCES_DIR} /aura-version-full"
9091PROVENANCE_FILE=" ${RESOURCES_DIR} /aura-launch-provenance.json"
@@ -98,8 +99,41 @@ cd "${ROOT_DIR}"
9899
99100echo " 📦 Building ${APP_NAME} (live source mode)..."
100101
101- if [ -x " ${ROOT_DIR} /.venv/bin/python3" ] && [ -f " ${ROOT_DIR} /scripts/build_launcher_icon.py" ]; then
102- " ${ROOT_DIR} /.venv/bin/python3" " ${ROOT_DIR} /scripts/build_launcher_icon.py" > /dev/null
102+ PRIMARY_ROOT=" "
103+ GIT_COMMON_DIR=" $( git rev-parse --path-format=absolute --git-common-dir 2> /dev/null || true) "
104+ if [ -n " ${GIT_COMMON_DIR} " ] && [ " $( basename " ${GIT_COMMON_DIR} " ) " = " .git" ]; then
105+ PRIMARY_ROOT=" $( dirname " ${GIT_COMMON_DIR} " ) "
106+ fi
107+
108+ PYTHON_RUNTIME=" "
109+ PYTHON_CANDIDATES=(
110+ " ${AURA_PYTHON_RUNTIME:- } "
111+ " ${ROOT_DIR} /.venv/bin/python3"
112+ " ${ROOT_DIR} /.venv/bin/python"
113+ )
114+ if [ -n " ${PRIMARY_ROOT} " ]; then
115+ PYTHON_CANDIDATES+=(
116+ " ${PRIMARY_ROOT} /.venv/bin/python3"
117+ " ${PRIMARY_ROOT} /.venv/bin/python"
118+ )
119+ fi
120+ for candidate in " ${PYTHON_CANDIDATES[@]} " ; do
121+ if [ -z " ${candidate} " ] || [ ! -x " ${candidate} " ]; then
122+ continue
123+ fi
124+ if " ${candidate} " -c ' import sys, httpx; raise SystemExit(0 if sys.version_info[:2] == (3, 12) else 1)' > /dev/null 2>&1 ; then
125+ PYTHON_RUNTIME=" $( " ${candidate} " -c ' import sys; print(sys.executable)' ) "
126+ break
127+ fi
128+ done
129+ if [ -z " ${PYTHON_RUNTIME} " ]; then
130+ echo " ❌ Aura needs the repository Python 3.12 environment with runtime dependencies installed." >&2
131+ echo " Expected .venv under ${ROOT_DIR}${PRIMARY_ROOT: + or ${PRIMARY_ROOT} } ." >&2
132+ exit 1
133+ fi
134+
135+ if [ -f " ${ROOT_DIR} /scripts/build_launcher_icon.py" ]; then
136+ " ${PYTHON_RUNTIME} " " ${ROOT_DIR} /scripts/build_launcher_icon.py" > /dev/null
103137fi
104138
105139if [ ! -f " ${LAUNCHER_SOURCE} " ]; then
@@ -128,16 +162,10 @@ rm -rf "${APP_DIR}"
128162mkdir -p " ${MACOS_DIR} " " ${RESOURCES_DIR} "
129163
130164printf ' %s\n' " ${ROOT_DIR} " > " ${ROOT_PATH_FALLBACK} "
165+ printf ' %s\n' " ${PYTHON_RUNTIME} " > " ${PYTHON_RUNTIME_FILE} "
131166cp " ${SCREEN_CAPTURE_POLICY_SOURCE} " " ${SCREEN_CAPTURE_POLICY_RESOURCE} "
132167
133- PYTHON_FOR_VERSION=" ${ROOT_DIR} /.venv/bin/python3"
134- if [ ! -x " ${PYTHON_FOR_VERSION} " ]; then
135- PYTHON_FOR_VERSION=" $( command -v python3 || true) "
136- fi
137- if [ -z " ${PYTHON_FOR_VERSION} " ]; then
138- echo " ❌ python3 is required to write Aura.app metadata."
139- exit 1
140- fi
168+ PYTHON_FOR_VERSION=" ${PYTHON_RUNTIME} "
141169
142170APP_SEMVER=" 2026.3.31"
143171APP_FULL_VERSION=" Aura Luna v${APP_SEMVER} "
0 commit comments