* Add recipe for fyrst/shopware-cd
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* fix: use .yaml and 4-space indent for fyrst/shopware-cd recipe
recipes-contrib QA rejects *.yml and YAML lines whose leading indent is
not a multiple of 4. GitLab still defaults to .gitlab-ci.yml, so
post-install.txt documents the CI/CD configuration file setting.
shopware-cli already loads .shopware-project.yaml.
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* fix: point fyrst/shopware-cd recipe at fyrst-dev/shopware-cd
Sync the Flex recipe from fyrst-dev/recipes (source of truth). The
Packagist package repo is now https://github.com/fyrst-dev/shopware-cd
instead of shopware-cd-template.
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* fix: require shopware/docker docker/Dockerfile in fyrst/shopware-cd
Drop the root Dockerfile fallback so the recipe matches fyrst-dev/recipes.
GitHub Actions, GitLab CI, and Compose now default DOCKERFILE to
docker/Dockerfile from the shopware/docker Flex recipe.
https://github.com/symfony/recipes-contrib/pull/2049
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* fix: drop project-create overlaps; put CD compose in deploy/
shopware-cli project create owns shop-root compose.yaml, .gitignore,
and .shopware-project.yaml. Move the CD stack to deploy/compose.yaml
and deploy/compose.prod.yaml, and point vps-release.sh at
-f deploy/compose.yaml -f deploy/compose.prod.yaml -f deploy/compose.vps.yaml.
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* feat: add VPS runtime sync (no S3) to fyrst/shopware-cd
Copy live MySQL + Docker volumes onto lower envs over SSH
(mysqldump + volume tars). Snapshot/restore stay on the VPS.
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* feat: bind-mount Shopware VPS runtime data by default
Use SHOPWARE_DATA_ROOT host dirs for files/media/thumbnail/theme/sitemap
instead of named volumes. Keep mysql_data/redis_data as named volumes.
sync-runtime.sh rsyncs those host dirs as the primary copy path.
Expand compose.yaml without YAML aliases (4-space .yaml). Feeds #2049.
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* feat: add local project-dev runtime rsync helper
Copy live VPS SHOPWARE_DATA_ROOT trees into shopware-cli project dev
paths via deploy/sync-runtime-local.sh (rsync, optional --delete).
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* feat: derive Compose project and data root from shop id + env
SHOPWARE_SHOP_ID + SHOPWARE_DEPLOY_ENV drive COMPOSE_PROJECT_NAME and
SHOPWARE_DATA_ROOT=/var/lib/shopware/data/<shop>/<env>. Compose no longer
hardcodes name: shopware. Sync scripts auto-derive when those vars are unset.
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* feat: interpolate Compose name and bind mounts from shop id + env
Compose uses ${SHOPWARE_SHOP_ID}-${SHOPWARE_DEPLOY_ENV} for the project
name (required via :?) and bind-mounts
${SHOPWARE_DATA_BASE:-/var/lib/shopware/data}/${SHOPWARE_SHOP_ID}/${SHOPWARE_DEPLOY_ENV}/...
COMPOSE_PROJECT_NAME and SHOPWARE_DATA_ROOT are no longer required for
compose. Keep expanded YAML (no aliases) and 4-space indent for contrib QA.
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* docs: mark SHOPWARE_PACKAGES_TOKEN as optional
* docs: mark SHOPWARE_PACKAGES_TOKEN optional in env and deploy README
* docs: mark SHOPWARE_PACKAGES_TOKEN optional in GitLab CI comments
* docs: mark SHOPWARE_PACKAGES_TOKEN optional in GitHub Actions comments
* fix: E2E compose run, pull_policy override, and create .env footguns
Mirror fyrst-dev/recipes overlay notes from Shopware 6.7 E2E:
create writes .shopware-project.yml and COMPOSE_PROJECT_NAME=sw-shop-…;
Compose v5 rejects run --no-build; same-host tag-and-load uses
PULL_POLICY=never / SKIP_PULL=1 (default pull_policy stays always).
Do not require SHOPWARE_PACKAGES_TOKEN. Recipe does not delete create's .env.
* fix: E2E compose run, pull_policy override, and create .env footguns
Mirror fyrst-dev/recipes overlay notes from Shopware 6.7 E2E:
create writes .shopware-project.yml and COMPOSE_PROJECT_NAME=sw-shop-…;
Compose v5 rejects run --no-build; same-host tag-and-load uses
PULL_POLICY=never / SKIP_PULL=1 (default pull_policy stays always).
Do not require SHOPWARE_PACKAGES_TOKEN. Recipe does not delete create's .env.
* fix: E2E compose run, pull_policy override, and create .env footguns
Mirror fyrst-dev/recipes overlay notes from Shopware 6.7 E2E:
create writes .shopware-project.yml and COMPOSE_PROJECT_NAME=sw-shop-…;
Compose v5 rejects run --no-build; same-host tag-and-load uses
PULL_POLICY=never / SKIP_PULL=1 (default pull_policy stays always).
Do not require SHOPWARE_PACKAGES_TOKEN. Recipe does not delete create's .env.
* fix: E2E compose run, pull_policy override, and create .env footguns
Mirror fyrst-dev/recipes overlay notes from Shopware 6.7 E2E:
create writes .shopware-project.yml and COMPOSE_PROJECT_NAME=sw-shop-…;
Compose v5 rejects run --no-build; same-host tag-and-load uses
PULL_POLICY=never / SKIP_PULL=1 (default pull_policy stays always).
Do not require SHOPWARE_PACKAGES_TOKEN. Recipe does not delete create's .env.
* fix: E2E compose run, pull_policy override, and create .env footguns
Mirror fyrst-dev/recipes overlay notes from Shopware 6.7 E2E:
create writes .shopware-project.yml and COMPOSE_PROJECT_NAME=sw-shop-…;
Compose v5 rejects run --no-build; same-host tag-and-load uses
PULL_POLICY=never / SKIP_PULL=1 (default pull_policy stays always).
Do not require SHOPWARE_PACKAGES_TOKEN. Recipe does not delete create's .env.
* feat: Flex env SoT keys and deploy/init-env.sh after create
Mirror fyrst-dev/recipes: Flex env appends safe CD keys; operators finish
shop-specific values with deploy/init-env.sh --shop-id (VPS: --vps).
* feat: register FyrstShopwareCdBundle in Flex recipe
* feat: add slim bash guards for fyrst:sales-channel:rewrite-urls
* docs: document console rewrite and Flex bundle for shops
* docs: point contrib sync rewrite at fyrst:sales-channel:rewrite-urls
* docs: mention console rewrite in contrib deploy README
* feat(shopware-cd): call fyrst:sales-channel:rewrite-urls after restore
* feat: dump VPS snapshots with shopware-cli project dump
* feat: dump VPS snapshots with shopware-cli project dump
* feat: dump VPS snapshots with shopware-cli project dump
* feat: dump VPS snapshots with shopware-cli project dump
* feat: dump VPS snapshots with shopware-cli project dump
* feat: add deploy/lib/identity.sh for shopware-cd sync split
* feat: add remaining deploy/lib helpers for shopware-cd sync split
* feat: add sync-live and sync-app libs for shopware-cd split
* feat: add sync-identity and sync-ssh libs for shopware-cd split
* refactor: thin sync-runtime.sh CLI and slim rewrite lib
* fix: match deploy/lib/sync-rewrite.sh to fyrst-dev/recipes main
* feat: add deploy/lib/sync-volumes.sh for shopware-cd split
* feat: add deploy/lib/sync-commands.sh for shopware-cd split
* feat: add deploy/lib/sync-db.sh for shopware-cd split
* fix: slim fyrst/shopware-cd recipe to copy-from-package
Honor diimpp's review on #2049. Recipe is Flex metadata only
(manifest + post-install). Overlay files come from
vendor/fyrst/shopware-cd/overlay/. Toast uses fyrst-cli 0.1.0+;
do not ship bash wrappers.
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
* fix: drop fyrst/shopware-cd recipe root overlay
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: ROBJkE <ROBJkE@users.noreply.github.com>
* Add tailsfadmin/tailsfadmin-bundle recipe: manifest
* Add tailsfadmin recipe: default config
* Add tailsfadmin recipe: asset_mapper paths
* Post-install output in English
* English comments (default config)
* English comments (asset_mapper paths)
* Fix CI: remove unsupported alias, use 4-space indentation
- manifest.json: drop "aliases" (aliases are not supported in recipes-contrib)
- config/packages/tailsfadmin.yaml: put the menu list dash on its own line so
every indentation level is a multiple of 4 spaces (recipes-contrib lint)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* Fix odiseoteam/sylius-rbac-plugin admin route prefix
The recipe hardcoded prefix: /admin, so on any install that customizes
SYLIUS_ADMIN_ROUTING_PATH_NAME the plugin's own admin routes land outside
sylius.security.admin_regex and are unreachable through the admin firewall.
Use the same parameterized prefix Sylius' own admin routes use.
Also trims the post-install note: the AdminUser snippet and the migration
command are already covered by the linked installation guide.
* Trigger CI
* Add PHP and Symfony framework requirements to manifest.json
* Refactor manifest.json to remove PHP and Symfony framework requirements
* Remove Symfony version requirements from manifest.json
* Add recipe version 4.0 for outcomer/symfony-json-schema-validation
Adds auto_cast_query and auto_cast_path options to the default
outcomer_validation.yaml config, matching the bundle's 4.0 release.
* Use the new schemas (path/domain pairs) option in the 4.0 recipe
schemas_path/schema_domain are deprecated in favor of schemas as of
bundle 4.0.
* Fix YAML indentation to be a multiple of 4 spaces
The CI lint requires every indentation level to be a multiple of 4
spaces; the list item's inline "path:" key broke that rule.
* Add recipe for mosl/opensign-bridge-bundle (0.6)
* Trigger CI: PR body now includes the required License MIT header
---------
Co-authored-by: Yaovi <y.ametepe@gmail.com>
symfony/mcp-bundle 0.13 replaced the single implicit server with named servers
under `mcp.servers`. sulu/mcp-bundle prepends one called `sulu`, so the
`allowed_hosts` this recipe writes moves under `mcp.servers.sulu.http`.
* Add recipe for sulu/mcp-bundle 1.0
* Move the allowed hosts out of the recipe into its output
The released sulu/mcp-bundle 1.0.0-RC1 requires symfony/mcp-bundle ^0.6,
where mcp.http.allowed_hosts does not exist yet: it was added in 0.11.
Shipping the option as config broke cache:clear on every install.
* Contribute the allowed hosts and the default OAuth scopes
sulu/mcp-bundle 1.0.0-RC2 requires symfony/mcp-bundle ^0.12, so
mcp.http.allowed_hosts exists and the transport can be told its public
host. league requires scopes.default and the bundle leaves it to the
project, so the recipe contributes the two MCP scopes.
Both sections live in sulu_mcp.yaml rather than in the files those
bundles own, because Symfony merges configuration per extension.
---------
Co-authored-by: Johannes Wachter <wachter.johannes@gmail.com>
* Improve JanePHP recipes first-run experience
Recipes pointed the generator configs to specification files they never
created, hid all generator output behind a NullOutput (so failures showed
up as raw PHP fatals and successes printed nothing) and always exited 0,
even when generation failed.
- document every config key and the spec file prerequisite in
config/jane/*.php
- render generator output, format thrown errors and propagate exit codes
in the recipe bin scripts
- reorder post-install steps: placing the specification file now comes
before running the generator
- explain when/how to uncomment the generated normalizer service in
config/packages/jane.yaml
Refs: https://github.com/janephp/janephp/issues/860
* Point recipes to the current documentation website
jane.readthedocs.io is outdated, jane.jolicode.com/latest/ is the
current documentation home.
* Re-trigger QA after adding the license header to the PR description
Follow-up to the review feedback on #2026: env-scoped config/*/dev/
directories are the outdated approach. Both files move to flat paths
guarded by a when@dev: block.
The packages file is guarded too rather than left bare — the bundle is
registered for dev only, so an unguarded zestly_dev_login: root key in
config/packages/ has no extension to load it in prod and would break
cache warmup.
Claude-Session: https://claude.ai/code/session_01FtiTUbCskmCiy9k78vCL19
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Add tito10047/progressive-image-bundle 2.0
Registers the bundle, its route, and a working default config (a chain
resolver with an AssetMapper + filesystem fallback, tailwind grid
breakpoints, sync generation, and a self-contained local Flysystem
variant store — no extra dependency required). The responsive
breakpoint stylesheet is generated and imported into assets/app.js
automatically via a post-install script, so the bundle renders
correctly right after "composer require" with zero manual config.
Verified end-to-end against a sandboxed copy of a real AssetMapper app:
uninstall -> reinstall -> render <twig:pgi:Image> produces a working
<picture> element with real generated variant files on disk.
* Fix recipes-contrib QA failures for tito10047/progressive-image-bundle 2.0
- add-lines only supports "top", "bottom", "after_target" as a position
value — "before_target" isn't valid. Insertion order relative to the
app.css import doesn't matter functionally, so switch to after_target.
- post-install.txt was missing its trailing newline.
* Retrigger CI: tito10047/progressive-image-bundle main/v2.0 branches now include the AssetMapper prepend() fix
* Retrigger CI: asset_mapper resolver fix is live on main/v2.0 (progressive-image-bundle)
* Retrigger CI: 2.0.0-rc0 (pre-fix) tag deleted, only 2.0.0-rc1 remains
Registers the bundle and imports the shop routes, which expose the page the customer returns to from the bank-hosted payment page. Without that import the return URL cannot be built and the payment fails before it even leaves.
No config/packages: both configuration keys of the plugin have real defaults.
No add-lines either, the plugin ships no JavaScript. The two remaining steps cannot be automated and are recalled by post-install.txt: generating the Sylius payment encryption key, and declaring the trusted proxies, x-forwarded-host included, without which the URLs handed to the bank are unreachable.
* Add recipe for sylius/admin-mcp-server-plugin 0.1
* Remove league_oauth2_server.yaml from recipe — plugin already imports it via config.yaml
* Add OAuth keypair env vars to manifest.json
* adds leoparden/plugin-license-manager
* Remove aliases from manifest.json
* Add leoparden/plugin-license-manager 1.3 recipe
Runs leoparden:license:sync via auto-scripts so newly required Leoparden
extensions are reported to the license hub. Scoped to 1.3 because the command
ships from plugin-license-manager v1.3.0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Martin Flogaus <flogaus@leoparden.net>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Registers TreblleBundle, copies a minimal treblle.yaml config pointing
at TREBLLE_SDK_TOKEN and TREBLLE_API_KEY env vars, and injects those
two variables into .env on install.