wickedone/muppet-bundle
Symfony bundle that integrates the Muppet library, registering its services and configuration with Symfony's dependency injection container. Install via Composer, enable it in bundles.php, and configure it to start using Muppet in your application.
wickedOne/muppet-bundle is not a Laravel package — it is a Symfony bundle that wires the wickedOne/muppet configuration-management engine (a PHP take on Puppet: manifests, nodes, roles, tasks applied over a transport) into a Symfony container. The 2.0.0 release notes are almost entirely Dependabot bumps plus CI/tooling PRs ("setup tools", badge), so treat 2.0.0 as a maintenance major, not a feature release with a documented upgrade path.
First steps:
composer require wickedone/muppet-bundle (or, if Composer fights you, composer require wickedone/muppet and skip the bundle — see Gotchas).vendor/wickedone/muppet-bundle/ before anything else:
composer.json — PHP floor and the Symfony component constraints, which is where 2.0.0 actually changed.*Bundle class and src/Resources/config/* — this is the service wiring you will have to reproduce by hand in Laravel.Wrap the bundle, don't expect discovery. Laravel has no bundle auto-registration. Create a MuppetServiceProvider that registers the services the bundle's services.xml/services.yaml declares, and publishes a config/muppet.php mirroring the bundle's configuration tree (node/role/manifest paths, environment, transport options).
Artisan command as the front door. Wrap the underlying command in an artisan muppet:apply command so it participates in your normal scheduling, output buffering, and --env conventions. Keep the wrapper thin — argument parsing only, no logic.
Manifests in version control, one per role. Structure as muppet/manifests/{role}.php and muppet/nodes/{env}/{node}.php, loaded from config paths rather than hardcoded. Secrets never live in manifests — read them from env()/a secrets store and inject at apply time.
Dry-run in PRs, apply on merge. This is the single highest-value workflow: run the plan/no-op mode in CI on pull requests and diff the output; only apply on merge to the main branch. Combined with idempotent manifests this gives you a poor-man's Terraform plan.
Test the manifest layer, not the transport. Fake the transport/SSH boundary and assert on the resource graph your manifest produces. Real executions belong in a staging job, not PHPUnit.
Tag custom resources. If you need your own task/resource types, register them through the container rather than instantiating inline — otherwise you inherit a hard-to-test global.
composer.json before upgrading. Pin the version and upgrade deliberately.wickedone/muppet directly and hand-wire it. That is likely the correct long-term choice for a Laravel app anyway.%parameter% placeholders, tagged services, and compiler passes do not exist in Laravel's container. Anything resolved through those mechanisms must be rewritten as explicit bindings.How can I help you explore Laravel packages today?