michael-rubel/artisan-release-command
An Artisan command that streamlines releases for Laravel packages and apps: bump the version, commit the change, create a Git tag, and push it to your remote from a single CLI command. Simplifies repetitive release steps and keeps tagging consistent.
Architecture fit. The package is build-and-release tooling, not runtime code. It registers an Artisan command via a service provider and belongs in require-dev, so it has no footprint in the deployed application — no routes, migrations, middleware, or facades. That is the best possible integration shape for a package of this maturity: if it misbehaves, it can be removed with a composer remove and zero production risk. It assumes a Laravel Console–centric workflow, which fits any standard Laravel app or monorepo package.
Integration feasibility. Low effort. Standard Composer install, service provider auto-discovery, and likely one publishable config file. The command wraps git and version-bump steps that most teams already do by hand in a runbook. Realistic effort is under a day to evaluate, one sprint to pilot.
Technical risk. The maturity signals are weak and should be stated plainly: 15 stars, 0 dependents, a single maintainer, last release November 2024, and an aggregate score of 0.075. This is a bus-factor-one package with a high probability of going unmaintained within a year. Mitigating factors are strong, however: MIT license, a deliberately small codebase, and a scope that is fully reproducible with ~100 lines of shell or a custom command. The risk is not dependency-chain risk (no transitive weight) — it is that we inherit an opinionated, irreversible automation (tag creation, push, version bump, possibly changelog generation) whose defaults we did not design and cannot configure. Irreversible git operations executed by third-party code are the actual hazard here, more than abandonment.
Key questions.
composer.json/CHANGELOG.md in the working tree, and is that committed automatically?Stack fit. Fits cleanly if our release process is developer-driven from a local checkout: a Laravel app, Artisan as the operational interface, git tags as the version source of truth. It fits poorly if releases are CI-driven (GitHub Actions/GitLab CI) unless the command runs headless — in that case a scripted pipeline step is a better fit than a console command built around interactive prompts.
Migration path. Do not adopt on the critical release path first. Sequence: install as a dev dependency in a single low-consequence internal service, run the command with any dry-run/verbose mode against a throwaway remote, and diff the resulting git state against what our manual runbook produces. Keep the existing documented runbook as the fallback for at least two release cycles. Because the package is MIT and small, the credible end state is vendoring or forking — copying the command into app/Console/Commands and owning it. For a 15-star tool, "adopt the pattern, not the dependency" is likely the correct TPM recommendation.
Compatibility. Verify the package's composer.json constraints against our PHP and Laravel versions before piloting; a November 2024 release almost certainly covers Laravel 10/11 but is unconfirmed for 12. Also confirm behavior under the git version and CI runner images we standardize on — tag signing and push semantics vary.
Sequencing.
Maintenance. Effectively zero while it works; the risk is the inverse — we may become the maintainer by default. No upgrade treadmill exists (no dependency tree), but also no upstream fixes. Budget a small recurring cost to re-read the command on each Laravel major upgrade, since Console command signatures are stable but service provider registration conventions occasionally shift.
Support. Community-only via GitHub issues from a single maintainer, with no SLA and no release cadence guarantee. This is acceptable only with a named internal owner and a documented fallback procedure. Do not let this become tribal knowledge held by one engineer.
Scaling. The package is not in the request path, so it does not affect application scaling. The scaling concern is organizational: an opinionated release process means every developer must follow the same steps, and divergence produces inconsistent tags and version drift across repositories. If we standardize, this becomes a cheap consistency win across many Laravel services; if we don't, it becomes noise.
Failure modes. The dangerous ones are all partial-release states: tag created but push failed; local tag pushed from the wrong branch or commit; version bumped in composer.json but not committed; tag collision on re-run; dirty working tree silently included. These are recoverable but noisy, and they are precisely the states a manual runbook also produces — the package does not obviously improve on them unless its guards are verified. Mitigations: dry-run first, execute in an ephemeral checkout rather than a developer's dirty tree, run only from a clean tagged branch, and make the release step idempotent or explicitly re-runnable.
Ramp-up. Very low for developers already fluent in Artisan; the command surface is small and discoverable via php artisan list. The real ramp-up cost is agreeing to the package's opinion of what a release is, and documenting where our process intentionally differs so the tool is used the same way by everyone.
How can I help you explore Laravel packages today?