Skip to content

v4.4: package config env_vars, launchers, verify/update, desktop, docker inline-provision - #5

Merged
fruwe merged 12 commits into
mainfrom
v4.4
Jun 25, 2026
Merged

fruwe merged 12 commits into
mainfrom
v4.4

Conversation

@fruwe

@fruwe fruwe commented Jun 25, 2026

Copy link
Copy Markdown
Member

Part of the v4.4 coupled set — must merge together with eve#50 (core-first would drop env/launchers). Verified: eve sourced core-boundary lint green with all sibling plugins, 479 tests pass.

Supersedes #4 (its §3 content is included here).

fruwe added 12 commits June 23, 2026 19:20
sunshine, nomachine, rdp, rustdesk, splashtop, thinlinc carried only an env:
allowlist — their config->env mapping lived in eve core's ConfigEnv.MAPPINGS.
Move it onto each manifest's config_schema (env_var:), mirroring what the
providers already do, so a package owns its config fields and env vars.

The linux half declares config_schema for each (it wins the dual-OS merge with
the windows half). Release-coupled to the eve-side change (fruwehq/eve#47) that
makes ConfigEnv scan package plugins and drops the now-redundant MAPPINGS rows —
merge together so no package env var is silently dropped.

(moonlight is deliberately not touched: it is sunshine's CLIENT, not a package,
and its config + launcher move with the sunshine launcher work — §8.)
Migrate sunshine's remote launchers out of core. Port the moonlight/sunshine
argv builders verbatim from eve_sdk.remote_launch.py into commands/_client.py,
add the four entry launchers (sunshine-open, sunshine-wait, moonlight-open,
moonlight-pair) reading the EVE_REMOTE_* contract, and wire the actions
(exec + wait_for). moonlight is sunshine's client, so its config rows
(EPHEMERAL_MOONLIGHT_*) move onto sunshine's config_schema. Add vagrant
port_forwards. Argv-parity tests ported alongside.
Migrate nomachine (connect/info) and splashtop (info) launchers out of core.
Pure entry scripts reading EVE_REMOTE_* — no argv builders, so no parity tests.
Both declare exec on their actions; the generic dispatch path now serves them.
Port the thinlinc argv builders (thinlinc_url, thinlinc_client_*, url_open)
into commands/_client.py, add thinlinc-web + thinlinc-client entry launchers
reading EVE_REMOTE_*, wire both actions (exec), and add vagrant port_forwards
(300). Argv-parity tests ported.
Port rdp argv builders (rdp_file_lines, xfreerdp_command, msrdp_*) into
commands/_client.py and the rdp-open entry launcher (reads EVE_REMOTE_*, uses
$EVE_REMOTE_ROOT/scripts/instance-password for the Windows password; ubuntu
desktop-mode detection preserved). Wire the rdp action (exec) + vagrant
port_forwards (3389). Argv-parity tests ported.
Port rustdesk argv builders (rustdesk_local_client, rustdesk_connect_command,
shell_quote) into commands/_client.py and the rustdesk-launch entry launcher
(the SSH state-query dance, using $EVE_REMOTE_ROOT/scripts/instance-ssh; same
script serves connect + info via EVE_REMOTE_ACTION). Wire both actions (exec).

Capability model (replaces the core rustdesk+GNOME guard): rustdesk declares
conflicts_capabilities: [session:wayland], and gnome-desktop declares
provides: [session:wayland]. No package names either side. Argv-parity ported.
Port vnc argv builders (tunnel opts/commands, viewer args, system open, passwd
fetch) into commands/_client.py and the vnc-open entry launcher (SSH tunnel +
viewer; uses $EVE_REMOTE_ROOT/scripts/instance-ssh + instance-paths + vagrant
ssh-config). Wire the vnc action (exec) + vagrant port_forwards (5901).
Argv-parity ported.
Port xpra argv builders (ssh opts, attach linux/windows/desktop, tunnel) into
commands/_client.py and the xpra-launch entry launcher (all modes branch on
EVE_REMOTE_ACTION; uses $EVE_REMOTE_ROOT/scripts/instance-paths + vagrant
ssh-config). Wire the desktop + attach actions (exec) + vagrant port_forwards
(14500). Argv-parity ported.
Port waypipe argv builders (vagrant/ssh commands + opts) into commands/_client.py
and the waypipe-open entry launcher (reads EVE_REMOTE_*, APP env; uses
$EVE_REMOTE_ROOT/scripts/vagrant-up + instance-paths + vagrant ssh-config). Wire
the waypipe action (exec). Argv-parity portted.

All nine launcher-owning packages are now migrated (sunshine, nomachine, splashtop,
thinlinc, rdp, rustdesk, vnc, xpra, waypipe); core fallback still serves them until
Phase 4 deletes the core leaks.
Add verify action+command to rdp, rustdesk, sunshine, vnc, thinlinc (live probes
ported from core, using EVE_REMOTE_* + $EVE_REMOTE_ROOT/scripts/instance-ssh).
Add update.ubuntu to rustdesk + sunshine (self-upgrade steps run by update-tools).
Add 'desktop' manifest field {name, session, headless} to gnome-desktop,
gnome-desktop-headless, kde-desktop, kde-desktop-headless, xfce-desktop,
xfce-desktop-headless. Drives capability-based desktop/session detection in
core (compatibility_target) without naming packages.
… (eve v4.4 §15.5c)

Core's profile_resolve no longer hardcodes the Docker install in the Vagrantfile;
the docker package owns its inline-provision snippet, aggregated generically.
@fruwe
fruwe merged commit 0eebb2f into main Jun 25, 2026
1 of 2 checks passed
@fruwe
fruwe deleted the v4.4 branch June 25, 2026 08:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant