d844543ffa Add recipe for fyrst/shopware-cd (#2049)
* 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>
2026-09-16 17:55:36 +04:00
2019-12-06 14:24:49 +03:00
2019-09-05 06:56:00 +00:00
2019-09-29 13:20:11 +00:00
2019-08-01 08:33:55 +02:00
2022-12-20 07:43:34 -05:00
2019-08-01 08:33:55 +02:00
2019-08-01 08:33:55 +02:00
2020-12-05 00:42:06 +01:00
2024-01-09 13:38:11 +01:00
2018-07-06 11:07:52 +02:00
2020-02-14 18:01:54 +01:00
2022-01-17 01:03:10 +01:00
2020-11-01 17:11:27 +01:00
2021-03-12 22:04:12 +02:00
2023-11-28 11:57:14 +01:00
2020-09-09 21:46:44 +02:00
Fix
2020-12-27 19:24:18 +01:00
2025-04-19 21:20:21 +04:00
2019-10-13 19:09:22 +02:00
2020-09-09 12:07:22 +02:00
2020-12-01 15:00:06 +01:00
2019-08-01 08:33:55 +02:00
2019-05-03 12:01:08 +02:00
2018-10-29 08:22:32 +01:00
2017-11-24 07:11:52 -08:00
2018-02-02 10:38:43 +02:00
2021-06-30 08:05:17 +00:00
2025-12-07 08:51:24 +01:00
2018-12-06 16:07:46 +04:00
2023-11-16 11:42:43 -05:00
2021-02-23 21:32:01 +01:00
2017-10-29 16:02:54 +00:00
2025-01-11 13:54:24 +01:00
2021-07-09 11:25:58 +02:00
2024-08-03 13:45:51 +02:00
2023-01-30 14:07:10 +01:00
2023-01-18 14:27:07 +01:00
2021-07-09 11:25:58 +02:00
2022-04-28 03:35:27 +02:00
2021-07-09 11:25:58 +02:00
2021-08-04 11:26:17 +02:00
2025-11-29 13:08:48 +01:00
2025-07-28 10:50:12 +04:00
2021-07-09 11:25:58 +02:00
2020-06-07 12:43:40 +02:00
2018-01-14 01:17:09 +01:00
2017-12-05 11:15:02 +01:00
-
2023-05-11 17:55:52 +02:00
2022-05-02 09:26:42 +02:00

Symfony Recipes (Contrib)
=========================

Symfony recipes allow the automation of Composer packages configuration via the
`Symfony Flex`_ Composer plugin.

This repository hosts contributed recipes for Composer packages that are not
part of the "official" `Symfony recipes`_. To enable recipes defined in this
repository for your project, run the following command:

.. code-block:: bash

    composer config extra.symfony.allow-contrib true

See `RECIPES.md`_ for a full list of recipes that live in this repository.

Contributing
------------

For more information about contributing a recipe, read the `documentation`_ on
the main repository and the Best Practices below.

Unlike for official recipes, the pull requests for new contrib recipes are
managed by the community. Pull requests are reviewed by the Symfony Bot and
automatically merged when the following conditions are met (in that order):

* The pull request title does not contain "WIP";

* The Symfony Bot approved the pull request and reported no validation errors;

* Someone (not the Symfony bot nor the pull request author) approved the pull
  request;

* The pull request author or the reviewer is a Symfony Core Merger.

Best Practices
--------------

Default Bundle Config
#####################

A recipe for a bundle should not contain all the configuration the bundle has to
offer. A good recipe only contains a suggestion config for an application. That
is config that needs to be configured but no real default value exists.

**Example:** The "items per page" in a paginator bundle or API credentials for an API
client bundle.

If environment variables are used, they must be provided to the bundle's config.

A bundle without config or routes do not need a recipe. Flex is smart enough to
install that bundle anyways.

Modify Other Bundle's config
############################

The general rule is that no recipe should modify other bundle's configuration. There
is however one exception. A recipe is allowed to append to a "config collection".

**Example:** Add a new connection to DoctrineBundle or add a new cache adapter to Symfony
Framework bundle.

Maintainability
###############

The symfony/recipes-contrib repository should contain the config for packages. Using
"``copy-from-package`` Configurator" for routes and config is not allowed. That would
make the recipes impossible to maintain and to assure their quality.

Recipes is also not a replacement for ``composer create-project``. That means it is
not intended to be used as "bootstrap full application" and copy a lot of PHP code,
front-end assets etc. Recipes are for quick installation of packages.

.. _`Symfony Flex`: https://github.com/symfony/flex
.. _`Symfony recipes`: https://github.com/symfony/recipes
.. _`documentation`: https://github.com/symfony/recipes
.. _`RECIPES.md`: https://github.com/symfony/recipes-contrib/blob/flex/main/RECIPES.md
S
Description
No description provided
Readme MIT
12 MiB
Languages
PHP 85.1%
Makefile 10.6%
Twig 2.8%
Gherkin 0.5%
JavaScript 0.5%
Other 0.5%