precision-soft/symfony-console
Adds Symfony Console support to Laravel, letting you run Artisan commands and build custom CLI applications with familiar Symfony components. A lightweight integration for creating console commands, handling interactive input, and extending your Laravel project's command-line tooling.
--check to flag the previously broken files exactly once. Do not let it land silently inside an unrelated deploy.working_directory (or any directive value) terminated the directive and started a new one, so a value such as "/srv\nExecStartPre=/bin/rm -rf /" produced a unit that systemd-analyze verify happily accepted with both directives present. If any value reaching these templates is tenant-supplied, operator-supplied, or imported from an external source (repo, database, onboarding form), this release is a prerequisite, not a nice-to-have — and it should be referenced in the security review and audit evidence for the deployment pipeline.$ (systemd variable expansion — a --secret=pa$word argument silently became pa$word with $word substituted), standalone ; in ExecStart, cron % (which truncated the command and pushed the remainder to stdin), and Supervisor %-interpolation make it defensible to accept externally influenced values for secrets, log paths, and command arguments. Until this release, that was not a decision we could make..example/ is a runnable, CI-gated slice of a realistic product-catalogue operation covering every public capability (custom commands, instance/memory/time-limit traits, environment-driven template selection, generated crontab rows, Supervisor programs, systemd units, Kubernetes values, all three preview modes, installed from the working tree via a path repository). That materially lowers the cost of a spike: we can fork the example as our own ops repo skeleton instead of writing a bespoke generator or reaching for Ansible.--diff and --check are only trustworthy if they explain why a file differs. This release makes CRLF-vs-LF show up as \ line endings differ under the ---/+++ header instead of a bare [changed] with nothing beneath it, and it stops --diff from showing empty hunks for files no command declares (now correctly rendered against +++ /dev/null). That turns --check into a viable merge gate rather than a noisy one teams learn to ignore.systemd-analyze verify (and friends) as our own pre-merge validation. The example suite runs generated units through systemd-analyze verify wherever it is on PATH, and asserts crontab/Supervisor/K8s output "the way a deployment pipeline reads them." That is a validation pattern worth copying into our pipeline regardless of the vendor decision.save() no longer removes a directory reachable through a symlink (dangling symlinks are still reported as removed). This is the kind of data-loss-adjacent behaviour that needs an explicit decision recorded before we let the tool prune production paths.Consider it when most of the following hold:
--diff, --check, plus the other preview modes) wired into CI, with output a reviewer can actually read..example/ slice and its example CI job show this is supported and maintained).Look elsewhere when:
systemctl daemon-reload is cheaper to own than a new dependency, however well tested.For executives (one paragraph): We generate the deployment configuration that tells the operating system, the scheduler, the process supervisor, and Kubernetes how to run our services. Today that is largely hand-maintained, which means drift between environments and no reliable way to prove what changed. This package makes those files generated artifacts: one configuration in, deterministic files out, with a diff and a check mode we can run in CI so a bad change is caught before it ships. The v4.8.0 release is a hardening release — it closes a class of bug where a newline or a $ or a % inside a configuration value could silently change the meaning of the generated file, including injecting an extra privileged command into a systemd unit. The upgrade is low effort and the only operational cost is a single regeneration pass; the return is a deployment path we can audit, review, and gate.
For engineering leads: escaping is now correct per target rather than approximately correct — systemd gets $$ and a lone \;, cron gets \% with POSIX single-quoted log paths (fixing locale-dependent mangling of non-ASCII paths such as /srv/données), Supervisor gets %% and one-pass placeholder substitution so a literal %user% in a command is no longer rewritten. --check is safe to gate merges on: line-ending-only differences are explained, undeclared files diff against /dev/null, and save() refuses to delete through a symlink. The failure modes are explicit (InvalidConfigurationException at generation time) instead of producing a file that looks valid and isn't.
For the platform/ops team: adopt the .example/ slice as our starting layout — it is a working, CI-gated reference covering custom commands, the instance and memory/time-limit traits, environment-selected templates, and all three preview modes, installed from a path repository. Copy its validation habits: run generated units through systemd-analyze verify before merge, and assert crontab and Supervisor output as the deployment pipeline would read them. The directory is export-ignored, so it will never appear in our vendor/ tree.
Ask: approve the upgrade with a scheduled one-time regeneration of all managed artifacts, and approve a two-week spike that forks .example/ into our ops repo skeleton with --check wired into CI.
How can I help you explore Laravel packages today?