Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Deploy Bundle Laravel Package

hpatoio/deploy-bundle

hpatoio/deploy-bundle is a Symfony bundle that simplifies deploying PHP applications with configurable deployment tasks, release management, and repeatable, automation-friendly production releases.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Headline finding: this is still not a Laravel package, and 1.5.3 does not change that. hpatoio/deploy-bundle remains a Symfony 2 bundle, ported from the Symfony 1.4 project:deploy task. It ships a Bundle class, a DependencyInjection extension, and a Console command registered through Symfony's bundle/DI machinery. None of that maps onto Laravel's service provider + Artisan architecture. Evaluating it "for Laravel" therefore still means evaluating a fork-and-reimplement effort, not a composer require.

Re-review at 1.5.3. The release is a single line: "Fixed variable interpolation." This is a patch-level change to the config-templating path — the same code path previously flagged as the command-injection vector. It is a factual update to the prior "last release 2016-02-18, ~9 years stale" finding (the package is not entirely dormant), but it is not a feature, not a breaking change, not a deprecation, and not accompanied by an advisory. It does not alter the architecture, the integration verdict, or the operational risk posture. It does require one specific question to be re-asked (see below).

  • Architecture fit — poor as-is, tolerable as a pattern source. The bundle's actual value is thin: it reads a YAML deploy descriptor (hosts, user, remote path, rsync flags, post-deploy shell steps) and shells out to rsync over SSH. That model is framework-agnostic and trivially re-expressible as an Artisan command. The Symfony coupling is incidental scaffolding, which is both good (small surface to lift) and bad (almost nothing left to reuse). 1.5.3 touches only the interpolation helper and does not reduce the Symfony coupling.
  • Integration feasibility — low for direct install, medium for extraction. Installing it in a Laravel app still pulls a 2016-era symfony/framework-bundle and symfony/console constraint set that will conflict with any modern Laravel's Symfony component range. Expect a dependency-resolution wall, not a runtime bug. A patch release at this version number is not evidence that the Composer constraints were modernized — verify composer.json before assuming otherwise. Realistic paths remain (a) fork and delete the Symfony glue, keeping the rsync/SSH invocation and config schema, or (b) skip it entirely and adopt Deployer / Forge / Envoyer, which already implement this and more.
  • Technical risk — high, marginally clarified. A maintenance pulse after a multi-year gap is a signal of "one person, occasionally," not of a support commitment: still 33 stars, still 0 dependents, still no CVE surface monitoring, still no downstream community to absorb a regression. The changelog claims interpolation was fixed but does not state whether it now escapes shell arguments or merely resolves ${var} placeholders correctly — those are different defects with very different severity. Any fork inherits command-injection exposure unless argument escaping is explicitly rewritten and tested. Unpinned transitive dependencies from the PHP 5.x/7.0 era remain a supply-chain liability in a production deploy path, and 1.5.3 ships new code into that path with no test or CI evidence visible in the release notes.
  • Key questions for the fork owner:
    • What exactly did 1.5.3 change — placeholder resolution, or shell/argument escaping? Diff the interpolation helper before adopting. If it only fixed variable lookup, the injection exposure is unchanged.
    • Does it do in-place rsync or symlink-based atomic releases? (In-place means no rollback and partial-deploy windows.)
    • Is --delete exposed, and is it guarded?
    • How are SSH credentials and per-environment secrets supplied — config file, agent, or plaintext?
    • Are post-deploy steps (migrations, artisan optimize, queue restarts) first-class and failure-aware, or fire-and-forget?
    • Multi-host: sequential or parallel? Any health check or smoke test before declaring success?
    • Why not Deployer (deployer/deployer + lorisleiva/laravel-deployer), which solves the same problem with active maintenance, tests, and a release cadence?

