CluPilotCloud/tests/Feature/Admin
Claude 276f926d57
tests / pest (push) Successful in 7m41s Details
tests / assets (push) Successful in 20s Details
tests / release (push) Successful in 4s Details
Add the update button, and give it a host-side agent that can actually update
The panel had no way to update the installation, and could not have one on its
own: it runs as www-data inside a container, and the update restarts that
container. A button that shelled out would kill its own web server
mid-response, and would need the application to hold host-level credentials —
a far worse thing to own than an out-of-date checkout.

So the button is a mailbox. The panel writes a request into the checkout; a
systemd timer on the host, running as the service account, consumes it, runs
deploy/update.sh and writes back what happened. The same timer answers the
question the panel cannot answer alone — is there anything to update — which
needs a git fetch, and therefore credentials the application does not have.

The parts that were wrong before review, all of which would have shipped as a
button that looks fine and does nothing:

- The agent was only installed by install.sh, which the installed base never
  runs again. Every existing server would have shown the button permanently
  disabled. It has its own root entry point now, install.sh delegates to it,
  and update.sh says so when the unit is missing.
- On a release-pinned server the checkout is detached, so it followed
  "origin/HEAD" and then ran an update that deliberately stays on the pinned
  tag: updates advertised, nothing applied. It now compares TAGS in release
  mode and passes the target release through.
- On a branch other than main it advertised that branch's commits and then
  deployed main's, because update.sh defaults to main.
- A request written while the agent was down was executed whenever the agent
  next started, days later.
- A single status file meant the routine five-minute check overwrote a failed
  update with "idle" before anyone saw it.
- An agent that had been stopped left the button enabled forever, because a
  status file written once counted as an agent.
- The agent's error messages were German strings rendered into an English
  interface; it reports codes now and the panel translates them.

Also: the add-address button in the console-access panel was as tall as the
field plus its hint, because the hint was a sibling inside the flex row.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 05:33:17 +02:00
..
AdminConsoleTest.php feat(admin): dark Tactical-Terminal operator console 2026-07-25 08:35:03 +02:00
AdminHostRestrictionTest.php fix(security): match ADMIN_HOSTS case-insensitively; share test helpers 2026-07-25 20:56:26 +02:00
AdminSettingsTest.php fix(admin): shown-once temp password for invited staff; suppress announcements for cancelled windows at send time 2026-07-25 16:23:21 +02:00
ConsoleNetworkTest.php feat(security): a way back into the console that does not need the console 2026-07-27 03:09:13 +02:00
ConsoleReportsRealDataTest.php Report the estate from the database, and print the traffic that is sold 2026-07-27 04:48:51 +02:00
CustomerRevenueTest.php feat(billing): the plan catalogue becomes three tables, and config stops selling 2026-07-26 12:05:56 +02:00
DatacenterTest.php fix(admin): no admin lockout (is_admin fallback); centered modal width; datacenter edit modal + country dropdown 2026-07-25 18:09:17 +02:00
HostManagementTest.php fix(security): match ADMIN_HOSTS case-insensitively; share test helpers 2026-07-25 20:56:26 +02:00
InstanceAdminAccessTest.php fix(admin): the admin password is shown once, and means it 2026-07-26 05:34:57 +02:00
MaintenanceTest.php fix(maintenance): make the window form usable 2026-07-25 23:05:33 +02:00
PlanAdminTest.php feat(admin): a console for creating, pricing and scheduling plans 2026-07-26 12:41:51 +02:00
ProvisioningActionsTest.php fix(ui): modal above sidebar (z-index); datacenter edit buttons stay right; toast slides from bottom; provisioning retry action 2026-07-25 15:29:37 +02:00
RbacTest.php fix(security): console and account checks now survive a Livewire action 2026-07-26 20:04:34 +02:00
UpdateButtonTest.php Add the update button, and give it a host-side agent that can actually update 2026-07-27 05:33:17 +02:00
VpnTest.php fix(vpn): a late revocation must not disconnect whoever holds the key now 2026-07-26 01:24:55 +02:00