#!/bin/sh # Dependencies live on the shared checkout; the runner home stays private. set -eu cd "${APP_ROOT:-/usr/src/app}" state=$(workspace-path) export VIRTUAL_ENV="$state/venv" UV_PROJECT_ENVIRONMENT="$state/venv" PIP_USER=0 export PATH="$VIRTUAL_ENV/bin:$PATH" export HOST="${HOST:-0.0.0.0}" PORT="${PORT:-8080}" export WATCHFILES_FORCE_POLLING="${WATCHFILES_FORCE_POLLING:-true}" case "${1:-}" in prepare) if [ -f uv.lock ]; then uv sync --locked elif [ -f requirements.txt ]; then python -m venv "$VIRTUAL_ENV" "$VIRTUAL_ENV/bin/python" -m pip install -r requirements.txt else echo 'Provide uv.lock with pyproject.toml or requirements.txt' >&2; exit 1; fi ;; start) [ -x "$VIRTUAL_ENV/bin/python" ] || { echo 'Run workspace preparation first' >&2; exit 1; } if [ -n "${WORKSPACE_PYTHON_COMMAND:-}" ]; then exec sh -ec "$WORKSPACE_PYTHON_COMMAND"; fi exec python -m gunicorn --bind "$HOST:$PORT" --reload --reload-engine poll "${GUNICORN_APP:-myapp.wsgi:application}" ;; *) echo 'Usage: workspace-python prepare|start' >&2; exit 1 ;; esac