From 3a7236d51f0f527baaee22c9502bd75ffde032ab Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Tue, 16 Jun 2026 14:24:08 -0700 Subject: [PATCH] playbook: put uv/uvx on the irv-ml1-arbo runner PATH MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The irv-ml1-arbo Gitea Actions runner (host-executor as lkraven under systemd) gets the bare service PATH (/usr/local/bin:/usr/bin:/bin), which omits ~/.local/bin — so the CI uv bootstrap failed with "uv: not found". Symlink uv/uvx into /usr/local/bin (on the systemd PATH) to fix it and retire the per-run curl|sh bootstrap. Idempotent (creates: guard); re-applies cleanly after a runner rebuild. Authorized by comfy-dev (engine owner) per althing thread 01KV94VTS27B. --- playbooks/arbo-runner-uv-symlink.yaml | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 playbooks/arbo-runner-uv-symlink.yaml diff --git a/playbooks/arbo-runner-uv-symlink.yaml b/playbooks/arbo-runner-uv-symlink.yaml new file mode 100644 index 0000000..2a7a31b --- /dev/null +++ b/playbooks/arbo-runner-uv-symlink.yaml @@ -0,0 +1,41 @@ +# Put `uv`/`uvx` on the irv-ml1-arbo Gitea Actions runner's PATH. +# +# WHY: the runner (`irv-ml1-arbo`, act_runner host-executor running AS lkraven +# under systemd) inherits the bare systemd service PATH — +# /usr/local/bin:/usr/bin:/bin +# — which does NOT include lkraven's `~/.local/bin` or `~/.cargo/bin`. uv is +# installed at /home/lkraven/.local/bin/uv (login-shell only), so the CI step's +# `uv run` failed with `uv: not found` even though uv is present on the box. +# `/usr/local/bin` IS on the systemd PATH, so symlinking uv there makes it +# visible to the runner. This also lets deploy.yml drop the per-run `curl|sh` +# uv bootstrap. Operator-asked ("fix cicd"); comfy-dev (engine owner) authorized +# the specific symlink 2026-06-16 (althing thread 01KV94VTS27B…). +# +# Re-apply this if the runner host is rebuilt or uv is reinstalled elsewhere. +# Sudo because /usr/local/bin is root-owned; uv is owned by lkraven (the runner +# identity), which is who actually executes the symlink at job time — traversal +# of /home/lkraven works for lkraven, not for infra-ops (don't be fooled by an +# infra-ops `env -i` exec test reporting Permission denied; that's the wrong +# identity — verify AS lkraven). + +vars: + uv_src: /home/lkraven/.local/bin/uv + uvx_src: /home/lkraven/.local/bin/uvx + +steps: + - name: Symlink uv into /usr/local/bin (on the systemd PATH) + shell: ln -s {{ uv_src }} /usr/local/bin/uv + creates: /usr/local/bin/uv + + - name: Symlink uvx into /usr/local/bin + shell: ln -s {{ uvx_src }} /usr/local/bin/uvx + creates: /usr/local/bin/uvx + +verify: + - name: uv resolves to the /usr/local/bin symlink under a systemd-like PATH (run AS lkraven) + shell: sudo -u lkraven env -i PATH=/usr/local/bin:/usr/bin:/bin sh -c 'command -v uv && uv --version' + changed_when: "false" + + - name: uvx resolves the same way + shell: sudo -u lkraven env -i PATH=/usr/local/bin:/usr/bin:/bin sh -c 'command -v uvx && uvx --version' + changed_when: "false"