Skip to content

v2.0.0 — Symfony 6.4/7/8 + PHP 8.2+, per-server auth, hidden_processes, restart - #2

Merged
tomas-kulhanek merged 2 commits into
masterfrom
v2
Jul 14, 2026
Merged

v2.0.0 — Symfony 6.4/7/8 + PHP 8.2+, per-server auth, hidden_processes, restart#2
tomas-kulhanek merged 2 commits into
masterfrom
v2

Conversation

@tomas-kulhanek

@tomas-kulhanek tomas-kulhanek commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Full modernization + hardening of the bundle. Breaking release — see UPGRADE-2.0.md.

Modernization

  • PHP ≥ 8.2, Symfony ^6.4 || ^7.0 || ^8.0, supervisorphp/supervisor ^5.1
  • PSR-17/PSR-18 via fXmlRpc\Transport\PsrTransport — drops the abandoned symfony/templating and php-http/HTTPlug stack; the bundle registers its own Nyholm PSR-17 factory + Psr18Client (no app-level wiring required)
  • modern bundle layout (config/, templates/, translations/, getPath()); services and routes are PHP configs (Symfony 8 removed the XML loaders)
  • config root key supervisor:helppc_supervisor:, parameter helppc_supervisor.servers, per-server host is required
  • CI: GitLab CI → GitHub Actions (PHP 8.2–8.4, lowest/highest deps, PHPStan 2 level 7, PHPUnit 11)

New features

  • per-server basic auth (username/password) via the BasicAuthClient PSR-18 decorator — credentials never appear in URLs or exception messages
  • hidden_processes deny-list (matches process name OR group — covers numprocs>1 programs and event listeners): hidden processes are excluded from every listing and all routes targeting them return 404 before any RPC call
  • restart action (stop-and-wait, then start); all state-changing routes are POST-only
  • bounded log tails (log_tail_bytes, default 16 KiB) instead of reading the whole log
  • templates rewritten without Bootstrap 3 / jQuery / fancybox; applications override a single layout.html.twig

Removed

  • start-all/stop-all (unsafe in combination with hidden_processes — stop-all would also kill hidden processes)
  • log clearing, AJAX process-info endpoints

Verification

  • 19 tests (unit + kernel smoke) green, PHPStan 2 level 7 clean, composer validate --strict OK
  • standalone smoke against a real supervisord in Docker (10/10): auth 401/200, filtering, stop/start/restart, log tail
  • verified end-to-end in Shop-Creator/master-app (/admin/supervisor)

After merge

  1. create the v2.0.0 release/tag (gh release create v2.0.0)
  2. check that Packagist picked the version up (the repo already points to GitHub; hit Update otherwise)
  3. a follow-up lands in master-app afterwards: swap v2.x-dev for ^2.0 and drop the repositories entry

🤖 Generated with Claude Code

tomas-kulhanek and others added 2 commits July 15, 2026 00:05
…rocesses, restart

Modernization (breaking):
- PHP >= 8.2, Symfony ^6.4||^7.0||^8.0, supervisorphp/supervisor ^5.1,
  fXmlRpc PsrTransport (PSR-17/18) — drops abandoned symfony/templating and
  php-http/HTTPlug stack; bundle ships its own Nyholm PSR-17 + Psr18Client
- modern bundle layout (config/, templates/, translations/, getPath());
  services + routes are PHP configs (Symfony 8 removed the XML loaders)
- config root key: supervisor -> helppc_supervisor; parameter
  helppc_supervisor.servers; per-server host required

Features:
- per-server HTTP basic auth (username/password) via BasicAuthClient decorator
- hidden_processes deny-list (matches name or group): excluded from listings,
  hard 404 on every process route before any RPC call
- restart action (stop-and-wait, then start); all state-changing routes POST
- bounded log tails (log_tail_bytes, default 16 KiB)
- templates rewritten without Bootstrap 3 / jQuery / fancybox

Removed: start/stop-all, log clearing, AJAX process-info endpoints.

Tests: PHPUnit 11 (unit + kernel smoke), PHPStan 2 level 7, GitHub Actions CI
(PHP 8.2-8.4, lowest/highest deps). See UPGRADE-2.0.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…return type

- templates: use an explicit domain in |trans({}, 'SupervisorBundle') instead
  of the {% trans_default_domain %} tag — its token parser in older
  symfony/twig-bridge (< 6.4.17) crashes with Twig >= 3.15 with 'EmptyNode
  cannot have children' (lowest-deps job resolved bridge v6.4.0 + twig v3.27)
- SupervisorBundle::getContainerExtension(): the parent property may hold
  false ('no extension') — instanceof check instead of ??=

Verified locally against bridge 6.4.0 + twig 3.27 (previously failing),
pure lowest (twig 2.13) and highest deps: 19/19 tests, phpstan clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@tomas-kulhanek
tomas-kulhanek merged commit c157f75 into master Jul 14, 2026
10 checks passed
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