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

Laravel Actions Laravel Package

dragon-code/laravel-actions

dragon-code/laravel-actions is a lightweight Laravel package for encapsulating business logic in reusable action classes. It provides a simple API to define, resolve, and execute actions, helping keep controllers and models thin while making workflows easier to test and maintain.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • This is a Laravel-native package (service provider + publishable config + an artisan entry point). It occupies the deployment orchestration layer: declaring an ordered list of actions (artisan calls, shell commands, closures) that run against an environment during a release.
  • 7.3.0 clarifies the execution model more than the earlier assessment assumed. Operations are not purely inline/sequential: they run as dispatched jobs (queue.job is now overridable), and they support Laravel's --isolated semantics. That means there is a queue-backed path with overlap prevention, not just a for-loop over shell commands. Position it as "structured, queue-aware replacement for the deploy.sh we hand-rolled," not as "our deployment system."
  • Fit remains binary. On a Laravel/PHP monolith or a small fleet of Laravel services it slots in with no architectural change. On any non-Laravel stack, or a stack already standardized on Deployer / Envoyer / Forge / Vapor / Kubernetes jobs, it is a redundant abstraction.
  • It still does not replace a deployment platform: no zero-downtime symlink switching, no release directory management, no built-in rollback. The new queue features add concurrency safety, not release management.
  • New architectural consideration from 7.3.0: if operations are queued, the deploy pipeline now depends on a working queue worker and a queue backend. That is a real (if modest) coupling the earlier assessment did not account for — a stuck worker now stalls a release.

Integration feasibility

  • Low effort: composer require, publish config, declare actions, invoke from CI. A mid-level Laravel engineer can produce a working staging deploy in under a day.
  • Behavior is config-driven rather than code-driven, so the blast radius of a trial is small and reversible.
  • 7.3.0 adds two config surfaces (queue.job, uniqueness lock duration) that directly reduce integration friction: we can substitute our own job class for observability/retry policy and tune the lock window to our release duration instead of accepting a hardcoded default. Both are additive, no migration work.
  • The real integration cost is still the surrounding discipline: idempotent actions, correct ordering, environment-specific config, and a documented rollback procedure the package will not give you.

Technical risk

  • Adoption signal is still weak, but activity is real. 243 stars and 0 dependents means no ecosystem has stress-tested it. However, 7.3.0 ships three merged PRs from an outside contributor (@mark-year13), which is the first concrete evidence of a contributor base beyond the maintainer. Treat bus factor as "one primary maintainer, occasional drive-by contributors" — improved, not resolved.
  • Metadata inconsistency is partly resolved by inference, not by evidence. The feature set in 7.3.0 (queued operation jobs, --isolated semantics, queue.job override) is unambiguously deploy-operations functionality, which corroborates that the repository name is correct and the supplied dragon-code/laravel-actions name is the erroneous field. That is a reasonable inference — it is not a confirmation of the canonical Packagist name, and it does not explain the future-dated release. Keep this as a gating item.
  • 7.3.0 contains a behavioral change disguised as a fix. "Match Laravel core presence semantics for the --isolated option" changes how overlap detection behaves. Additive semver, behaviorally observable. If we had already adopted, this would be a release to read the diff on, not to auto-merge.
  • Aggregate score of 17.17 with opportunity at 21.26 remains consistent with "useful niche utility, thin maintenance and adoption evidence." Do not read it as "broken," read it as "unproven."
  • MIT license still mitigates the bus factor — you can fork and own it — but only if you are prepared to.

Key questions for the maintainer / spike

  1. Which package and which repository are we actually evaluating, and what is the canonical Packagist name? (7.3.0 strengthens the case that it is deploy-operations; confirm it.)
  2. Supported Laravel/PHP version matrix — does it cover our current and next-upgrade targets (Laravel 11/12, PHP 8.3+)?
  3. Updated: With --isolated and the uniqueness lock in place, what exactly is protected — the operation job, or the whole deploy run? Is there a run-level lock preventing two pipelines from starting against the same host?
  4. Updated: Do queued operations require a running worker, and what is the failure behavior if the queue is down or the worker dies mid-run — silent stall, timeout, or explicit failure?
  5. Updated: What are the defaults for uniqueness lock duration, and what happens when an operation legitimately exceeds it (release on lock expiry, or hard failure)?
  6. Is there any rollback or compensation semantics when action N of M fails? If not, what is the documented recovery procedure?
  7. Are actions idempotent by construction, or is that entirely the adopter's responsibility?
  8. How does it behave with config:cache active, and with per-environment config?
  9. Release cadence and issue-response history over the last 12 months. (7.3.0 is a positive data point; we still lack the series.)

Integration Approach

Stack fit

  • Good fit: Laravel monolith or a handful of Laravel services, GitHub Actions / GitLab CI, SSH-or-forge-style single-target deploys, a team currently maintaining bespoke deploy shell scripts, and a healthy queue worker (new requirement implied by 7.3.0).
  • Good fit, newly: teams that need deploy-step observability or custom retry policy — queue.job override lets us inject our own job class without forking.
  • Poor fit: multi-cluster Kubernetes, blue/green with traffic shifting, Vapor/serverless, or any org with a platform team that already owns deploy tooling. Also poor fit if our queue infrastructure is unreliable — the package now leans on it.

