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 Migration Actions Laravel Package

dragon-code/laravel-migration-actions

Laravel Migration Actions lets you attach custom action classes to migrations and run them automatically around schema changes, so data setup, cleanup, and other migration-related tasks stay organized alongside the migrations that need them.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Where deployment-time work lives. This package forces an explicit decision on a recurring architectural question: should post-deploy tasks (cache warmup, reference-data seeding, search reindexing, queue restarts, storage symlinks, third-party webhook/config sync) sit inside migration files, in ad-hoc shell scripts, or in a declared operations list? Adopting it is a vote for the third option — versioned, reviewable, ordered actions rather than tribal knowledge in a CI YAML file.
  • Build vs. buy for deploy glue. Most Laravel teams eventually hand-roll a deploy.sh or a chain of artisan calls. This is a free, MIT-licensed, narrowly scoped alternative with an active release cadence. The decision is less "is this strategic" and more "do we want to own this script forever."
  • Keeping migrations clean. It supports a roadmap commitment to migrations that only change schema, with data and side-effect operations separated. That matters if you're planning zero-downtime deploys, blue/green cutovers, or multi-tenant rollout patterns where long-running actions inside a migration block the deploy.
  • Feature and platform roadmap inputs. If the product roadmap includes things like per-tenant provisioning steps, launch-day data backfills, or environment-specific configuration sync, this gives those features a deployment hook without new infrastructure.
  • Use cases to evaluate against your backlog: post-migration cache and route clears, idempotent data backfills, seeding reference/lookup tables, regenerating sitemaps or search indexes, restarting queue workers, syncing feature flags or pricing config to downstream services, and calling internal admin APIs after schema changes.
  • Deploy-time work that is longer than a few seconds. As of 7.3.0 the package exposes queued operation jobs with a configurable uniqueness lock duration and a configurable job class. That changes a previously binary decision ("keep post-deploy steps synchronous, or move them out of band") into a third option: declare the operation in the same reviewed list, dispatch it to the queue, and tune the lock window so overlapping deploys don't double-run it. This is the release's most product-relevant change — it widens the addressable set of backfill and reindex tasks from "not a fit" to "fits, with caveats."
  • Extensibility as a hedge. The queue.job override means the dispatch target is now a seam, not a hardcoded class. You can point it at your own job to add retries, tracing, or alerting without forking the package — which materially improves the "replaceable in a day" exit story.
  • Vendor and dependency posture. Still roughly 240 stars and zero dependents in the ecosystem: a "small surface, small risk, small signal" dependency. Treat it as a convenience layer you could replace in a day, not as platform infrastructure you build a strategy on. The new configurability is welcome, but it makes the package slightly more of a thing you configure and tune — budget for that in onboarding.

When to Consider This Package

Adopt when most of these are true:

  • You run a Laravel application and deploy through artisan migrate in CI/CD, and you have a handful of steps that must run after migrations succeed.
  • You want those steps declared in the repository, reviewed in pull requests, and executed in a defined order — not buried in a CI config or a wiki page.
  • You don't have a dedicated platform/DevOps function; the team is small and prefers configuration over custom scripting.
  • Your post-deploy actions are idempotent, and either short enough to run synchronously in the deploy or suitable for a queued operation job with a uniqueness lock (as of 7.3.0). If queued, confirm your workers are healthy at deploy time and that a lock duration appropriate to your job runtime is set.
  • You're comfortable pinning a version and, if necessary, forking — the license permits it and the codebase is small. The job-class override reduces the need to fork for small behavioural tweaks.

Look elsewhere when:

  • You already use Laravel Forge/Envoyer, Laravel Cloud, Deployer, or Kubernetes jobs that provide deploy hooks, ordering, and rollback. The overlap likely makes this redundant.
  • You need real orchestration: approvals, multi-service coordination, retries with backoff policies, rollback of failed actions, or per-step observability. Queued jobs with a uniqueness lock are not an orchestrator — they prevent duplicate execution, not failed execution.
  • Your actions are long-running and correctness-critical (large backfills, reindexing millions of rows, multi-tenant data migration). The queue path helps, but you still want a one-off task runner or a dedicated backfill tool with checkpointing and progress reporting. Verify how the uniqueness lock behaves if a worker dies mid-job before relying on it.
  • You rely on the --isolated flag and need to be certain of its semantics. 7.3.0 aligns behaviour with Laravel core; if you had pinned a previous version and built around its behaviour, re-test before upgrading.
  • You're polyglot or non-Laravel; the value is entirely in the Laravel migration integration.
  • Your organization has a dependency-approval bar that a sub-300-star package with no dependents won't clear. Budget a spike and a fork-and-own contingency before committing.
  • You need guarantees around concurrent deploys, partial failure recovery, or auditing. The uniqueness lock narrows the concurrent-deploy exposure but does not provide auditing; verify expectations against the package rather than assuming them.

How to Pitch It (Stakeholders)

For executives: This is a small, free, MIT-licensed package that lets us declare our post-deployment steps in code instead of maintaining custom deploy scripts. The latest release adds two practical controls — we can now run heavier post-deploy steps as queued jobs with a tunable lock so overlapping deploys don't duplicate work, and we can plug in our own job class to add monitoring or retries without forking. It remains a low-cost, low-risk adoption — an afternoon or two of integration work, no new infrastructure, no license spend — and it makes releases more predictable and auditable. The main caveat is maturity: it's a niche project with modest adoption, so treat it as replaceable glue rather than a strategic platform bet, and don't mistake the new queue support for real deploy orchestration.

For engineering: It cleanly separates schema migrations from the actions that must follow them — cache clears, reference-data seeding, queue restarts, index rebuilds — and keeps those actions versioned and code-reviewed. 7.3.0 is worth reading closely: queued operation jobs now support a configurable uniqueness lock duration (#259) and an overridable job class (#260), which means longer backfills can move into the declared operations list instead of a separate ad-hoc runner, and observability/retry behaviour can be layered in via the queue.job override rather than a fork. The --isolated fix (#258) brings its presence semantics in line with Laravel core — if we'd pinned an older version, re-verify any logic that depends on that flag. Before adopting, confirm it doesn't duplicate hooks we already get from Forge/Envoyer/Deployer, keep actions idempotent, set the lock duration to something longer than expected job runtime, and assume we may still fork it if the project stalls — though the override seam reduces how often we'd need to.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager