ren worker folder adding orig, mv new one into root
This commit is contained in:
@@ -395,9 +395,13 @@ CTR_MARKER_DIR="/opt/raccoon-setup"
|
||||
# Record <repo> as set up in THIS container. Best-effort: if the marker can't be written the
|
||||
# only consequence is that setup runs again next time, and every step of it is idempotent.
|
||||
_mark_ctr_setup() { mkdir -p "$CTR_MARKER_DIR" 2>/dev/null && : > "$CTR_MARKER_DIR/$1.done" 2>/dev/null || true; }
|
||||
# A member set up but left without its dependencies, so the later arms don't claim otherwise.
|
||||
_mark_ctr_nodeps() { mkdir -p "$CTR_MARKER_DIR" 2>/dev/null && : > "$CTR_MARKER_DIR/$1.nodeps" 2>/dev/null || true; }
|
||||
_clear_ctr_nodeps() { rm -f "$CTR_MARKER_DIR/$1.nodeps" 2>/dev/null || true; }
|
||||
_ctr_nodeps() { [ -f "$CTR_MARKER_DIR/$1.nodeps" ]; }
|
||||
|
||||
# First-use setup for a member repo: checkout its commit, install deps, prepare DB.
|
||||
# The DNS jail (post-start.sh) blocks package registries, and the setup below installs
|
||||
# The DNS jail (apply-dns-jail.sh) blocks package registries, and the setup below installs
|
||||
# from them. Lift it for the install, then put it back — including on Ctrl-C, or the
|
||||
# container would silently keep its network until the next start.
|
||||
_DNSJAIL_LIFTED=""
|
||||
@@ -431,6 +435,7 @@ _dnsjail_restore() {
|
||||
[ -n "$(ls -A /tmp/.dnsjail/lifts 2>/dev/null)" ] && return 0
|
||||
[ -f /tmp/.dnsjail/allow ] || return 0
|
||||
sudo env DNSJAIL_ALLOW="$(cat /tmp/.dnsjail/allow)" \
|
||||
DNSJAIL_ALLOW_EXTRA="$(cat /tmp/.dnsjail/allow-extra 2>/dev/null)" \
|
||||
sh /workspace/.devcontainer/dns-jail-container.sh >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
@@ -601,17 +606,28 @@ setup_repo() {
|
||||
# outright (Explore resolved pydantic 2.13.4 against a lock pinning 2.9.2, and the
|
||||
# pinned strawberry cannot import on 2.13). Prefer the lock when there is one.
|
||||
local vdir; vdir=$(_uv_venv_dir "$repo")
|
||||
# --clear: uv >=0.12 won't create over an existing venv, so a failed first setup
|
||||
# would wedge the member. setuptools 80.x is the last line shipping pkg_resources.
|
||||
( cd "$dir" \
|
||||
&& uv venv "$vdir" -p "$ver" -q \
|
||||
&& uv venv --clear "$vdir" -p "$ver" -q \
|
||||
&& . "$vdir/bin/activate" \
|
||||
&& uv pip install -q 'setuptools==80.9.0' \
|
||||
&& { [ -f .env.example ] && cp -n .env.example .env; true; } \
|
||||
&& { for kv in $bootenv; do grep -qxF "$kv" .env 2>/dev/null || echo "$kv" >> .env; done; true; } \
|
||||
&& { if [ -f poetry.lock ] && command -v poetry >/dev/null 2>&1 \
|
||||
&& POETRY_VIRTUALENVS_CREATE=false poetry install -q --no-interaction --no-root 2>/dev/null; then true; \
|
||||
elif [ -f pyproject.toml ]; then uv pip install -q -e . || uv pip install -q -r requirements.txt 2>/dev/null || true; \
|
||||
elif [ -f requirements.txt ]; then uv pip install -q -r requirements.txt; \
|
||||
elif [ -f server/requirements.txt ]; then uv pip install -q -r server/requirements.txt; \
|
||||
elif [ -f setup.py ]; then uv pip install -q -e .; else true; fi; } ) || return 1
|
||||
&& { for kv in $bootenv; do grep -qxF "$kv" .env 2>/dev/null || echo "$kv" >> .env; done; true; } ) || return 1
|
||||
# Non-fatal: a manifest that cannot resolve here (a pin with no wheel for this
|
||||
# architecture, say) leaves the member readable instead of failing the whole run.
|
||||
if ( cd "$dir" && . "$vdir/bin/activate" \
|
||||
&& { if [ -f poetry.lock ] && command -v poetry >/dev/null 2>&1 \
|
||||
&& POETRY_VIRTUALENVS_CREATE=false poetry install -q --no-interaction --no-root 2>/dev/null; then true; \
|
||||
elif [ -f pyproject.toml ]; then uv pip install -q -e . || uv pip install -q -r requirements.txt 2>/dev/null || true; \
|
||||
elif [ -f requirements.txt ]; then uv pip install -q -r requirements.txt; \
|
||||
elif [ -f server/requirements.txt ]; then uv pip install -q -r server/requirements.txt; \
|
||||
elif [ -f setup.py ]; then uv pip install -q -e .; else true; fi; } ); then
|
||||
_clear_ctr_nodeps "$repo"
|
||||
else
|
||||
_mark_ctr_nodeps "$repo"
|
||||
printf " ${YELLOW}\xe2\x9a\xa0 %s: dependencies did not install${RESET} \xe2\x80\x94 explore-only in this container.\n ${GRAY}Reading the code, git and the editor still work; running the app or its tests will not.\n Usually a pin with no build for this machine's architecture. To retry: rm %s/%s.done${RESET}\n" "$repo" "$CTR_MARKER_DIR" "$repo"
|
||||
fi
|
||||
_mark_ctr_setup "$repo"; return 0
|
||||
fi
|
||||
_py_have "$ver" || { printf " ${GRAY}(Python %s not in this image; skipping deps \xe2\x80\x94 explore-only)${RESET}\n" "$ver"; _mark_ctr_setup "$repo"; return 0; }
|
||||
@@ -630,10 +646,9 @@ setup_repo() {
|
||||
# Every member Dockerfile sets this; without it poetry builds a .venv here
|
||||
# that the trial image has no equivalent of.
|
||||
poetry config virtualenvs.create false 2>/dev/null || true; \
|
||||
# The git→path rewrite invalidates poetry.lock ("changed significantly");
|
||||
# regenerate it before installing. Poetry 2.x `lock` preserves pins by
|
||||
# default (the old `--no-update` flag was removed in 2.0).
|
||||
poetry lock 2>/dev/null || true; \
|
||||
# The git→path rewrite invalidates poetry.lock ("changed significantly"), so
|
||||
# re-lock preserving pins: --no-update on poetry 1.x, the default on 2.x.
|
||||
poetry lock --no-update 2>/dev/null || poetry lock 2>/dev/null || true; \
|
||||
# --no-root: install deps only, not the project package itself. Some members'
|
||||
# pyproject package name doesn't map to a folder poetry can find ("No file/folder
|
||||
# found for package <x>"), which fails the whole install. The worker explores +
|
||||
@@ -684,7 +699,12 @@ setup_repo() {
|
||||
}
|
||||
|
||||
start_poly() {
|
||||
local repo="${1:-}"; [ -z "$repo" ] && repo="$(_poly_default)"
|
||||
local repo="${1:-}"
|
||||
if [ -z "$repo" ]; then
|
||||
repo="$(_poly_default)"
|
||||
printf "${GRAY}no repo given — defaulting to '%s'. run-app <repo> picks another: %s${RESET}\n" \
|
||||
"$repo" "$(_poly_repos | tr '\n' ' ')"
|
||||
fi
|
||||
if ! _poly_repos | grep -qx "$repo"; then
|
||||
printf "${RED}unknown repo '%s'.${RESET} available: ${GRAY}%s${RESET}\n" "$repo" "$(_poly_repos | tr '\n' ' ')"
|
||||
return 1
|
||||
@@ -718,7 +738,8 @@ start_poly() {
|
||||
return 0
|
||||
fi
|
||||
bash /workspace/.devcontainer/post-start.sh >/dev/null 2>&1 || true
|
||||
setup_repo "$repo" || { printf "${RED}setup failed for %s${RESET} \xe2\x80\x94 ${GRAY}run-app --logs${RESET}\n" "$repo"; return 1; }
|
||||
# Not --logs: setup runs before any app log exists, so its error is on screen, not in a file.
|
||||
setup_repo "$repo" || { printf "${RED}setup failed for %s${RESET} \xe2\x80\x94 ${GRAY}see the error above${RESET}\n" "$repo"; return 1; }
|
||||
local cmd=""
|
||||
case "$kind" in
|
||||
elixir)
|
||||
@@ -812,6 +833,10 @@ start_poly() {
|
||||
cmd="env $bootenv $craenv PATH=$nbin:\$PATH PORT=3000 BROWSER=none HOST=0.0.0.0 yarn $sc"
|
||||
fi ;;
|
||||
python)
|
||||
if _ctr_nodeps "$repo"; then
|
||||
printf " ${GRAY}%s: explore-only \xe2\x80\x94 its dependencies did not install, so its tests and scripts won't run here.${RESET}\n" "$repo"
|
||||
return 0
|
||||
fi
|
||||
if [ -z "$startcmd" ]; then
|
||||
printf " ${GRAY}%s: Python deps installed. No web server is wired \xe2\x80\x94 run its tests/scripts directly (e.g. pytest).${RESET}\n" "$repo"
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user