Migration path

  • Parallel-run, not cutover. Leave the existing pipeline intact and add the package's entry point as a non-blocking stage that mirrors the current script's actions and logs what it would do.
  • Port one action at a time (cache clear → migrate → queue restart → asset build hook), diffing observed behavior against the incumbent script at each step.
  • New: when porting, decide deliberately whether each operation runs inline or queued. Queueing buys isolation and retry; it also buys a dependency on the worker and a class of "stalled, not failed" incidents. Default to inline for short actions, queued only where isolation is genuinely needed.
  • Pin to 7.3.0 explicitly. Do not float the constraint while we are evaluating a package whose isolation semantics just changed.
  • Keep the incumbent script in the repo until two full release cycles have passed with no divergence. Deletion is the last step, not the first.

Compatibility

  • Verify Composer 2 resolution against our lockfile before committing; a single-maintainer package with a narrow version constraint can block a future Laravel major upgrade.
  • Check for collisions with packages that already hook the deploy lifecycle or register their own artisan deploy command — and now also with anything that overrides the default queue job or relies on Laravel's --isolated presence behavior.
  • Confirm behavior under config:cache and under our environment-variable strategy — deploy configs frequently become an accidental home for secrets. New queue.job and lock-duration keys are additional config surface to review.

Sequencing

  1. Week 1 — resolve identity. Confirm the canonical package, repo, and version. 7.3.0's feature set strongly implies deploy-operations, but get it confirmed in writing. If this cannot be cleanly resolved, stop here.
  2. Week 1–2 — spike. One engineer, one scratch branch, staging target only. Explicitly exercise: two concurrent runs, a mid-run operation failure, and a killed queue worker. Produce a written comparison against the existing script.
  3. Week 2–3 — canary. Adopt on the lowest-risk service with the most forgiving release window. Instrument it.
  4. Week 3–4 — standardize or abandon. If the spike shows no measurable gain over the existing script, abandon deliberately and document why. "We kept the bash" is a valid outcome.
  5. Post-adoption — document. Publish the rollback runbook the package does not provide, plus the queue-down fallback procedure, and record the fork decision (own it vs. depend on it).

Operational Impact

Maintenance

  • Small code footprint, so low ongoing surface area. The real maintenance burden is ownership: a single-primary-maintainer package on the critical deploy path means we either accept dependency on one person's availability or budget for a fork we maintain ourselves. 7.3.0's outside contributions modestly reduce — but do not eliminate — this.
  • MIT license makes the fork option viable; it does not make it free. Estimate ~2–4 engineer-days/year to track upstream and patch, plus the cost of divergence.

Support

  • Community-only: GitHub issues, no SLA, no vendor escalation. Acceptable for a convenience wrapper; not acceptable for anything on the release critical path without an internal fallback.
  • Practical mitigation: keep the incumbent deploy script executable and documented as the emergency path for at least two quarters.

Scaling

  • Designed for per-target action execution. It is not a fleet orchestrator. Comfortable at 1–10 targets; at dozens of hosts the absence of coordinated cross-host rollback remains the dominant risk.
  • Revised: concurrency handling within a target is now materially better than the prior assessment assumed — --isolated plus configurable uniqueness locks addresses the "two jobs interleave on one host" case. That is an improvement in depth, not in breadth; it does not make the package a multi-host coordinator.
  • Deploy duration still scales linearly with action count. Long-running actions (migrations, asset compilation, cache warm) push against pipeline timeouts and extend the partially-deployed window — and now also interact with the lock duration, which must be set above the realistic worst-case action time or the lock will expire mid-run.

Failure modes

  • Partial deploy, no compensation. Action 4 of 7 fails; actions 1–3 have already mutated the environment and there is no automatic unwind. Still the headline operational risk; still answered only by a manual runbook.
  • Concurrent deploys — reduced, not eliminated. Job-level isolation and uniqueness locks landed in 7.3.0. Whether a run-level lock exists across the full action list is unconfirmed. Residual risk: two pipelines each isolate their own operations correctly while still interleaving at the run level.
  • Lock expiry mid-operation (new). A misconfigured lock duration shorter than a long migration allows a second operation to start while the first is still running — a failure that isolation appears to prevent but does not.
  • Queue dependency (new). Queued operations require a live worker. A dead or backlogged worker produces a stalled release that looks like a slow one. Needs its own alert.
  • Config drift. A cached or environment-mismatched config silently runs the wrong action list — a failure that looks like success. Now also applies to the new queue.job and lock keys.
  • Silent no-op. Actions that succeed while doing nothing (skipped migrations, no-op cache clears) erode trust in the deploy log faster than visible failures.
  • Upgrade lock. A narrow Laravel constraint blocks a framework upgrade at the worst possible time.
  • Secrets exposure. Deploy config is a common dumping ground for credentials; review it as you would application code.

Ramp-up

  • Low. A Laravel developer reads the config and is productive within an afternoon; the mental model (ordered list of actions) is immediately legible.
  • New: the queue-backed execution path adds a second thing to learn — which operations are queued, what the isolation key is, and how lock duration relates to action runtime. Budget an extra half-day for whoever owns the pipeline.
  • The non-obvious ramp-up remains organizational: teaching the team that this package sequences operations and does not manage releases. Teams that assume it is a deploy platform will discover the gap during an incident, which is the worst time.
  • Recommend a single named owner for the deploy pipeline, and one 30-minute walkthrough recorded for on-call.

TPM recommendation posture: treat as a candidate convenience layer, not a platform decision. 7.3.0 is a genuine positive signal — active maintenance, outside contributors, and the concurrency gap from the prior assessment partially closed. It does not change the gating item (package identity and the future-dated release are still unresolved) and it does not change the deciding item (whether the spike beats the existing script by enough to justify a single-primary-maintainer dependency on the release path). Default to no unless the spike is clearly positive.

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.
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk