wyrihaximus/makefiles
Reusable Makefile building blocks for PHP projects from WyriHaximus. Install with Composer and compose shared CI, testing, and code-quality targets into your own Makefile, keeping build automation consistent and maintainable across repositories.
What this package actually is. wyrihaximus/makefiles is not a Laravel runtime dependency. It is a Composer-installed dev-tooling package that generates Makefile targets and QA config scaffolding for PHP projects, then orchestrates those targets through Docker. The release history confirms the shape of the integration: generation happens at composer install/composer update ("Switch to pre-generated decisions on composer install or update," 0.10.0), PHP version and image selection are resolved at generation time, and migrations rewrite files such as phpunit.xml, infection.json5, PHPStan config, README copyright headers, and LICENSE (0.11.x notes). A TPM should classify this as repository scaffolding and CI standardization tooling, not as an application library.
Architecture fit. The fit is narrow but real: teams that want a single make all entry point covering Composer validation, code style (PHPCS/Rector), static analysis (PHPStan/Psalm), unit tests (PHPUnit), and mutation testing (Infection), all executed in Docker for local/CI parity. The supported-features block (0.11.0) is the most architecturally significant addition because it lets a project opt out of code style, static analysis, unit tests, dependency checkers, Windows, or ZTS via composer.json extra. That is a genuine per-project configurability seam rather than a hardcoded pipeline.
The overlap problem with Laravel. Laravel projects already have an opinionated dev workflow: Sail or a bespoke Docker Compose stack, Composer scripts, Pint, Pest/PHPUnit, and Larastan. This package asserts its own Docker image decisions, its own config paths, and its own Make targets. It will not peacefully coexist with Sail in the same repository without an explicit decision about which layer owns container orchestration. Integration feasibility is therefore high in raw technical terms (no runtime coupling, no service provider, no middleware) but medium-to-low in political terms because it competes with existing toolchain ownership.
Technical risk. The dominant risks are adoption and governance, not code:
0.10 and 0.11 introduced behavioral changes (image decisions moved to generation time; supported features added) that altered generated output. Minor-version upgrades are not guaranteed to be inert.@psalm-suppress, @phpstan-ignore-next-line, and @internal. That is opinionated source rewriting. It must be reviewed as a code change, never run unreviewed in CI or on developer machines.-root image variants when test containers are detected. That is a meaningful CI security consideration that needs explicit sign-off.Key questions for the maintainer or pilot owner.
Makefile and existing phpunit.xml/PHPStan configs?Stack fit. Best fit is a centralized platform/QA function that owns developer experience across multiple PHP repositories: internal packages, libraries, and service applications that do not already have a mature bespoke pipeline. Poor fit for a single Laravel monolith with an established Sail-based workflow, or for teams with regulated CI images where Docker socket mounting is prohibited.
Migration path. Treat this as an additive pilot, not a replacement:
composer require --dev wyrihaximus/makefiles) on a branch.git diff before committing anything. The diff is the integration contract.Makefile and etc/qa/* configs so the repository is self-describing and CI does not regenerate.make all (or the subset enabled via supported-features) into a single CI job and compare results against the existing pipeline in parallel for one sprint.Compatibility considerations.
make, a Docker daemon, and Composer 2.x. Windows developers need WSL or Git Bash; the package has an explicit windows supported-feature flag, which is a signal that native Windows is a known rough edge.composer.json. On a 0.x line, caret constraints behave conservatively, but pinning to an exact minor (0.11.x) prevents surprise regeneration on composer update.Sequencing and gates. Run this as a four-to-six week evaluation with explicit gates: (a) diff review passes and no unexpected source mutations, (b) CI parity confirmed against the existing pipeline, (c) security sign-off on Docker socket usage, (d) an owner is named for upgrades. If any gate fails, the fallback is to cherry-pick the useful Makefile patterns into an internal template rather than depend on the package.
Maintenance. Upstream release cadence is high relative to adoption — multiple patch releases per month driven by Renovate and Dependabot, including dependency bumps to PHPUnit, Symfony Process, and Composer itself. That is good hygiene but a real upgrade tax for consumers, because each regeneration can alter committed artifacts. Recommend a quarterly upgrade cadence with a dedicated PR, not continuous auto-merge. Budget roughly one to two engineer-days per quarter per adopting organization.
Support. Documentation is effectively the README plus release notes: install command, license, and changelog. There is no usage guide, no configuration reference beyond the supported-features example, and no support contract. Knowledge will live in the generated artifacts and in whoever ran the pilot. Plan for internal documentation as a deliverable, not an afterthought.
Scaling. Scales well if the organization standardizes on one generated baseline across repositories — the value is consistency of make targets and QA gates. It scales badly if teams hand-edit generated Makefiles, which produces snowflake pipelines and makes upstream upgrades unmergeable. Enforce "regenerate, don't edit" as policy.
Failure modes to design around.
make absent on a developer machine or CI image → immediate onboarding failure.composer update silently rewrites QA configs → unreviewed pipeline changes.etc/qa/ or uses a nonstandard PHPUnit layout.@internal, @psalm-suppress, @phpstan-ignore) removes intentional suppressions → static analysis noise or lost documentation.ulimit and OTEL/ZTS environment handling (0.10.4–0.10.6) indicate container-runtime sensitivity; heterogeneous Docker versions across the fleet are a latent source of flaky runs.Ramp-up. For a Docker- and Make-literate PHP engineer: roughly half a day to first successful make all. For Windows-based developers or teams unfamiliar with Make: one to two days including WSL setup and troubleshooting image selection. For CI owners: an additional half day for socket permissions, caching, and image pull strategy.
TPM verdict. The composite score (34.5) and zero adoption are accurate signals that this is unproven externally; the opportunity score (64.94) reflects a genuinely useful, purpose-built capability. Recommend conditional pilot only, scoped to internal PHP packages or a secondary Laravel service, with committed generated artifacts, an explicit security review of Docker socket usage, a named internal owner, and a documented fallback to an internal template if upstream maintenance lapses. Do not introduce it into the primary Laravel application's toolchain without first resolving the Sail/toolchain-ownership question.
How can I help you explore Laravel packages today?