The GitHub Actions job "Required Checks" on 
texera.git/feat/local-dev-toolchain-install has failed.
Run started by GitHub user Yicong-Huang (triggered by Yicong-Huang).

Head commit for run:
78e091faeb1a51e0b5e196469a22e27bf7e27427 / Yicong Huang 
<[email protected]>
feat(local-dev): pick a usable Python and offer to install a missing toolchain

Two halves of the same fresh-machine problem.

**The interpreter that runs Python UDFs was picked blindly.**
`UDF_PYTHON_PATH` defaulted to `command -v python3` at source time — the system
interpreter, which almost never has `amber/requirements.txt` installed. Python
UDFs then failed at worker launch on a stack of import errors that pointed
nowhere near the interpreter choice, and the venv AGENTS.md tells contributors
to create (`<workspace>/venv312`) was ignored, as was an already-activated
`$VIRTUAL_ENV`.

Now resolved lazily, taking the first candidate that is Python 3.12 *and* can
import the worker's deps:

    $UDF_PYTHON_PATH -> $VIRTUAL_ENV -> <workspace>/venv312 -> pyenv 3.12
      -> python3.12 on PATH -> python3 on PATH

The chosen interpreter is reported the way the JDK probe reports JAVA_HOME. An
explicit `UDF_PYTHON_PATH` still wins — it's the documented override — but now
says so when it can't import what a worker needs. "No 3.12 anywhere" and "3.12
without amber's deps" are reported differently, because they need different
fixes and the old default silently produced the second one. Resolution is lazy
so `status` / `logs` / `--help` don't spawn an interpreter per candidate, and
never fatal: the JVM services run fine without a Python toolchain.

**A missing tool was described, never offered.** `_install_hint` printed a
suggestion and gave up, so a fresh machine meant hand-installing several things
and re-running `up` after each one to find the next gap. A missing JDK 17, Node
or Python 3.12 is now offered for install after showing the exact command:
the distro package manager for the JDK (SDKMAN when there is none), nvm for
Node, pyenv for Python — both bootstrapping themselves if absent.

The decision helpers (`_pkg_manager`, `_install_cmd_for`) only ever print what
would run; a separate step executes it. That keeps the choice unit-testable
without installing anything, and means the user is shown the command — `sudo`
included — before being asked.

Deliberately unchanged for non-interactive callers: without a TTY nothing is
ever prompted and the old print-a-hint-and-fail behaviour stands, so scripted
and CI runs can't hang on a read. `--install-missing` answers yes without
asking, `--no-install` only ever prints; the contradiction is refused rather
than silently resolved. docker and sbt stay hint-only — docker needs a daemon,
group membership and a re-login, which isn't something to do behind a y/n
prompt.

Closes #7066

Report URL: https://github.com/apache/texera/actions/runs/30497240338

With regards,
GitHub Actions via GitBox

Reply via email to