gally/gally-sample-data
gally/gally-sample-data provides ready-made sample datasets for Gally applications, making it easy to seed demo catalogs, products, and related records. Ideal for local development, testing, and showcasing features without hand-building fixtures.
This is not a Laravel package. There is no service provider, no config/ to publish, and no migrations. gally/gally-sample-data is a Composer-installable bundle of fixture/demo data (catalog, products, attributes, merchandising rules) for the Gally searchandising engine — a PHP/Symfony + Elasticsearch-style stack. Treat it as a data artifact plus CLI tooling, not a framework dependency.
Minimal path:
composer.json (look at require for the Gally core version and the Symfony 7.4 floor introduced in v2.3.1), the README, and any bin/ or Command/ directory. You are looking for the console command(s) that load fixtures — that command name is the whole integration surface.composer require --dev gally/gally-sample-data
curl -s "localhost:9200/_cat/indices?v"
Where to look first, in order: README → composer.json version constraints → the console command source → the fixture file layout. The layout tells you what "a product" looks like in Gally's model, which is what your Laravel models/DTOs must mirror.
Bootstrap script, not a migration. Because there are no Artisan hooks, the idiomatic pattern is a shell entrypoint or Composer script:
"scripts": {
"sample-data": "bin/console gally:sample-data:load"
}
Keep it idempotent-safe by wrapping it: reset indexes → load → smoke-test one known SKU.
Wrap the invocation in an Artisan command. If your Laravel app orchestrates the local stack, a thin command keeps the workflow discoverable:
$result = Process::timeout(300)->run('docker compose exec -T gally bin/console gally:sample-data:load');
Fail loudly on non-zero exit; fixture loaders frequently return 0 while logging per-document errors, so grep stdout for error counts too.
Feature tests against known data. The highest-value pattern: sample data gives you stable, named products. Assert against specific identifiers rather than "some results":
$response = Http::baseUrl(config('gally.url'))
->get('/api/products', ['q' => 'shirt', 'category' => 'men']);
Pin the package version so those assertions don't silently rot when upstream edits fixtures.
CI as ephemeral seed. Spin up the search engine container, run the loader, execute integration tests, tear down. Never cache a seeded index between CI runs — mapping drift between the image and the fixture set is the number one flake source.
Environment scoping. Dev and staging only. Guard the loader behind app()->environment(['local','staging']) if you wrap it, and make the base URL an env var so a misconfigured .env can't point seeding at production.
Subsetting for speed. Full catalogs slow test suites. Either maintain a small override fixture directory (check whether the command accepts a path/--limit flag) or load once into a long-lived local index and use transactions-free read-only tests against it.
composer update will either hold you back at 2.3.0 or fail resolution. Bump the Gally host image first, then the fixtures."gally/gally-sample-data": "2.3.1"), commit the lockfile, and budget for reading diffs on upgrade. The 2.3.0 → 2.3.1 diff is a one-liner, which is a good reminder to actually read them.config/app.php providers or expect php artisan vendor:publish. If you find yourself writing a service provider for this, you're over-engineering — a Process call or a shell script is correct._cat/indices for doc counts → Gally's own logs (Symfony var/log/) → the loader's stdout. The loader rarely throws; it logs. Read stdout..gitignore and Docker named volumes.How can I help you explore Laravel packages today?