Integration Approach

  • Stack fit. Poor at the package level, acceptable at the mechanism level. A Laravel equivalent needs: one Artisan command, one config file (config/deploy.php or a deploy.yml parsed with symfony/yaml — already a Laravel transitive dep), one Process-based rsync/ssh wrapper. That is a day of work for the rsync core; the bundle supplies the config taxonomy, not the implementation. 1.5.3 adds nothing to reuse.
  • Migration path. Recommended sequence unchanged: prototype the fork in a throwaway branch → validate against one non-production host → in parallel, prototype the same flow with Deployer → pick based on release/rollback semantics rather than sunk cost. If the decision is to keep the fork, vendor it under an internal namespace (app/Deploy or a private Composer package) so it is never resolved from Packagist and can be patched without upstream coordination — this now matters more, not less, because the package has demonstrated it can change the interpolation path between releases without notice.
  • Compatibility. Assume breakage on PHP 8.1+ (implicit-nullable and dynamic-property changes), Symfony Console 6/7 (command configure/execute API, InputInterface typing), and Laravel 10/11's Symfony component floor. The bundle's own composer.json constraints from the 2016 era will not resolve until proven otherwise; do not read a 1.5.3 version bump as a modernized dependency floor. The fork must be re-constrained and re-tested, which effectively means re-owning the code.
  • Sequencing. (1) Confirm the deploy target shape — single VM, fleet, containers, or PaaS. If containers or a PaaS, this package is architecturally irrelevant and the evaluation ends. (2) If bare VMs with SSH, read the 1.5.3 diff to determine whether the interpolation change is a security-relevant fix or cosmetic. (3) Benchmark the rsync approach against the current process for release time and rollback. (4) Only then scope the fork. Do not let the fork become the deploy strategy by default.
  • Build-vs-buy recommendation — unchanged: buy. Deployer covers rsync/SSH, atomic symlinked releases, rollback, multi-host parallelism, and Laravel-specific recipes. The only scenario favoring the fork is an air-gapped environment where adding a maintained dependency is disallowed — and even then, lifting ~200 lines of rsync logic is cheaper than adopting a dead Symfony bundle.

Operational Impact

  • Maintenance — you still own it permanently. One patch release is not a maintenance commitment; it is a data point consistent with a single occasional maintainer. Zero dependents still means zero community, zero issue triage at scale, and no security response process. Every future PHP/Symfony bump is your patch. Budget it as internal code, not as a dependency; do not list it in a dependency inventory as though it were maintained. The mild upside: a fork owner can now plausibly get a one-line fix upstream, but should not plan a release cadence around it.
  • Support and knowledge transfer. Documentation is a Symfony 1.4-era README describing a command that does not exist in the Laravel mental model; 1.5.3 shipped without expanding it. Onboarding cost is real: engineers must learn a deploy config format used nowhere else in the organization. Contrast with Deployer, where recipes are widely documented and transferable between hires.
  • Scaling. rsync is efficient on changed bytes but performs a full tree walk per host and the bundle has no evidence of parallel fan-out — with a fleet, release time scales linearly and serialized. No blue/green, no canary, no traffic draining. For a handful of VMs this is fine; past ~5–10 hosts, release windows and blast radius become the binding constraint.
  • Failure modes — still the dominant concern.
    • Non-atomic deploys: in-place rsync leaves the remote in a mixed state if the transfer aborts; there is no symlink swap and no rollback.
    • Interpolation ambiguity (updated): 1.5.3 changed the variable-interpolation path. Until the diff is reviewed, treat post-upgrade behavior of placeholders in host/path/flag values as unverified, and treat shell-escaping as unfixed unless proven otherwise. Re-test any config containing user-supplied or branch-derived values.
    • Silent partial success: post-deploy hooks (migrations, cache clears, queue restarts) failing after a successful transfer are the classic footgun; verify exit-code propagation in the fork.
    • Destination ambiguity: unguarded --delete plus a config typo is a data-loss vector.
    • Credential sprawl: SSH keys distributed via config files rather than an agent or secret store; rotation has no story.
    • No audit trail: no deploy log, no who/what/when record, which fails most change-management controls.
    • Unannounced change risk: a patch release in the deploy path with a one-line changelog and no linked tests means production deploys can change behavior on composer update. Pin the exact version if adopted.
  • Ramp-up. Low for anyone fluent in rsync and SSH — that is the trap. The tool is easy enough to adopt informally, which is how unowned deploy scripts proliferate. If adopted, gate it behind a documented runbook and a mandatory dry-run flag before promotion to production, and pin to 1.5.3 exactly rather than floating the 1.5 line.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core