Compare commits

...
11 Commits
Author SHA1 Message Date
Aaron SchererandGitHub db5338a83e feat(cache-bundle): add the 2.0 recipe (#2029) 2026-09-16 17:58:41 +04:00
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
d48bb7db3c Add recipe for davidjln/llm-carbon-bundle (#2051)
* Add recipe for davidjln/llm-carbon-bundle

* Trigger CI re-check

* Trigger 1.0 re-check

---------

Co-authored-by: david_j <david.julien@nowwweb.com>
2026-09-16 17:48:04 +04:00
Vitalii CherepanovandGitHub af0e3536ae feat: add A2A Symfony bundle recipe (#2053) 2026-09-16 17:41:37 +04:00
Toms SokolovsandGitHub 6f41880b6f Add recipe for mailtrap/mailtrap-local (#2052) 2026-09-16 17:23:09 +04:00
INTERNATIONALES WEB APPS & SERVICESandGitHub eef2ae1572 Add recipe for wlindabla/mailing-bundle (#2054)
* Add recipe for wlindabla/mailing-bundle

* Fix trailing newline in recipe files

* Trigger CI
2026-09-16 17:14:16 +04:00
cd9f5783d0 Add recipe for jpmmartin/sylius-nmi-plugin (#2050)
Claude-Session: https://claude.ai/code/session_01WYGgHP9evTsmdwbszaakYL

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-14 17:34:54 +04:00
e2e8f5cd11 Add tailsfadmin/tailsfadmin-bundle (#2047)
* 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>
2026-09-14 17:24:32 +04:00
Igor PinchukandGitHub e5e55bbe4f Add recipe for indexnowkit/symfony-bundle (#2048) 2026-09-10 17:58:04 +04:00
Diego D'amicoandGitHub 545f6e495a Fix odiseoteam/sylius-rbac-plugin admin route prefix (#2046)
* 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
2026-09-08 17:29:05 +04:00
mrk-teandGitHub 2833906142 Add recipe for codein/recaptcha-enterprise-bundle (#2045) 2026-09-07 14:12:39 +04:00
30 changed files with 432 additions and 11 deletions
+5
View File
@@ -0,0 +1,5 @@
{
"bundles": {
"Cache\\CacheBundle\\CacheBundle": ["all"]
}
}
+2
View File
@@ -0,0 +1,2 @@
* Configure the CacheBundle integrations that your app uses:
<href=https://github.com/php-cache/cache-bundle#configuration>https://github.com/php-cache/cache-bundle#configuration</>
@@ -0,0 +1,16 @@
codein_recaptcha_enterprise:
project_id: '%env(CODEIN_RECAPTCHA_ENTERPRISE_PROJECT_ID)%'
site_key: '%env(CODEIN_RECAPTCHA_ENTERPRISE_SITE_KEY)%'
api_key: '%env(CODEIN_RECAPTCHA_ENTERPRISE_API_KEY)%'
#challenge: checkbox # score (default) or checkbox, each needs its own kind of site key
#min_score: 0 # 0 disables the score check, which is what the checkbox challenge wants
#on_error: allow # deny (default) refuses the token when Google cannot be reached
# A test run has no browser to solve the challenge, so every submission would be refused.
when@test:
codein_recaptcha_enterprise:
enabled: false
#when@dev:
# codein_recaptcha_enterprise:
# enabled: false
@@ -0,0 +1,16 @@
{
"bundles": {
"Codein\\RecaptchaEnterpriseBundle\\CodeinRecaptchaEnterpriseBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "Create the key and read the project id in the reCAPTCHA Enterprise console:",
"#2": "https://console.cloud.google.com/security/recaptcha",
"#3": "The score and checkbox challenges each need their own kind of site key.",
"CODEIN_RECAPTCHA_ENTERPRISE_PROJECT_ID": "",
"CODEIN_RECAPTCHA_ENTERPRISE_SITE_KEY": "",
"CODEIN_RECAPTCHA_ENTERPRISE_API_KEY": ""
}
}
@@ -0,0 +1,12 @@
* <fg=blue>Set</> the <comment>CODEIN_RECAPTCHA_ENTERPRISE_*</> variables in <comment>.env.local</>
* <fg=blue>Add</> <comment>two script tags</> to your layout — the bundle adds neither. Without them every
submission is refused as <comment>MISSING</>:
<comment>{{ asset('bundles/codeinrecaptchaenterprise/recaptcha-enterprise.js') }}</>, and Google's
<comment>enterprise.js</>, the latter only <comment>after the visitor has consented</>:
<comment>https://github.com/Codein-Labs/recaptcha-enterprise-bundle#adding-the-scripts-to-your-layout</>
* <fg=blue>Read</> <comment>Choosing the challenge</> before creating the site key: the score and checkbox
challenges need different key types
* Assessments are <comment>disabled in the test environment</>, where no browser can solve the challenge
@@ -0,0 +1,4 @@
llm_carbon:
default_zone: 'France'
calculator: complete
models: []
@@ -0,0 +1,8 @@
{
"bundles": {
"LlmCarbon\\Bundle\\LlmCarbonBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
}
}
@@ -0,0 +1,5 @@
The default configuration was written to <fg=green>config/packages/llm_carbon.yaml</>.
* Review and adjust <fg=yellow>default_zone</> to match your deployment region
(must be one of the zones exposed by LlmCarbon\EmissionFactor::all()).
* Add your model catalog under the <fg=yellow>models</> key if needed.
+15
View File
@@ -0,0 +1,15 @@
{
"copy-from-package": {
"overlay/": ""
},
"bundles": {
"Fyrst\\ShopwareCd\\FyrstShopwareCdBundle": [
"all"
]
},
"env": {
"SHOPWARE_SHOP_ID": "",
"SHOPWARE_DEPLOY_ENV": "live",
"SHOPWARE_DATA_BASE": "/var/lib/shopware/data"
}
}
+124
View File
@@ -0,0 +1,124 @@
* <fg=blue>fyrst/shopware-cd</>
Flex copied CD files from the package
<comment>overlay/</comment> into the shop root: CI,
<comment>deploy/</comment> (including CD Compose), <comment>.dockerignore</comment>,
and <comment>.env.example</comment>
(same idea as <comment>shopware/docker</comment> copying <comment>docker/Dockerfile</comment>).
<comment>compose.yaml</comment>, <comment>.gitignore</comment>, and
<comment>.shopware-project.yml</comment> (creates default;
<comment>.shopware-project.yaml</comment> is also accepted — do not rename)
are owned by
<comment>shopware-cli project create</comment> / the CLI — not this recipe.
Local: <comment>shopware-cli project dev</comment> and the CLI-managed
shop-root <comment>compose.yaml</comment>.
VPS/CD: files under <comment>deploy/</comment>
(<comment>deploy/compose.yaml</comment>, <comment>deploy/compose.prod.yaml</comment>,
<comment>deploy/compose.vps.yaml</comment>).
Runtime DB/bind-mount copy between VPS hosts:
<comment>fyrst-cli shopware sync pull</comment>
(see <comment>deploy/sync-runtime.md</comment>).
DB snapshots use <comment>shopware-cli project dump</comment>
(fyrst-cli never dumps; restore is
<comment>fyrst-cli shopware db import</comment>).
Live backups (not sync):
<comment>fyrst-cli shopware backup create</comment>
(see <comment>deploy/backup-runtime.md</comment>).
Rollback:
<comment>IMAGE_TAG=$(cat .previous-tag) fyrst-cli shopware deploy rollback</comment>.
Each VPS needs <comment>fyrst-cli</comment> 0.1.0+
(<comment>https://github.com/fyrst-dev/cli</comment>).
CI runs <comment>fyrst-cli shopware deploy release</comment>
with <comment>IMAGE</comment> / <comment>IMAGE_TAG</comment> /
<comment>COMPOSE_DIR</comment>.
TLS edge: <comment>deploy/edge/Caddyfile</comment>.
Live → local project dev rsync (no DB):
<comment>fyrst-cli shopware sync local</comment>
(reads <comment>SHOPWARE_SHOP_ID</comment> from local <comment>.env</comment>;
remote root <comment>/var/lib/shopware/data/${SHOPWARE_SHOP_ID}/live</comment>;
<comment>--data all</comment> is refused).
Flex may append a <comment>###> fyrst/shopware-cd ###</comment>
block to shop-root <comment>.env</comment> (empty
<comment>SHOPWARE_SHOP_ID</comment>, <comment>SHOPWARE_DEPLOY_ENV=live</comment>,
<comment>SHOPWARE_DATA_BASE=/var/lib/shopware/data</comment>).
It does not overwrite creates whole <comment>.env</comment>
and does not put secrets in that block. Then run
<comment>fyrst-cli shopware env init --shop-id …</comment>
(see <comment>deploy/README</comment>).
VPS <comment>.env</comment> source of truth (required):
<comment>SHOPWARE_SHOP_ID</comment> (same slug on live + staging + laptop),
<comment>SHOPWARE_DEPLOY_ENV</comment> (live|staging|playground|dev).
Compose derives project name
(<comment>${SHOPWARE_SHOP_ID}-${SHOPWARE_DEPLOY_ENV}</comment>)
and bind-mount paths from those two plus optional
<comment>SHOPWARE_DATA_BASE</comment> (default
<comment>/var/lib/shopware/data</comment>) — three separate interpolations,
no nested defaults. It does not require
<comment>COMPOSE_PROJECT_NAME</comment> or <comment>SHOPWARE_DATA_ROOT</comment>
(optional for scripts/docs; fyrst-cli derives when unset and prefers them
when set — do not assign them empty).
WARNING: <comment>shopware-cli project create</comment> writes
<comment>COMPOSE_PROJECT_NAME=sw-shop-…</comment> into shop-root
<comment>.env</comment> for local <comment>project dev</comment>. That env var
overrides Compose <comment>name:</comment>
(<comment>${SHOPWARE_SHOP_ID}-${SHOPWARE_DEPLOY_ENV}</comment>).
On the VPS, comment out that line
(<comment>fyrst-cli shopware env init --vps</comment> or by hand).
Flex does not delete it on <comment>composer require</comment>
(create owns the local flow).
Bootstrap:
<comment>DATA="${SHOPWARE_DATA_BASE:-/var/lib/shopware/data}/${SHOPWARE_SHOP_ID}/${SHOPWARE_DEPLOY_ENV}"</comment>
then <comment>mkdir -p "${DATA}"/{files,media,thumbnail,theme,sitemap}</comment>
then <comment>chown -R 82:82 "${DATA}"</comment>.
Live profiles: uncomment
<comment>COMPOSE_PROFILES=redis,worker,scheduler</comment>
in <comment>.env</comment> (worker + scheduler; redis if used). Staging leaves
this unset unless you need async tasks.
<comment>fyrst-cli shopware deploy release</comment> warns on live when it is empty; it does
not auto-enable.
Same-host tag-and-load / air-gap: <comment>PULL_POLICY=never</comment>
and <comment>SKIP_PULL=1</comment> (or
<comment>fyrst-cli shopware deploy release --skip-pull</comment>). Default
<comment>pull_policy</comment> is <comment>always</comment> for CI/VPS.
Several shops or live+staging on one VPS share the host; shop id + env
keep stacks isolated.
You MUST require <comment>shopware/docker</comment> in the same Composer command as
this package. That recipe copies <comment>docker/Dockerfile</comment>, which CI and
CD Compose require (default <comment>DOCKERFILE=docker/Dockerfile</comment>). This recipe
does not ship a root Dockerfile. A missing <comment>docker/Dockerfile</comment>
means <comment>shopware/docker</comment> was skipped.
Flex may append SoT keys to <comment>.env</comment>; it does not
overwrite creates whole <comment>.env</comment>. Then run
<comment>fyrst-cli shopware env init --shop-id …</comment>
(VPS: add <comment>--vps</comment>; see <comment>deploy/README</comment>).
If <comment>.env</comment> is missing, that command copies
<comment>.env.example</comment> first. Commit the copied files;
<comment>vendor/</comment> is gitignored.
shopware-cli project create writes <comment>.shopware-project.yml</comment>
(that extension is fine). shopware-cli accepts both
<comment>.yml</comment> and <comment>.yaml</comment>; do not rename.
GitHub Actions picks up
<comment>.github/workflows/cd.yaml</comment>. GitLab still defaults to
<comment>.gitlab-ci.yml</comment>: set Settings → CI/CD → CI/CD configuration file
to <comment>.gitlab-ci.yaml</comment> (or copy/symlink that name).
Flex registers
<comment>Fyrst\ShopwareCd\FyrstShopwareCdBundle</comment>
in <comment>config/bundles.php</comment>.
Post-restore sales-channel URL rewrite uses
<comment>APP_URL</comment> in shop-root <comment>.env</comment>;
sync calls
<comment>bin/console fyrst:sales-channel:rewrite-urls</comment>.
Laptop SSH (<comment>SHOPWARE_SSH_*</comment>) belongs in
<comment>.env.local</comment>.
Shops need <comment>composer update fyrst/shopware-cd</comment>
so the command and bundle exist, then
<comment>composer recipes:update fyrst/shopware-cd</comment>.
Refresh later with <comment>composer recipes:update fyrst/shopware-cd</comment>.
See https://github.com/fyrst-dev/shopware-cd
@@ -0,0 +1,3 @@
indexnowkit:
key: '%env(INDEXNOW_KEY)%'
base_url: '%env(INDEXNOW_BASE_URL)%'
@@ -0,0 +1,2 @@
indexnowkit:
resource: '@IndexNowKitBundle/config/routes.php'
@@ -0,0 +1,15 @@
{
"bundles": {
"IndexNowKit\\SymfonyBundle\\IndexNowKitBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"#1": "The IndexNow key, served at /<key>.txt. Generate one into .env.local: bin/console indexnow:key:generate --write-env",
"#2": "Empty outside production = dry run (nothing is sent); empty in production = a configuration error indexnow:check explains",
"INDEXNOW_KEY": "",
"#3": "The public URL of the site (console commands and Messenger workers have no request to read it from)",
"INDEXNOW_BASE_URL": "https://www.example.com"
}
}
@@ -0,0 +1,9 @@
<fg=blue;options=bold>IndexNow</> is installed: search engines (Yandex, Bing, Naver, Seznam, ...) get told which pages changed.
<options=bold>Next steps:</>
1. Run <comment>bin/console indexnow:key:generate --write-env</> — writes <comment>INDEXNOW_KEY</> to <comment>.env.local</>
2. Set <comment>INDEXNOW_BASE_URL</> to the public URL of the site
3. Add <comment>#[IndexNow(route: '...')]</> to the entities that have a public page (needs <comment>indexnowkit/doctrine</>)
4. Run <comment>bin/console indexnow:check</> — it verifies the key file, the transport and the configuration
Documentation: https://github.com/indexnowkit/php/tree/main/packages/symfony-bundle
@@ -0,0 +1,2 @@
imports:
- { resource: "@JpmMartinSyliusNmiPlugin/config/config.yaml" }
@@ -0,0 +1,18 @@
jpm_martin_sylius_nmi_shop:
resource: "@JpmMartinSyliusNmiPlugin/config/routes/shop.yaml"
jpm_martin_sylius_nmi_admin:
resource: "@JpmMartinSyliusNmiPlugin/config/routes/admin.yaml"
prefix: /%sylius_admin.path_name%
# Required if you want NMI to tell your store what it did. Without it there is no endpoint and
# nothing arrives. No prefix: not the locale, not the admin path. See the README's "Webhooks".
jpm_martin_sylius_nmi_webhook:
resource: "@JpmMartinSyliusNmiPlugin/config/routes/webhook.yaml"
# Required if you turn saved cards on, and harmless if you do not. See the README's "Saved cards".
jpm_martin_sylius_nmi_shop_account:
resource: "@JpmMartinSyliusNmiPlugin/config/routes/shop_account.yaml"
prefix: /{_locale}/account
requirements:
_locale: ^[A-Za-z]{2,4}(_([A-Za-z]{4}|[0-9]{3}))?(_([A-Za-z]{2}|[0-9]{3}))?$
@@ -0,0 +1,20 @@
{
"bundles": {
"JpmMartin\\SyliusNmiPlugin\\JpmMartinSyliusNmiPlugin": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"add-lines": [
{
"file": "assets/shop/entrypoint.js",
"content": "import '@vendor/jpmmartin/sylius-nmi-plugin/assets/shop/entrypoint';",
"position": "bottom",
"warn_if_missing": true
}
],
"gitignore": [
"/config/encryption/*.key",
"!/config/encryption/test.key"
]
}
@@ -0,0 +1,14 @@
* <fg=blue>Four things no recipe can do, in this order:</>
<comment>yarn add @nmipayments/nmi-pay && yarn build</comment> the browser component and the shop build
<comment>bin/console doctrine:migrations:migrate</comment> the plugin's four tables
* <fg=blue>A key of your own, before the first payment method is saved.</> The skeleton's test.key is
published; point the store at a new path <comment>first</comment>, then generate — the generator writes
wherever the store points at that moment:
<comment>.env.local:</comment> SYLIUS_PAYMENT_ENCRYPTION_KEY_PATH=%kernel.project_dir%/config/encryption/payment.key
<comment>bin/console sylius:payment:generate-key</comment>
* <fg=blue>Then</> Configuration → Payment methods → Create → NMI, and read <comment>Testing against the sandbox</comment>
before the first payment: https://github.com/jpmmartin/SyliusNmiPlugin#readme
+26
View File
@@ -0,0 +1,26 @@
{
"docker-compose": {
"docker-compose.override.yml": {
"services": [
"mailtrap-local:",
" image: mailtrap/mailtrap-local",
" # The Symfony CLI detects a mail catcher by container-internal port, and it",
" # recognizes only 1025 for SMTP together with 1080 or 8025 for the web UI.",
" # Mailtrap Local defaults to 3535 and 3550 and binds loopback only, so the",
" # listeners move here and the non-loopback bind is allowed explicitly.",
" command:",
" - --unsafe-non-loopback",
" - --smtp-listen=0.0.0.0:1025",
" - --http-listen=0.0.0.0:8025",
" - --db=/var/lib/mailtrap-local/db.sqlite3",
" ports:",
" - \"1025\"",
" - \"8025\"",
" labels:",
" # The service is not called \"mailer\", so the prefix is set explicitly to",
" # keep the MAILER_* variables Symfony Mailer expects.",
" com.symfony.server.service-prefix: 'mailer'"
]
}
}
}
@@ -0,0 +1,22 @@
* A <comment>mailtrap-local</> service was added to your Docker Compose configuration.
Start it with <info>docker compose up -d</>.
* With the Symfony CLI there is nothing else to do. <comment>MAILER_DSN</> is exposed for
you, and <info>symfony open:local:webmail</> opens the web UI.
* Without the Symfony CLI, ask Docker for the published ports. Docker assigns them
at random, in the same way as the <comment>symfony/mailer</> catcher service:
<info>docker compose port mailtrap-local 1025</> # SMTP, for MAILER_DSN
<info>docker compose port mailtrap-local 8025</> # web UI
To pin them instead, replace the two entries under <comment>ports:</> with
<comment>"3535:1025"</> and <comment>"3550:8025"</>. Those are Mailtrap Local's own defaults.
* The <comment>symfony/mailer</> recipe adds its own catcher service, called <comment>mailer</>.
When both services run, both claim the <comment>MAILER_</> prefix: one becomes
<comment>MAILER_DSN</> and the other becomes <comment>MAILER_1_DSN</>. This is decided when the
containers are created. Keep the one catcher you want, so that <comment>MAILER_DSN</>
always points where you expect.
* <fg=blue>Read</> the documentation at <comment>https://github.com/mailtrap/mailtrap-local</>
@@ -1,3 +1,3 @@
odiseo_sylius_rbac_admin:
resource: "@OdiseoSyliusRbacPlugin/config/routes/admin.yaml"
prefix: /admin
prefix: '/%sylius_admin.path_name%'
@@ -2,17 +2,9 @@
<bg=blue;fg=white> What's next? </>
<bg=blue;fg=white> </>
* <fg=blue>Make</> your AdminUser administration-role aware: add
<comment>AdministrationRoleAwareInterface</> and <comment>AdministrationRoleAwareTrait</>
to your <comment>AdminUser</> entity. This plugin cannot do it for you -- that class is
yours, and may already extend or implement other things.
* <fg=blue>Update</> your database schema:
<comment>bin/console doctrine:migrations:migrate</>
* <fg=blue>Read</> the full installation guide at
<comment>https://github.com/odiseoteam/SyliusRbacPlugin/blob/master/doc/installation.md</>
* <fg=blue>Grant</> yourself access. A fresh install denies every administrator
everything, including the screen that assigns roles:
<comment>bin/console odiseo:rbac:grant <username-or-email> super_admin --create</>
* <fg=blue>Read</> the full installation guide, including the AdminUser snippet, at
<comment>https://github.com/odiseoteam/SyliusRbacPlugin/blob/master/doc/installation.md</>
@@ -0,0 +1,12 @@
# Default configuration for the tailsfadmin admin theme (Flex recipe).
# Adjust the menu to your application; `label` values are translation keys (i18n)
# or raw labels. See the bundle README.
tailsfadmin:
default_locale: fr
locales: ['fr', 'en', 'ar', 'es', 'de']
rtl_locales: ['ar']
menu:
-
group: menu.groups.menu
items:
- { label: menu.dashboard, path: /, icon: dashboard }
@@ -0,0 +1,12 @@
# AssetMapper path for the bundle's Stimulus controllers (Flex recipe).
#
# The bundle's prepend() does not survive the Flex config merge, so the controllers
# path (and the FullCalendar vendor-src shim) is declared here, on the host side.
# Kept in a SEPARATE file on purpose: Symfony merges framework.asset_mapper.paths
# from every config/packages/ file, so this adds to your asset_mapper.yaml
# without overwriting it.
framework:
asset_mapper:
paths:
'vendor/tailsfadmin/tailsfadmin-bundle/assets/controllers': 'bundles/tailsfadmin'
'vendor/tailsfadmin/tailsfadmin-bundle/assets/vendor-src': 'bundles/tailsfadmin-vendor'
@@ -0,0 +1,25 @@
{
"bundles": {
"Tailsfadmin\\TailsfadminBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"post-install-output": [
"<bg=blue;fg=white> tailsfadmin </> admin theme installed.",
"",
" The bundle ships no CDN dependency — two steps for the assets:",
"",
" 1. Vendor the components' third-party JS libs (ApexCharts, flatpickr, Dropzone, …):",
" <comment>php bin/console tailsfadmin:assets:install</comment>",
"",
" 2. Import the theme into your Tailwind entrypoint (assets/styles/app.css):",
" <comment>@import \"tailwindcss\";</comment>",
" <comment>@import \"../../vendor/tailsfadmin/tailsfadmin-bundle/assets/styles/theme.css\";</comment>",
"",
" Then compile: <comment>php bin/console tailwind:build && php bin/console asset-map:compile</comment>",
"",
" The controllers' AssetMapper path is already set (config/packages/tailsfadmin_assets.yaml).",
" Documentation: <comment>https://github.com/thibmonier/tailsfadmin#readme</comment>"
]
}
@@ -0,0 +1,4 @@
# a2a:
# executor: App\Agent\MyExecutor
# card_file: '%kernel.project_dir%/config/agent-card.json'
# public_url: '%env(A2A_PUBLIC_URL)%'
@@ -0,0 +1,3 @@
a2a:
resource: .
type: a2a
@@ -0,0 +1,8 @@
{
"bundles": {
"A2A\\Bundle\\A2ABundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
}
}
@@ -0,0 +1,12 @@
wlindabla_mailing:
from_addresses:
system:
address: '%env(APP_MAIL_FROM_SYSTEM)%'
name: '%env(APP_MAIL_FROM_SYSTEM_NAME)%'
support:
address: '%env(APP_MAIL_FROM_SUPPORT)%'
name: '%env(APP_MAIL_FROM_SUPPORT_NAME)%'
dkim:
private_key: '%env(resolve:default::MAILER_DKIM)%'
domain: '%env(APP_DKIM_DOMAIN)%'
selector: 'default'
@@ -0,0 +1,15 @@
{
"bundles": {
"Wlindabla\\MailingBundle\\WlindablaMailingBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/"
},
"env": {
"APP_MAIL_FROM_SYSTEM": "no-reply-system@myexample.com",
"APP_MAIL_FROM_SYSTEM_NAME": "System",
"APP_MAIL_FROM_SUPPORT": "support-@myexample.com",
"APP_MAIL_FROM_SUPPORT_NAME": "Support",
"APP_DKIM_DOMAIN": "myexample.com"
}
}