Make `testium lsp` (and the testium_assist editor extension that spawns it)
work from every distribution channel: source, wheel, PyInstaller, Flatpak,
AppImage.
Two enablers:
1. Declarative ACTIONS registry. The TestItemActions parents (console, plot,
json_rpc) now declare their nested actions as a class attribute
`ACTIONS = {yaml_key: class}`, mirroring PARAMS. The base __init__ seeds
action_classes from type(self).ACTIONS; register_actions() is kept only as
an imperative escape hatch. lsp/schema.py reads ACTIONS directly, dropping
the inspect.getsource/AST walk that returned no actions in a frozen
PyInstaller build (no .py source on disk).
2. pygls bundled per channel. Kept as the pyproject [lsp] extra (lean
`pip install testium`), layered into each full-app channel:
- build_env.sh installs pygls into test/tmp/.venv (source run + PyInstaller
build env)
- AppImage installs the wheel as `…whl[lsp]`
- Flatpak adds a python3-lsp network-pip module (matches the manifest's
global --share=network)
- PyInstaller .spec collect_submodules(pygls/lsprotocol) + hiddenimports for
the lazily-imported lsp/lsp.server/lsp.schema
test/validation/lsp_smoke.py (run by run.sh before the suite) enforces both
per channel: `<channel> schema` must keep console/plot/json_rpc actions and
`<channel> lsp` must answer an initialize request without reporting pygls
missing. Verified for source mode; the other channels need a rebuild to verify.
DESIGN.md updated (declarative section + new "Language server across channels"
subsection + Recent fixes).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
48 lines
1.4 KiB
Bash
Executable File
48 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if [ -z $PY_VENV_DIR ]; then
|
|
echo "PY_VENV_DIR must be defined"
|
|
exit -1
|
|
fi
|
|
|
|
if [ -z $REQ_PATH ]; then
|
|
echo "REQ_PATH must be defined"
|
|
exit -1
|
|
fi
|
|
|
|
if [ "$1" == "clean" ]; then
|
|
rm -Rf "$PY_VENV_DIR"
|
|
fi
|
|
|
|
# Check if venv is installed
|
|
python3 -c "import venv"
|
|
if [ "$?" -ne 0 ]; then
|
|
echo "venv must be installed on the host distribution."
|
|
exit -1
|
|
fi
|
|
# Check if venv is installed
|
|
python3 -c "import ensurepip"
|
|
if [ "$?" -ne 0 ]; then
|
|
echo "ensurepip must be installed on the host distribution."
|
|
exit -1
|
|
fi
|
|
|
|
# Install the virtual environment if needed
|
|
if [ ! -d "$PY_VENV_DIR" ]; then
|
|
echo "Creation of the virtual environment"
|
|
python3 -m venv "$PY_VENV_DIR"
|
|
source "$PY_VENV_DIR/bin/activate"
|
|
pip install --extra-index-url https://pypi.python.org/pypi -r $REQ_PATH
|
|
# Language-server deps (the pyproject [lsp] extra). Installed here so the
|
|
# source run AND the PyInstaller build — both of which use this venv — can
|
|
# start / collect the `testium lsp` server. pip-installed wheel users get
|
|
# them via `pip install testium[lsp]` instead.
|
|
pip install --extra-index-url https://pypi.python.org/pypi "pygls>=1.3"
|
|
# Validation suite plugin used to verify the report-exporter
|
|
# entry-points discovery end-to-end.
|
|
FAKE_EXPORTER_DIR="$(dirname "$REQ_PATH")/../test/validation/fake_exporter"
|
|
if [ -d "$FAKE_EXPORTER_DIR" ]; then
|
|
pip install -e "$FAKE_EXPORTER_DIR"
|
|
fi
|
|
fi
|