Skip to content

Conversation

@richardgaunt
Copy link
Collaborator

@richardgaunt richardgaunt commented Sep 29, 2025

Checklist before requesting a review

  • I have formatted the subject to include ticket number as Issue #123456 by drupal_org_username: Issue title
  • I have added a link to the issue tracker
  • I have provided information in Changed section about WHY something was done if this was not a normal implementation
  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added tests that prove my fix is effective or that my feature works
  • I have run new and existing relevant tests locally with my changes, and they passed
  • I have provided screenshots, where applicable

Background / Changes

CivicTheme requires a number of steps to install, we would like to provide an easier method for installing CivicTheme, config and content.

This PR provides a number of recipes.

Starter Recipes for Drupal 11 and Drupal CMS

  1. CivicTheme Starter Recipe (civictheme_starter) - Install civicthemes, module dependencies, required configuration, and basic block types. The name comes from drupal_cms_starter with starter denoting that it is building on a new site. Installing on an existing site is untested with this recipe.
  2. CivicTheme Drupal CMS Starter (civictheme_drupal_cms_starter) - installs CivicTheme for work with Drupal CMS again should be used on a fresh install, due to the nature of Drupal CMS however, this is built on top of an already installed site with the CMS starter recipe.

Helper Recipes

  1. CivicTheme Drupal CMS Preinstall (civictheme_drupal_cms_preinstall) - activates CivicTheme so the missing layout bug is avoided - this needs to be run before CivicTheme Drupal CMS Starter

Development Recipes

  1. CivicTheme Generated Content Recipe (civictheme_content_generated_static) - static content that has been built with the cs_generated_content module and exported. This enables us in future PRs to create a visual regression testing for Drupal builds.

Other Changes

Updating Drupal CMS packages and other:

Changelogs summary:

 - drupal/core-recipe-unpack installed in version 11.2.4
   Release notes: https://github.com/drupal/core-recipe-unpack/releases/tag/11.2.4

 - symfony/polyfill-php84 downgraded from v1.33.0 to v1.32.0 minor
   See changes: https://github.com/symfony/polyfill-php84/compare/v1.33.0...v1.32.0
   Release notes: https://github.com/symfony/polyfill-php84/releases/tag/v1.32.0

 - symfony/finder updated from v7.2.9 to v7.3.2 minor
   See changes: https://github.com/symfony/finder/compare/v7.2.9...v7.3.2
   Release notes: https://github.com/symfony/finder/releases/tag/v7.3.2

 - symfony/polyfill-iconv updated from v1.31.0 to v1.32.0 minor
   See changes: https://github.com/symfony/polyfill-iconv/compare/v1.31.0...v1.32.0
   Release notes: https://github.com/symfony/polyfill-iconv/releases/tag/v1.32.0

 - symfony/polyfill-mbstring updated from v1.31.0 to v1.32.0 minor
   See changes: https://github.com/symfony/polyfill-mbstring/compare/v1.31.0...v1.32.0
   Release notes: https://github.com/symfony/polyfill-mbstring/releases/tag/v1.32.0

 - symfony/polyfill-intl-normalizer updated from v1.31.0 to v1.32.0 minor
   See changes: https://github.com/symfony/polyfill-intl-normalizer/compare/v1.31.0...v1.32.0
   Release notes: https://github.com/symfony/polyfill-intl-normalizer/releases/tag/v1.32.0

 - symfony/polyfill-intl-grapheme updated from v1.31.0 to v1.32.0 minor
   See changes: https://github.com/symfony/polyfill-intl-grapheme/compare/v1.31.0...v1.32.0
   Release notes: https://github.com/symfony/polyfill-intl-grapheme/releases/tag/v1.32.0

 - symfony/polyfill-ctype updated from v1.31.0 to v1.32.0 minor
   See changes: https://github.com/symfony/polyfill-ctype/compare/v1.31.0...v1.32.0
   Release notes: https://github.com/symfony/polyfill-ctype/releases/tag/v1.32.0

 - symfony/string updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/string/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/string/releases/tag/v7.3.4

 - symfony/deprecation-contracts updated from v3.5.1 to v3.6.0 minor
   See changes: https://github.com/symfony/deprecation-contracts/compare/v3.5.1...v3.6.0
   Release notes: https://github.com/symfony/deprecation-contracts/releases/tag/v3.6.0

 - symfony/service-contracts updated from v3.5.1 to v3.6.0 minor
   See changes: https://github.com/symfony/service-contracts/compare/v3.5.1...v3.6.0
   Release notes: https://github.com/symfony/service-contracts/releases/tag/v3.6.0

 - symfony/console updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/console/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/console/releases/tag/v7.3.4

 - symfony/yaml updated from v7.2.9 to v7.3.3 minor
   See changes: https://github.com/symfony/yaml/compare/v7.2.9...v7.3.3
   Release notes: https://github.com/symfony/yaml/releases/tag/v7.3.3

 - symfony/translation-contracts updated from v3.5.1 to v3.6.0 minor
   See changes: https://github.com/symfony/translation-contracts/compare/v3.5.1...v3.6.0
   Release notes: https://github.com/symfony/translation-contracts/releases/tag/v3.6.0

 - symfony/event-dispatcher-contracts updated from v3.5.1 to v3.6.0 minor
   See changes: https://github.com/symfony/event-dispatcher-contracts/compare/v3.5.1...v3.6.0
   Release notes: https://github.com/symfony/event-dispatcher-contracts/releases/tag/v3.6.0

 - symfony/event-dispatcher updated from v7.2.0 to v7.3.3 minor
   See changes: https://github.com/symfony/event-dispatcher/compare/v7.2.0...v7.3.3
   Release notes: https://github.com/symfony/event-dispatcher/releases/tag/v7.3.3

 - symfony/var-exporter updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/var-exporter/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/var-exporter/releases/tag/v7.3.4

 - symfony/dependency-injection updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/dependency-injection/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/dependency-injection/releases/tag/v7.3.4

 - symfony/filesystem updated from v7.2.9 to v7.3.2 minor
   See changes: https://github.com/symfony/filesystem/compare/v7.2.9...v7.3.2
   Release notes: https://github.com/symfony/filesystem/releases/tag/v7.3.2

 - symfony/process updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/process/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/process/releases/tag/v7.3.4

 - twig/twig updated from v3.19.0 to v3.21.1 minor
   See changes: https://github.com/twigphp/Twig/compare/v3.19.0...v3.21.1
   Release notes: https://github.com/twigphp/Twig/releases/tag/v3.21.1

 - symfony/validator updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/validator/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/validator/releases/tag/v7.3.4

 - symfony/serializer updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/serializer/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/serializer/releases/tag/v7.3.4

 - symfony/routing updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/routing/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/routing/releases/tag/v7.3.4

 - symfony/http-foundation updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/http-foundation/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/http-foundation/releases/tag/v7.3.4

 - symfony/psr-http-message-bridge updated from v7.2.0 to v7.3.0 minor
   See changes: https://github.com/symfony/psr-http-message-bridge/compare/v7.2.0...v7.3.0
   Release notes: https://github.com/symfony/psr-http-message-bridge/releases/tag/v7.3.0

 - symfony/polyfill-intl-idn updated from v1.31.0 to v1.32.0 minor
   See changes: https://github.com/symfony/polyfill-intl-idn/compare/v1.31.0...v1.32.0
   Release notes: https://github.com/symfony/polyfill-intl-idn/releases/tag/v1.32.0

 - symfony/mime updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/mime/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/mime/releases/tag/v7.3.4

 - symfony/mailer updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/mailer/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/mailer/releases/tag/v7.3.4

 - symfony/var-dumper updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/var-dumper/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/var-dumper/releases/tag/v7.3.4

 - symfony/error-handler updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/error-handler/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/error-handler/releases/tag/v7.3.4

 - symfony/http-kernel updated from v7.2.9 to v7.3.4 minor
   See changes: https://github.com/symfony/http-kernel/compare/v7.2.9...v7.3.4
   Release notes: https://github.com/symfony/http-kernel/releases/tag/v7.3.4

 - mck89/peast updated from v1.16.3 to v1.17.2 minor
   See changes: https://github.com/mck89/peast/compare/v1.16.3...v1.17.2
   Release notes: https://github.com/mck89/peast/releases/tag/v1.17.2

 - guzzlehttp/promises updated from 2.0.4 to 2.2.0 minor
   See changes: https://github.com/guzzle/promises/compare/2.0.4...2.2.0
   Release notes: https://github.com/guzzle/promises/releases/tag/2.2.0

 - asm89/stack-cors updated from v2.2.0 to v2.3.0 minor
   See changes: https://github.com/asm89/stack-cors/compare/v2.2.0...v2.3.0
   Release notes: https://github.com/asm89/stack-cors/releases/tag/v2.3.0

 - drupal/core updated from 11.1.8 to 11.2.4 minor
   See changes: https://github.com/drupal/core/compare/11.1.8...11.2.4
   Release notes: https://github.com/drupal/core/releases/tag/11.2.4

 - psy/psysh updated from v0.12.8 to v0.12.12 patch
   See changes: https://github.com/bobthecow/psysh/compare/v0.12.8...v0.12.12
   Release notes: https://github.com/bobthecow/psysh/releases/tag/v0.12.12

 - league/container updated from 4.2.4 to 4.2.5 patch
   See changes: https://github.com/thephpleague/container/compare/4.2.4...4.2.5
   Release notes: https://github.com/thephpleague/container/releases/tag/4.2.5

 - laravel/prompts updated from v0.3.5 to v0.3.7 patch
   See changes: https://github.com/laravel/prompts/compare/v0.3.5...v0.3.7
   Release notes: https://github.com/laravel/prompts/releases/tag/v0.3.7

 - consolidation/config updated from 3.1.0 to 3.1.1 patch
   See changes: https://github.com/consolidation/config/compare/3.1.0...3.1.1
   Release notes: https://github.com/consolidation/config/releases/tag/3.1.1

 - consolidation/output-formatters updated from 4.6.0 to 4.6.1 patch
   See changes: https://github.com/consolidation/output-formatters/compare/4.6.0...4.6.1
   Release notes: https://github.com/consolidation/output-formatters/releases/tag/4.6.1

 - consolidation/annotated-command updated from 4.10.1 to 4.10.2 patch
   See changes: https://github.com/consolidation/annotated-command/compare/4.10.1...4.10.2
   Release notes: https://github.com/consolidation/annotated-command/releases/tag/4.10.2

 - chi-teck/drupal-code-generator updated from 4.1.0 to 4.2.0 minor
   See changes: https://github.com/Chi-teck/drupal-code-generator/compare/4.1.0...4.2.0
   Release notes: https://github.com/Chi-teck/drupal-code-generator/releases/tag/4.2.0

 - drush/drush updated from 13.6.0 to 13.6.2 patch
   See changes: https://github.com/drush-ops/drush/compare/13.6.0...13.6.2
   Release notes: https://github.com/drush-ops/drush/releases/tag/13.6.2

 - drupal/project_browser updated from 2.0.0-beta3 to 2.1.0-beta3 minor

 - drupal/token updated from 1.15.0 to 1.16.0 minor

 - drupal/search_api updated from 1.38.0 to 1.39.0 minor

 - drupal/drupal_cms_helper installed in version 1.2.6

 - drupal/drupal_cms_search updated from 1.2.3 to 1.2.6 patch

 - drupal/modeler_api installed in version 1.0.3

 - drupal/eca_ui updated from 2.1.14 to 3.0.4 major

 - drupal/drupal_cms_olivero updated from 1.2.0 to [email protected] minor

 - drupal/gin_toolbar updated from 2.1.0 to 3.0.2 major

 - drupal/gin updated from 4.1.0 to 5.0.3 major

 - drupal/dashboard updated from 2.0.1 to 2.1.0 minor

 - drupal/drupal_cms_admin_ui updated from 1.1.3 to 1.2.6 minor

 - drupal/automatic_updates updated from 3.1.7 to 4.0.0 major

 - drupal/drupal_cms_starter downgraded from 1.x-dev@e69ea13 to 1.2.6 minor

 - drupal/drupal_cms_forms updated from 1.2.5 to 1.2.6 patch

 - drupal/core-recommended updated from 11.1.8 to 11.2.4 minor
   See changes: https://github.com/drupal/core-recommended/compare/11.1.8...11.2.4
   Release notes: https://github.com/drupal/core-recommended/releases/tag/11.2.4

 - drupal/cms downgraded from 1.x-dev@72679d5 to 1.2.6 minor

Screenshots

Summary by CodeRabbit

  • New Features

    • CivicTheme starter becomes the default with a bundled demo site (generated pages, events, components, media, files).
    • New provisioning options to install Drupal CMS or Drupal 11 directly.
  • Chores

    • Drupal 11 exposed as a configurable environment option and updated defaults.
    • Added Drupal CMS dependency and CI job to build the CMS profile.
    • Recipes included in Docker build context and repository ignore rules adjusted.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 29, 2025

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

💤 Files selected but had no reviewable changes (13)
  • recipes/civictheme_drupal_cms_starter/recipe.yml
  • scripts/custom/provision-10-enable-theme-modules.sh
  • tests/behat/features/generated_content.feature
  • tests/behat/features/paragraph.civictheme_message.render.feature
  • tests/behat/features/paragraph.civictheme_webform.render.feature
  • web/themes/contrib/civictheme/config/install/views.view.civictheme_media.yml
  • web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_1.yml
  • web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_2.yml
  • web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_3.yml
  • web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_4.yml
  • web/themes/contrib/civictheme/config/optional/block.block.civictheme_primary_navigation.yml
  • web/themes/contrib/civictheme/config/optional/block.block.civictheme_secondary_navigation.yml
  • web/themes/contrib/civictheme/config/optional/block.block.civictheme_side_navigation.yml
⛔ Files ignored due to path filters (1)
  • composer.lock is excluded by !**/*.lock

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

Adds Drupal version/profile environment variables, a drupal/cms composer dependency and recipe allowlist updates, Ahoy commands and a CircleCI job for Drupal CMS, includes recipes in Docker build context, updates VCS/docker ignore rules, and adds many civictheme recipe assets (views, files, media, nodes, recipe metadata).

Changes

Cohort / File(s) Summary
Env files & compose
​.env, ​.env.local.default, docker-compose.yml
Add DRUPAL_VERSION (default 11) and set/update DRUPAL_PROFILE (now points at civictheme starter in .env); add comments documenting supported profiles/versions.
Root composer
composer.json
Add require: drupal/cms ^1.2.5; extend composer-plugins allowlist with Drupal core plugins.
Ahoy CLI commands
.ahoy.yml
Add provision-cms and provision-11 commands that set DRUPAL_PROFILE/DRUPAL_VERSION and invoke the provision script.
CI workflow
.circleci/config.yml
Add build-drupal-cms job and include it in the build workflow with appropriate requires and filters.
Dockerfiles & entrypoint
.docker/cli.dockerfile, .docker/cli.onlytheme.dockerfile, .docker/cli.sibling.dockerfile, .docker/entrypoints/cli/03-provision-site.sh
Add COPY recipes /app/recipes to CLI Dockerfiles, update comments, and add a log line "Using Quant Provisioning script" before running provisioning.
VCS & Docker ignore rules
.gitignore, recipes/.gitignore, .dockerignore
Add top-level /recipes/* ignore with negated exceptions (whitelist certain recipe dirs); remove /README.txt from recipes/.gitignore; add !recipes to .dockerignore to include recipes in build context.
Recipe metadata
recipes/civictheme_content_generated_static/composer.json
Add recipe composer.json metadata (name, type recipe, license).
Views config
recipes/civictheme_content_generated_static/config/views.view.cs_generated_content_list.yml
Add Drupal Views definition cs_generated_content_list with multiple displays, filters, fields, page paths and sitemap extender.
Generated file entities
recipes/civictheme_content_generated_static/content/file/*.yml
Add many file entity YAMLs (JPEG/PDF) under recipes/.../content/file/ with filename, public://generated_content/* URIs, mime types, filesize, status and timestamps.
Generated media entities
recipes/civictheme_content_generated_static/content/media/*.yml
Add numerous media YAMLs (bundles civictheme_image, civictheme_document) under recipes/.../content/media/ referencing file UUIDs; include captions, alt text, dimensions, moderation and path settings.
Generated node entities
recipes/civictheme_content_generated_static/content/node/*.yml
Add many node YAMLs (civictheme_page, civictheme_event) under recipes/.../content/node/ with nested paragraphs (map, content, automated_list, next_step), banners/layouts, dates, summaries, topics, thumbnails and /generated-content/* aliases.
Packaging / lint
phpmd.xml
Add */recipes/* to PHPMD exclude-patterns.

Sequence Diagram(s)

sequenceDiagram
  participant Dev as Developer (PR)
  participant Repo as Repository
  participant CI as CircleCI
  participant Docker as Docker build
  participant Ahoy as Ahoy CLI
  participant Provision as Provision script

  rect #E8F0FF
    Dev->>Repo: add env vars, composer changes, Dockerfile updates, recipes (views/files/media/nodes), CI job, Ahoy commands, ignore updates
  end

  rect #F0FFF0
    CI->>Docker: build CLI images (now include /app/recipes)
    Docker->>Repo: include recipes in build context
    CI->>Repo: composer install (includes drupal/cms)
  end

  rect #FFF8E6
    Ahoy->>Provision: run provision-cms / provision-11 (env: DRUPAL_PROFILE + DRUPAL_VERSION)
    Provision->>Repo: import recipe content (views, files, media, nodes) into site build
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested labels

State: Needs review

Suggested reviewers

  • alan-cole

Poem

Thump-thump, I hop through YAML rows tonight,
Recipes, media, nodes all tucked in tight.
Composer fetched the CMS key with cheer,
CI hums, Ahoy whispers "provision" near.
— a rabbit, nibbling config crumbs 🐇

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title accurately and concisely summarizes the primary change by stating that new site install recipes have been added, which aligns directly with the pull request’s objective to introduce these recipes.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (8)
recipes/civictheme_content_generated_static/content/media/9ce87d83-eb80-4430-9925-93a55af3caae.yml (1)

38-42: Alt text and dimensions — same notes as above.

  • Provide descriptive alt (or empty if decorative).
  • Verify 1552×846 matches the source file.
recipes/civictheme_content_generated_static/content/media/f82c8bd7-bd96-4a69-826b-0f3d5c333996.yml (1)

38-42: Alt text is placeholder; width/height look atypical (1550×500) — verify.

Check that the referenced image actually has these dimensions and adjust if needed; update alt accordingly.

recipes/civictheme_content_generated_static/content/media/2446bb9b-e26d-44c3-94c0-7ef6edf4a605.yml (1)

13-15: Author and timestamp choices — confirm intent and reproducibility.

  • uid: 0 makes the media owned by Anonymous; confirm this is desired for editorial workflows.
  • created uses a point-in-time value; if this content is regenerated, timestamps may churn diffs.

Optionally set a fixed epoch for generated content or omit created across generated items for reproducible exports.

Also applies to: 19-21

recipes/civictheme_content_generated_static/content/node/00f7eecc-4a61-4a18-a576-26eec6eec844.yml (3)

39-42: Alias is extremely long — consider shortening for UX/SEO.

This alias is ~160+ chars and hard to read. Consider a concise, human-friendly path.


97-101: Redundant list limit when unlimited.

With field_c_p_list_limit_type: unlimited, the field_c_p_list_limit: 0 is redundant.

Drop the numeric limit for clarity.


8-11: Author = Anonymous and fixed created date — verify policy.

Using revision_uid/uid: 0 and fixed created is fine for generated content, but confirm this matches your content ownership policy and reproducibility expectations.

Consider a dedicated “Content Seeder” user or omit created.

Also applies to: 17-19, 24-25

recipes/civictheme_content_generated_static/content/node/07bef1c1-03e3-4d7c-8a3b-ae69f02f5ab4.yml (1)

25-27: Created timestamp reproducibility.

Same note as other generated content: consider a fixed epoch or omit created to avoid churn across regenerations.

recipes/civictheme_content_generated_static/content/node/1fdca8aa-648f-4e51-80c9-f87bc8b57131.yml (1)

140-140: Empty text “format” values — set an explicit text format or confirm field config.

These are blank. If the field uses a text format, set one (e.g., civictheme_rich_text or plain_text); if the field type is text without format, ensure that’s how the field is configured, otherwise imports may fail.

Example patch (choose the correct format per your site):

-              format: ''
+              format: civictheme_rich_text

Also applies to: 179-179, 218-218, 257-257

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 748d00d and 94f27f3.

⛔ Files ignored due to path filters (22)
  • composer.lock is excluded by !**/*.lock
  • recipes/civictheme_content_generated_static/content/file/Generated_static_jpg_file_10_libe.jpg is excluded by !**/*.jpg
  • recipes/civictheme_content_generated_static/content/file/Generated_static_jpg_file_1_accu.jpg is excluded by !**/*.jpg
  • recipes/civictheme_content_generated_static/content/file/Generated_static_jpg_file_2_earu.jpg is excluded by !**/*.jpg
  • recipes/civictheme_content_generated_static/content/file/Generated_static_jpg_file_3_esti.jpg is excluded by !**/*.jpg
  • recipes/civictheme_content_generated_static/content/file/Generated_static_jpg_file_4_atcu.jpg is excluded by !**/*.jpg
  • recipes/civictheme_content_generated_static/content/file/Generated_static_jpg_file_5_idim.jpg is excluded by !**/*.jpg
  • recipes/civictheme_content_generated_static/content/file/Generated_static_jpg_file_6_haru.jpg is excluded by !**/*.jpg
  • recipes/civictheme_content_generated_static/content/file/Generated_static_jpg_file_7_aspe.jpg is excluded by !**/*.jpg
  • recipes/civictheme_content_generated_static/content/file/Generated_static_jpg_file_8_atqu.jpg is excluded by !**/*.jpg
  • recipes/civictheme_content_generated_static/content/file/Generated_static_jpg_file_9_cons.jpg is excluded by !**/*.jpg
  • recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_10_faci.pdf is excluded by !**/*.pdf
  • recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_1_duci.pdf is excluded by !**/*.pdf
  • recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_2_aute.pdf is excluded by !**/*.pdf
  • recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_3_etit.pdf is excluded by !**/*.pdf
  • recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_4_alia.pdf is excluded by !**/*.pdf
  • recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_5_dolo.pdf is excluded by !**/*.pdf
  • recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_6_blan.pdf is excluded by !**/*.pdf
  • recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_7_dele.pdf is excluded by !**/*.pdf
  • recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_8_dele.pdf is excluded by !**/*.pdf
  • recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_9_anim.pdf is excluded by !**/*.pdf
  • recipes/civictheme_content_generated_static/content/file/generic.png is excluded by !**/*.png
📒 Files selected for processing (107)
  • .env (1 hunks)
  • .env.local.default (1 hunks)
  • composer.json (1 hunks)
  • recipes/civictheme_content_generated_static/config/views.view.cs_generated_content_list.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/28b82ba2-601d-4e12-b08f-386962c45545.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/2a53199e-3cd3-419c-b044-16a509602752.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/34a62a8e-2096-4249-b6b3-0aa557b7de00.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/3d72e253-d3fd-4dae-a9d8-ce5005749650.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/3e8fcfa3-5b62-4d17-9505-27dc9be21047.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/5322e72b-5f0f-44ba-ad05-ee64380e1f57.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/5548db1e-3094-4bc5-8401-9700b5b4aad3.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/62e4d359-347d-4f5f-af17-a153ad83a7a9.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/8212ed57-5c2a-4e77-b905-fcf768dc49ae.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/9165e3f8-2cc5-4804-a53f-6382dd53ef17.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/93186753-3e96-47ef-b1f3-ff1cdc476ba9.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/9382498c-2678-4e74-92a2-f64b57e11f36.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/94a78c4c-833d-4bd0-9fef-044175cfefb7.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/a76f202a-2bd7-4af1-937c-1835b9257d81.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/aef9f3cd-f5ab-47e6-91c8-a8ba358f7e36.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/c35f8e96-1cf2-4588-96d5-9a1979465e44.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/c96dee56-2d41-4b6d-9fc2-914713f06c1a.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/cb0748f0-7bee-4c5f-a00d-01cda40001b3.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/e2f86086-0269-4ad0-92c1-96670e613c18.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/file/f1e88e78-5f38-4afb-861b-a9af59e4526e.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/09d61f69-746d-42d1-9d8f-78c256e9595e.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/11323430-2ee9-444e-9cc3-70547ca77464.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/11b09eaa-ae94-48db-84f7-c6431a1f5e78.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/1590793c-8c13-4a67-8607-dd9aef6115e7.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/1dc694da-913b-4097-8f2b-822661c97338.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/1f232b36-2259-4825-b989-76ab776794c3.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/238babdd-3c76-4b96-aa60-952cf44fe689.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/2446bb9b-e26d-44c3-94c0-7ef6edf4a605.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/2b11cf24-4747-4d7a-bc8c-a7ae8ce2ee3b.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/2b33fc27-dd4a-427e-a3a2-4b3ace382ca4.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/2daf48b1-b1d6-4beb-ad81-e42a55efd1f0.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/3378938b-d96c-4291-8fbb-f04208984625.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/3b356dee-7c02-433a-8ad8-e2298a720e7f.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/3c65c30d-319f-402c-9d42-dbedc799eb34.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/434236aa-1a77-474d-9a31-7305ffb3e9d5.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/48632cac-2e8d-436d-9938-2ccdf0efa903.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/4b8d684d-71b5-4b32-aff7-c47f2c054cf8.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/4e188906-d5cc-40ea-bb76-92cea2bb5ee9.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/51c49b4b-50a5-4610-a47d-5f27735a2ef6.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/551b075c-af70-4521-9de7-ec5e487c40f8.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/59d72cfa-f37d-4689-99e8-cc68f387fbb9.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/6c4156cb-6b4d-4467-a7a0-47a90be20291.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/6e26b476-a047-4547-bf86-2c73dd48f843.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/70602d7c-8746-4807-a288-32eb7fc32ef6.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/71e0aa2b-3de8-4d67-b907-287a2e7868af.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/75d10796-847a-4c23-8f48-cf6046799eeb.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/78ccf538-7b2b-49fe-ab15-8f2c8eb894be.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/8b0dacdd-f7aa-4d1e-a93e-cac4cea90dfe.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/8d9f6c89-5abe-481a-bfa7-4738567ff6a0.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/92ffe259-99f0-47d3-824a-6a649cb17034.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/9468e905-6a82-401c-93ed-9ae6b6f1cd5d.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/9ab67eb6-579a-4792-9fd5-51b046cf8873.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/9ce87d83-eb80-4430-9925-93a55af3caae.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/9edb4cc0-790d-48ac-9527-40d7196c9667.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/9f82d101-8522-4b0f-a046-4df56e39f92d.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/9fa66811-896b-409a-bbd8-0b0adbb16da4.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/a3d85732-94f3-4a0c-b41b-0eb9084372e5.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/a4f343aa-4d4d-4948-b6ff-9f6cab295888.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/a9a587b3-2b9e-43ce-ab28-66d5e5f634a0.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/aee2f9e3-4f77-4b9a-b2df-7079b3d089ca.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/af716da0-dff7-4bc2-b2fc-a42f603f4f9c.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/b01ccf28-b786-4ff9-8a8b-5a809aa17bb9.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/b272bf9d-bd55-4a92-a0fd-b904240017a4.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/bf0b24f1-7173-49a1-b1f3-e5ed83b6a216.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/c0448d36-58b8-4cab-90d9-a873b88b5770.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/c3b82dbd-cc88-4791-bb9e-a80ac17b373b.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/cf12cdd3-9a9b-4ce0-bda5-c50d3098d30b.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/d034df75-23ae-4dea-bfa3-334b94b79660.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/d137be4d-e1db-47bb-86fa-0f8d5d18c9bc.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/d21221ff-feee-4a5d-931f-90eede0da0ca.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/d720b9c5-5101-4fe9-9a55-053e5fbe0391.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/d82881bf-76f5-4078-b819-a55d5226d74f.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/d83dffb5-13bd-4f86-87f9-f76e3407e1d4.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/db6528c7-cea8-4a4f-9574-97324f2eab7e.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/dbc30bcd-876e-4499-bab2-362edfb76d2a.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/dc4091c2-b7b5-4612-95b7-f8fdd9163be6.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/dd0ea928-4136-45c3-a38c-c476fb0eb042.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/de760691-a8bd-4bbc-b9a9-cacbed929cf9.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/def8b78a-1955-4c98-a8fd-a7f7e48dc6aa.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/e51bfef1-1ca4-4bdd-b4b7-a948d9313273.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/ebacfb78-235c-49bd-bb35-b8a4ebc04578.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/ecdf9f4b-73de-4d84-9b50-7f91efd73352.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/f2876ebf-7ba4-47c4-bf40-7a1364564b59.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/f2b12e05-3b89-467e-9d7f-6a69164646af.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/f5615546-86c4-4d6c-8bf6-931e6079c987.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/f82c8bd7-bd96-4a69-826b-0f3d5c333996.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/f912a51b-4148-469e-a64c-d4c0d23cf445.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/fa969696-d6c4-4e47-9b78-b1633d973c0e.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/fb24d887-5e65-4ac2-abb3-f9d98220ddcc.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/media/fe5c40fb-e8d0-4b71-b17a-a748b0a5ea7d.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/0040967e-ef5f-40f8-b121-2b7ddfe53f5f.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/00f7eecc-4a61-4a18-a576-26eec6eec844.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/05292e94-96bb-4473-8789-e6ad44686fcb.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/07bef1c1-03e3-4d7c-8a3b-ae69f02f5ab4.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/08020a10-ad1b-45bc-90c8-83acbb97b18e.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/0d90b6b6-4a8d-44fb-81a0-374c2da47a8e.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/0fcb4792-b6de-4c64-a3ea-15c12b9b3fd7.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/163433db-da0c-4cbf-ac40-266b3b29228c.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/1884cbeb-9f2c-4712-a617-866aebf4918f.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/1c10ab9e-949d-432d-b2a5-aa078017a2c7.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/1cb8248b-2966-434a-8432-ba10ad5dff78.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/1dd40c82-15c4-4200-bc8b-5b3bdbe49a7d.yml (1 hunks)
  • recipes/civictheme_content_generated_static/content/node/1fdca8aa-648f-4e51-80c9-f87bc8b57131.yml (1 hunks)
⛔ Files not processed due to max files limit (45)
  • recipes/civictheme_content_generated_static/content/node/23032a72-402b-4f6f-868c-399876a02467.yml
  • recipes/civictheme_content_generated_static/content/node/26745917-c8cb-4bb5-8750-9f202ef2a31e.yml
  • recipes/civictheme_content_generated_static/content/node/27709d78-f3c9-42f0-a8bf-515d26aefe41.yml
  • recipes/civictheme_content_generated_static/content/node/27815c6e-ea20-4a38-becc-f772f8bab19a.yml
  • recipes/civictheme_content_generated_static/content/node/28053af1-4990-445e-98b9-95bb015d5dae.yml
  • recipes/civictheme_content_generated_static/content/node/28130b4e-1de0-4d3a-8f6f-14bf7905ea7c.yml
  • recipes/civictheme_content_generated_static/content/node/2bb60112-264f-4546-a8d5-bc14adb04fe6.yml
  • recipes/civictheme_content_generated_static/content/node/2cd2c878-9d09-4703-9c8b-e39eda7b2516.yml
  • recipes/civictheme_content_generated_static/content/node/2f36df02-0076-4048-922d-29119721c898.yml
  • recipes/civictheme_content_generated_static/content/node/2f53e6f7-f63c-4314-919b-b038130c5a3c.yml
  • recipes/civictheme_content_generated_static/content/node/309fc8ec-87b6-4c57-9644-aa703b58cc64.yml
  • recipes/civictheme_content_generated_static/content/node/32030cf4-b23b-49e3-ade0-878cb2fd89d0.yml
  • recipes/civictheme_content_generated_static/content/node/321ce384-5050-4cfb-a5aa-fe8890a37348.yml
  • recipes/civictheme_content_generated_static/content/node/33d261db-53ee-4d5d-acfa-620cb51a867f.yml
  • recipes/civictheme_content_generated_static/content/node/35010308-cb58-4819-84d6-22c87d7b03d0.yml
  • recipes/civictheme_content_generated_static/content/node/362b3d50-d695-4353-9777-d9f019587d6d.yml
  • recipes/civictheme_content_generated_static/content/node/3a7003b8-c715-4980-9036-86de9a189bad.yml
  • recipes/civictheme_content_generated_static/content/node/3af46d17-bca6-462d-8886-0a28c4ed676d.yml
  • recipes/civictheme_content_generated_static/content/node/3ccbb634-5c09-4d9e-aa33-9166c0a86940.yml
  • recipes/civictheme_content_generated_static/content/node/3e87346b-2c26-4b78-9ed4-7991cdd043ab.yml
  • recipes/civictheme_content_generated_static/content/node/3f01ce4c-d803-4593-822b-235254c9ef29.yml
  • recipes/civictheme_content_generated_static/content/node/3faced78-8dcf-4fd7-9edc-2f60a14b2479.yml
  • recipes/civictheme_content_generated_static/content/node/41d42203-da13-48b4-bf95-e1a0e292805f.yml
  • recipes/civictheme_content_generated_static/content/node/41f4ec58-9df9-4d89-9ac8-cbaca4824bae.yml
  • recipes/civictheme_content_generated_static/content/node/453ac83d-41c4-4dc3-89b6-32fd1f2841df.yml
  • recipes/civictheme_content_generated_static/content/node/49215b14-eff5-4844-b84c-e45af6ca6bee.yml
  • recipes/civictheme_content_generated_static/content/node/4cf4e203-a69b-405f-b487-d06824952e1f.yml
  • recipes/civictheme_content_generated_static/content/node/4fec9451-baa9-42a1-8213-3a539182678e.yml
  • recipes/civictheme_content_generated_static/content/node/52ef05da-2381-4ed4-9d9c-6e1fe69e5389.yml
  • recipes/civictheme_content_generated_static/content/node/55523df3-4940-4162-83ea-f406b1dbc39c.yml
  • recipes/civictheme_content_generated_static/content/node/55ae485b-d054-4c56-9f42-97a80538f6cb.yml
  • recipes/civictheme_content_generated_static/content/node/55dededf-b8f0-4ec8-9f60-42e694a03e24.yml
  • recipes/civictheme_content_generated_static/content/node/58f7e848-8815-4848-9fba-763ff9ed5541.yml
  • recipes/civictheme_content_generated_static/content/node/5a6f3e29-aefa-4004-92d2-26a6f78d7aac.yml
  • recipes/civictheme_content_generated_static/content/node/5d270a4e-9bc6-4f3b-b3d3-c67aa18fdecb.yml
  • recipes/civictheme_content_generated_static/content/node/5eb905db-f819-4820-b12e-e8a5bb307474.yml
  • recipes/civictheme_content_generated_static/content/node/642880dc-d099-411d-972c-067a0433bd56.yml
  • recipes/civictheme_content_generated_static/content/node/659471c8-de63-412f-8eff-60e39dd3e5d1.yml
  • recipes/civictheme_content_generated_static/content/node/6b9ee0a3-c227-4334-8dce-3c2690933e83.yml
  • recipes/civictheme_content_generated_static/content/node/6c33a7ec-9e6c-4657-817b-4eeaae795702.yml
  • recipes/civictheme_content_generated_static/content/node/6cde5471-c98e-434d-83b0-25426b76c3b2.yml
  • recipes/civictheme_content_generated_static/content/node/6d1d51b2-cbf2-4e12-b129-02d3be7f3905.yml
  • recipes/civictheme_content_generated_static/content/node/6da2069d-e92e-451c-bcf9-995ba59b5775.yml
  • recipes/civictheme_content_generated_static/content/node/6ef01f59-25d9-4551-b09b-175a7c8de683.yml
  • recipes/civictheme_content_generated_static/content/node/706dd8e6-76a9-4752-b584-ff6fc1075686.yml
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-07-09T12:20:48.629Z
Learnt from: richardgaunt
PR: civictheme/monorepo-drupal#1340
File: web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_message.field_c_p_content.yml:9-9
Timestamp: 2025-07-09T12:20:48.629Z
Learning: For paragraph field configurations in the civictheme Drupal theme, the configuration entity ID should follow the pattern `paragraph.bundle_name.field_name` rather than `field.field.paragraph.bundle_name.field_name`. This is specific to paragraph field configurations.

Applied to files:

  • recipes/civictheme_content_generated_static/content/node/08020a10-ad1b-45bc-90c8-83acbb97b18e.yml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build-and-push
🔇 Additional comments (62)
recipes/civictheme_content_generated_static/content/media/51c49b4b-50a5-4610-a47d-5f27735a2ef6.yml (1)

1-37: Config entry looks consistent.

Fields, dependency reference, and metadata follow the expected pattern for generated civictheme document media. No issues spotted.

recipes/civictheme_content_generated_static/content/media/3c65c30d-319f-402c-9d42-dbedc799eb34.yml (1)

1-42: Media content entry looks consistent

Metadata, dependency link, and field values all follow the expected Civictheme generated-static pattern. Alt text and dimensions are present, so this entry is ready to ship.

recipes/civictheme_content_generated_static/content/media/c3b82dbd-cc88-4791-bb9e-a80ac17b373b.yml (1)

1-42: Static media entry looks solid.

Alt text, caption, dependency reference, and status metadata are all present and consistent with the existing generated content set. LGTM.

recipes/civictheme_content_generated_static/content/media/a4f343aa-4d4d-4948-b6ff-9f6cab295888.yml (1)

1-42: Static media entity looks consistent

Fields, dependency references, and accessibility metadata follow the established generated static pattern.

recipes/civictheme_content_generated_static/content/media/71e0aa2b-3de8-4d67-b907-287a2e7868af.yml (1)

1-42: Configuration looks consistent

Structure, field values, and dependencies align with Drupal’s exported media entity schema. I don’t see any blockers here.

recipes/civictheme_content_generated_static/content/media/e51bfef1-1ca4-4bdd-b4b7-a948d9313273.yml (1)

33-42: Media asset metadata reads cleanly.

Alt text, dimensions, and dependency wiring are all in place, so this entry should import without surprises.

recipes/civictheme_content_generated_static/content/media/238babdd-3c76-4b96-aa60-952cf44fe689.yml (1)

1-37: LGTM on this media export

Ownership, dependency linkage, moderation state, and document field wiring all look consistent with the other generated static assets. Nicely done.

recipes/civictheme_content_generated_static/content/media/78ccf538-7b2b-49fe-ab15-8f2c8eb894be.yml (1)

8-8: Confirm dependent file entity is committed.

This media item depends on the file entity 3d72e253-d3fd-4dae-a9d8-ce5005749650. If that file export isn’t present in the recipe, the media import will fail with a missing dependency. Please double-check that the matching content/file YAML made it into the same PR.

Also applies to: 38-38

recipes/civictheme_content_generated_static/content/file/8212ed57-5c2a-4e77-b905-fcf768dc49ae.yml (1)

1-27: Metadata looks consistent.

All required file entity fields are populated and the URI aligns with the generated content convention.

recipes/civictheme_content_generated_static/content/media/ecdf9f4b-73de-4d84-9b50-7f91efd73352.yml (1)

1-42: Media definition is coherent.

The dependency points to the new file entity, and required fields (caption, alt text, dimensions, moderation state) are present.

recipes/civictheme_content_generated_static/content/node/08020a10-ad1b-45bc-90c8-83acbb97b18e.yml (1)

1-122: Content export looks consistent.

The node metadata, paragraph embedding, and referenced dependencies all line up with the civictheme content recipe expectations. No blockers spotted here.

recipes/civictheme_content_generated_static/content/media/f5615546-86c4-4d6c-8bf6-931e6079c987.yml (1)

1-42: Static media YAML looks consistent.

Field structure and metadata follow the usual Drupal recipe default-content pattern, and the referenced file UUID keeps the dependency explicit. No changes needed. (drupalhelps.com)

recipes/civictheme_content_generated_static/content/media/d21221ff-feee-4a5d-931f-90eede0da0ca.yml (1)

1-38: LGTM: Media default content entry is consistent.

Schema, dependencies, and field structure match our existing generated-static patterns. No changes needed.

recipes/civictheme_content_generated_static/content/media/b272bf9d-bd55-4a92-a0fd-b904240017a4.yml (1)

1-42: Looks consistent with the existing media defaults

Field values, dependency declaration, and alt text follow the established pattern for generated Civictheme media, so I don’t see any blockers here.

recipes/civictheme_content_generated_static/content/file/93186753-3e96-47ef-b1f3-ff1cdc476ba9.yml (1)

7-27: Data definition looks consistent.

The file entity metadata is complete (uri, mime type, size, ownership, and timestamps) and aligns with typical Drupal config expectations for generated assets.

recipes/civictheme_content_generated_static/content/media/9ab67eb6-579a-4792-9fd5-51b046cf8873.yml (1)

10-42: Media config ties together correctly.

Status, ownership, caption, and the image field all reference the expected file UUID with appropriate alt text and dimensions, so the recipe should import cleanly.

recipes/civictheme_content_generated_static/content/media/2daf48b1-b1d6-4beb-ad81-e42a55efd1f0.yml (1)

34-42: Media payload looks solid.

Caption, alt text, and image metadata are all in place, so this default-content entry should import cleanly.

recipes/civictheme_content_generated_static/content/file/f1e88e78-5f38-4afb-861b-a9af59e4526e.yml (1)

1-27: File entity metadata is consistent.

All required properties (UUID, owner, URI, MIME type, size, status, created timestamp) align with the existing generated static assets. No changes needed.

recipes/civictheme_content_generated_static/content/media/4e188906-d5cc-40ea-bb76-92cea2bb5ee9.yml (1)

1-37: Media entity wiring looks correct.

The dependency on the new file, field assignments, and moderation/path flags are in line with the other civictheme_document media entries. No adjustments required.

recipes/civictheme_content_generated_static/content/media/a9a587b3-2b9e-43ce-ab28-66d5e5f634a0.yml (1)

34-42: Alt text and caption coverage appreciated

Including both a caption and descriptive alt text keeps this media entity accessible out of the box. Nicely done.

recipes/civictheme_content_generated_static/content/media/70602d7c-8746-4807-a288-32eb7fc32ef6.yml (1)

1-37: Content entity export looks consistent.

Metadata, dependencies, and field payload align with the expected Drupal default-content structure, and the referenced file UUID ties back cleanly. No issues spotted.

recipes/civictheme_content_generated_static/content/media/9edb4cc0-790d-48ac-9527-40d7196c9667.yml (1)

33-36: Linkage to the file entity looks good.

The media item correctly depends on and references file 9382498c-2678-4e74-92a2-f64b57e11f36, so once the asset is present the relationship should hydrate cleanly during recipe install.

recipes/civictheme_content_generated_static/content/file/9382498c-2678-4e74-92a2-f64b57e11f36.yml (1)

13-21: Asset Presence Verified: Confirmed Generated_static_pdf_file_4_alia.pdf is committed at recipes/civictheme_content_generated_static/content/file/Generated_static_pdf_file_4_alia.pdf.

recipes/civictheme_content_generated_static/content/media/a3d85732-94f3-4a0c-b41b-0eb9084372e5.yml (1)

1-42: Structured default content looks good.

The entity metadata, dependency, and image field reference are consistent with the surrounding generated content. No changes needed.

recipes/civictheme_content_generated_static/content/media/8b0dacdd-f7aa-4d1e-a93e-cac4cea90dfe.yml (1)

1-37: Stable default content mapping

The metadata, default values, and entity reference format match the default_content module’s expected YAML shape. I don’t see any issues here. (drupal.org)

recipes/civictheme_content_generated_static/content/file/a76f202a-2bd7-4af1-937c-1835b9257d81.yml (1)

10-27: Confirm generated PDF asset is present.

This file entity points to public://generated_content/Generated_static_pdf_file_1_duci.pdf. Please double-check that the matching binary lives under the recipe’s files/ payload so the install recipe doesn’t end up with a dangling file reference on import.

recipes/civictheme_content_generated_static/content/media/3378938b-d96c-4291-8fbb-f04208984625.yml (1)

1-42: Static media entry looks consistent

Caption, alt text, and file dependency line up with the generated content pattern. No issues from my side.

.env (1)

42-54: Env guidance reads clearly

The clarified DRUPAL_VERSION/DRUPAL_PROFILE options make the starter recipe selection obvious. Looks good.

recipes/civictheme_content_generated_static/content/media/d137be4d-e1db-47bb-86fa-0f8d5d18c9bc.yml (1)

1-42: Media metadata matches expectations

Same structure and dependency handling as the other generated entries—happy with this addition.

recipes/civictheme_content_generated_static/content/file/5322e72b-5f0f-44ba-ad05-ee64380e1f57.yml (1)

1-27: File entity definition checks out

Filename, URI, and metadata are aligned with the generated PDF assets—no concerns.

recipes/civictheme_content_generated_static/content/media/cf12cdd3-9a9b-4ce0-bda5-c50d3098d30b.yml (1)

1-42: Alt text and dimensions provided

Another well-formed civictheme_image entry; alt text is present and the file link is wired correctly. All good.

recipes/civictheme_content_generated_static/content/media/09d61f69-746d-42d1-9d8f-78c256e9595e.yml (1)

1-42: Looks consistent with existing media exports.

Metadata, dependency reference, and field mappings all align with the Civictheme image recipe conventions.

recipes/civictheme_content_generated_static/content/media/1f232b36-2259-4825-b989-76ab776794c3.yml (1)

1-42: All good here as well.

Entity metadata and referenced file UUID follow the same validated pattern as other generated Civictheme images.

recipes/civictheme_content_generated_static/content/media/8d9f6c89-5abe-481a-bfa7-4738567ff6a0.yml (1)

1-37: Document media export looks correct.

Dependency mapping and field_c_m_document payload fit the expected Civictheme document defaults.

recipes/civictheme_content_generated_static/content/node/05292e94-96bb-4473-8789-e6ad44686fcb.yml (1)

1-138: Node export aligns with the Civictheme recipe schema.

Paragraph embedding, path configuration, and field settings are all in line with other generated page content.

recipes/civictheme_content_generated_static/content/media/92ffe259-99f0-47d3-824a-6a649cb17034.yml (1)

1-37: Consistent with the other document media exports.

Fields and dependency wiring follow the established Civictheme defaults with no issues noticed.

recipes/civictheme_content_generated_static/content/file/2a53199e-3cd3-419c-b044-16a509602752.yml (1)

1-27: Metadata looks consistent.

The file entity export follows the expected structure and values for generated static assets.

recipes/civictheme_content_generated_static/content/media/ebacfb78-235c-49bd-bb35-b8a4ebc04578.yml (1)

1-42: Media entity matches recipe conventions.

The dependencies, image field reference, and moderation details align with standard Civictheme media exports.

recipes/civictheme_content_generated_static/content/media/fb24d887-5e65-4ac2-abb3-f9d98220ddcc.yml (1)

1-42: Content export looks good.

Field values, dependencies, and metadata mirror the established pattern for generated static media.

recipes/civictheme_content_generated_static/content/media/2b33fc27-dd4a-427e-a3a2-4b3ace382ca4.yml (1)

1-42: Image media configuration is consistent.

The referenced file UUID and field payloads are structured as expected for this bundle.

recipes/civictheme_content_generated_static/content/media/11b09eaa-ae94-48db-84f7-c6431a1f5e78.yml (1)

1-37: Document media entry aligns with defaults.

All required fields, dependencies, and moderation details appear in order for the civictheme_document bundle.

recipes/civictheme_content_generated_static/content/media/f912a51b-4148-469e-a64c-d4c0d23cf445.yml (1)

33-37: Referenced file entity exists. The UUID 5322e72b-5f0f-44ba-ad05-ee64380e1f57 is present at recipes/civictheme_content_generated_static/content/file/5322e72b-5f0f-44ba-ad05-ee64380e1f57.yml. No missing dependency.

recipes/civictheme_content_generated_static/content/media/af716da0-dff7-4bc2-b2fc-a42f603f4f9c.yml (1)

37-38: Dependent file export confirmed
The matching file entity YAML for UUID 2a53199e-3cd3-419c-b044-16a509602752 is present at recipes/civictheme_content_generated_static/content/file/2a53199e-3cd3-419c-b044-16a509602752.yml, satisfying the dependency.

recipes/civictheme_content_generated_static/content/media/9fa66811-896b-409a-bbd8-0b0adbb16da4.yml (1)

7-8: All referenced file UUIDs have matching content/file definitions.

recipes/civictheme_content_generated_static/content/media/434236aa-1a77-474d-9a31-7305ffb3e9d5.yml (1)

38-42: Confirm image metadata dimensions match actual file: Verify that the width/height metadata (1552 × 846) in recipes/civictheme_content_generated_static/content/media/434236aa-1a77-474d-9a31-7305ffb3e9d5.yml exactly matches the source image (e.g., via identify) to prevent cropping or derivative-generation issues.

recipes/civictheme_content_generated_static/content/media/2446bb9b-e26d-44c3-94c0-7ef6edf4a605.yml (1)

7-8: Verify dependent file export exists.

Ensure content/file/9165e3f8-2cc5-4804-a53f-6382dd53ef17.yml (or equivalent) is present; otherwise this import will fail.

Run the repo-wide dependency check script I’ve shared below in another comment.

recipes/civictheme_content_generated_static/content/node/00f7eecc-4a61-4a18-a576-26eec6eec844.yml (1)

81-84: Confirm related configuration exists (text format and view mode).

  • format: civictheme_rich_text must exist on install.
  • field_c_p_list_item_view_as: civictheme_navigation_card must be a valid view mode/bundle config.

If these are provided by the new recipe, we’re good; otherwise add them to the recipe’s config set.

Also applies to: 93-96

recipes/civictheme_content_generated_static/content/media/1590793c-8c13-4a67-8607-dd9aef6115e7.yml (2)

7-8: Verify dependent file export exists.

Confirm 2a53199e-3cd3-419c-b044-16a509602752 is exported under content/file/.


37-42: Image metadata consistency.

Double‑check the stored width/height match the actual asset to avoid derivative regen on import.

recipes/civictheme_content_generated_static/content/media/9f82d101-8522-4b0f-a046-4df56e39f92d.yml (1)

7-8: Shared file UUID across media — confirm intent.

This media also references 2a53199e-3cd3-419c-b044-16a509602752. If intentional (multiple media wrapping one file), all good; otherwise point to distinct files.

recipes/civictheme_content_generated_static/content/node/07bef1c1-03e3-4d7c-8a3b-ae69f02f5ab4.yml (3)

7-8: Taxonomy dependency — ensure term export is included.

6b72fc35-5061-40e5-88c4-e4166fcd9ade must exist under content/taxonomy_term/. Missing it will break import.


47-53: Rich text format must be present.

format: civictheme_rich_text needs to be provisioned by the recipe/profile.


76-89: Map paragraph field consistency.

Some items provide only embed_url, others both address and embed_url. Confirm the component supports both simultaneously and validation won’t reject mixed inputs.

Also applies to: 146-157

recipes/civictheme_content_generated_static/content/node/163433db-da0c-4cbf-ac40-266b3b29228c.yml (1)

17-19: Confirm node owner is allowed to be uid 0 on your target sites.

Some Drupal installs disallow content owned by the anonymous user; many recipes default to uid 1. Please confirm importer/site config accepts uid 0 for nodes. If not, switch to uid 1.

recipes/civictheme_content_generated_static/content/node/1fdca8aa-648f-4e51-80c9-f87bc8b57131.yml (1)

17-19: Confirm paragraph owners can be uid 0.

Same consideration as nodes/media; verify your site accepts anonymous ownership for content entities created by the recipe.

recipes/civictheme_content_generated_static/content/media/def8b78a-1955-4c98-a8fd-a7f7e48dc6aa.yml (2)

7-8: Verify the referenced file UUID exists in the repo.

Ensure 28b82ba2-601d-4e12-b08f-386962c45545 is present under content/file/*.yml so the media import succeeds. Use the repo‑wide script above.


13-19: Media owner is uid 0 — confirm this is allowed.

Some setups require a real owner (often uid 1) for media entities. Please confirm or adjust.

recipes/civictheme_content_generated_static/content/node/0040967e-ef5f-40f8-b121-2b7ddfe53f5f.yml (3)

7-10: Good: explicit dependencies declared.

Declaring media and taxonomy term in depends should make imports deterministic.


56-59: Good: date range ordering is valid (start < end).

No issues spotted.


21-25: Confirm node owner uid 0 is acceptable on target sites.

Same as other files — verify importer/site policy.

recipes/civictheme_content_generated_static/content/node/1cb8248b-2966-434a-8432-ba10ad5dff78.yml (2)

55-169: Map components look consistent across variants.

Background/theme/spacing combinations cover light/dark and spacing cases; links/addresses present where expected.

If there’s a canonical set of allowed values for field_c_p_theme/background/vertical_spacing, consider adding a quick automated check in the recipe CI to prevent typos in future.


17-19: Confirm node owner uid 0.

Please verify anonymous ownership is supported for nodes in your environments.

Comment on lines +412 to +424
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: title
plugin_id: string
operator: starts
value: Event.
group: 1
exposed: false
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix the events view filter pattern

The events display filters titles with value: 'Event.', so the query looks for titles that begin with “Event.”. The generated event nodes actually start with “Event 10.” (note the space), so this filter will never match and the events page renders empty. Please drop the dot (or otherwise align the filter with the real title prefix) so events appear in the listing.

-          value: 'Event.'
+          value: 'Event '
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: title
plugin_id: string
operator: starts
value: Event.
group: 1
exposed: false
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: title
plugin_id: string
operator: starts
value: 'Event '
group: 1
exposed: false
🤖 Prompt for AI Agents
In
recipes/civictheme_content_generated_static/config/views.view.cs_generated_content_list.yml
around lines 412 to 424, the view filter uses value: 'Event.' which doesn't
match real node titles like "Event 10." (they use a space, not a dot); update
the filter value to match the actual prefix (for example change to "Event " with
a trailing space or to "Event" if you prefer a broader match) so the "starts"
operator will correctly match and events will appear in the listing.

Comment on lines +39 to +42
alt: 'Alt for Generated static Image media 35 Consequatur deserunt.'
title: ''
width: 500
height: 846
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

🧩 Analysis chain

Alt text is placeholder; consider meaningful alt or empty if decorative.

Replace “Alt for Generated static Image media …” with task‑focused alt text, or set to empty if purely decorative (per your accessibility policy).

Quick scan for placeholder alts:


🏁 Script executed:

#!/usr/bin/env bash
rg -n "alt:\s*'Alt for Generated static" recipes/civictheme_content_generated_static/content/media

Length of output: 8516


Replace placeholder alt text in all generated media YAML files
Placeholder alt strings were detected in 53 files under recipes/civictheme_content_generated_static/content/media/*.yml. Update each alt entry to a meaningful, task-focused description or set it to an empty string if the image is purely decorative per your accessibility policy. You can locate them with:

rg -n "alt:\s*'Alt for Generated static" recipes/civictheme_content_generated_static/content/media
🤖 Prompt for AI Agents
In
recipes/civictheme_content_generated_static/content/media/551b075c-af70-4521-9de7-ec5e487c40f8.yml
around lines 39 to 42, the alt field contains a placeholder "Alt for Generated
static Image..." which must be replaced with a meaningful, task-focused
description of the image content or set to an empty string if the image is
purely decorative per our accessibility policy; update the alt value accordingly
(keeping YAML string quoting/format), and repeat this change across the other 52
files matched by recipes/civictheme_content_generated_static/content/media/*.yml
so no placeholder alt strings remain.

Comment on lines +13 to +15
uid:
-
target_id: 0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Assign the media owner to an actual user

Setting uid to 0 makes the media item owned by the anonymous user, but there is no corresponding user entity to reference. During import this leaves the owner unset, and downstream code that expects a real UserInterface will fail or fall back to the current request user. Please point the media to a real user (typically user 1 in default content).

   uid:
     -
-      target_id: 0
+      target_id: 1
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
uid:
-
target_id: 0
uid:
-
target_id: 1
🤖 Prompt for AI Agents
In
recipes/civictheme_content_generated_static/content/media/59d72cfa-f37d-4689-99e8-cc68f387fbb9.yml
around lines 13-15 the media uid is set to 0 which points to the
anonymous/nonexistent user; change the uid mapping to reference a real user
(commonly user id 1) so the media owner is a valid User entity (e.g., replace
target_id: 0 with target_id: 1 or another existing user id) and verify that the
referenced user exists in the import set.

Comment on lines +20 to +22
-
value: 1758892277
revision_translation_affected:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Created timestamp is in the future

The created value 1758892277 resolves to a date in late October 2025, which is after today (September 29, 2025). On install this media item will appear as if it was created in the future, skewing any ordering or date displays that rely on created. Please update the timestamp to a past value that matches when the content should appear to have been authored.

🤖 Prompt for AI Agents
In
recipes/civictheme_content_generated_static/content/media/6e26b476-a047-4547-bf86-2c73dd48f843.yml
around lines 20-22 the created timestamp value 1758892277 is in the future;
update that numeric Unix timestamp to a past Unix timestamp that reflects the
actual authored/created date you want this media item to show (i.e., replace
1758892277 with a timestamp earlier than the current date so ordering and
displays are correct).

Comment on lines +13 to +15
uid:
-
target_id: 0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

🧩 Analysis chain

Media owner is anonymous (uid: 0) — confirm policy or set to editorial owner.

Some installs disallow media owned by uid 0. Prefer a real editorial/account owner to avoid workflow/permissions surprises.

Run to see all media set to uid 0:


🏁 Script executed:

#!/usr/bin/env bash
rg -nP '^\s+target_id:\s*0\b' recipes/civictheme_content_generated_static/content/media

Length of output: 8469


🏁 Script executed:

#!/usr/bin/env bash
rg -nP '^\s+target_id:\s*0\b' recipes/civictheme_content_generated_static/content/media | wc -l

Length of output: 2


Set media owner in generated static YAML from uid 0 to a valid editorial user. 70 media files under recipes/civictheme_content_generated_static/content/media are currently owned by uid 0 (anonymous), which many installs disallow—update the generator or post-processing to emit a real editorial user id.

🤖 Prompt for AI Agents
In
recipes/civictheme_content_generated_static/content/media/9fa66811-896b-409a-bbd8-0b0adbb16da4.yml
around lines 13–15 the media owner is emitted as uid: - target_id: 0
(anonymous); update the generator or a post-processing step so it emits a valid
editorial user id instead of 0: change the generator logic to resolve a
configured default editorial UID (or lookup a known editorial username and use
its id), ensure the YAML writes that numeric id (not 0), make the default
configurable via env/setting, and add a migration/test to validate no media
files are exported with target_id: 0.

Comment on lines +13 to +15
uid:
-
target_id: 0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Ensure the media owner references a valid user entity.
Line 15 sets uid.target_id to 0, but Drupal treats the owner field as an entity reference and expects a real user record. During recipe import this can fail validation (user 0 doesn’t exist) or fall back to an unintended owner. Please point the media item at an actual user account (e.g., user 1) and add the corresponding _meta.depends entry so the dependency graph is satisfied.

🤖 Prompt for AI Agents
In
recipes/civictheme_content_generated_static/content/media/bf0b24f1-7173-49a1-b1f3-e5ed83b6a216.yml
around lines 13 to 15, the media item's uid.target_id is set to 0 which is not a
valid user entity; change uid.target_id to a real user id (e.g., 1) and
add/update the _meta.depends section to include the corresponding user entity so
the import dependency graph references that user record.

Comment on lines +1 to +6
_meta:
version: '1.0'
entity_type: node
uuid: 163433db-da0c-4cbf-ac40-266b3b29228c
bundle: civictheme_page
default_langcode: en
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Repo‑wide sanity check for referenced UUIDs, empty text formats, and uid=0 usage.

Run this to validate that all referenced entities exist, detect empty text formats, very long aliases, and content owned by uid 0:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

root="recipes/civictheme_content_generated_static"
# 1) Collect defined UUIDs.
python - <<'PY'
import re, pathlib, sys
defined=set(); referenced=set(); aliases=[]
uid0=[]
fmt_empty=[]
for p in pathlib.Path(".").rglob("recipes/civictheme_content_generated_static/**/*.yml"):
    s=p.read_text(encoding="utf-8", errors="ignore")
    for m in re.finditer(r'^\s*uuid:\s*([0-9a-f-]{36})\s*$', s, re.M):
        defined.add(m.group(1))
    for m in re.finditer(r'^\s*depends:\s*\n((?:^\s{2,}[0-9a-f-]{36}:\s*\w+\s*\n)+)', s, re.M):
        for k in re.findall(r'^\s{2,}([0-9a-f-]{36}):', m.group(1), re.M):
            referenced.add(k)
    for m in re.finditer(r'^\s*entity:\s*([0-9a-f-]{36})\s*$', s, re.M):
        referenced.add(m.group(1))
    for m in re.finditer(r'^\s*alias:\s*(.+)$', s, re.M):
        alias=m.group(1).strip().strip("'\"")
        aliases.append((str(p), alias, len(alias)))
    if re.search(r'^\s*target_id:\s*0\s*$', s, re.M):
        uid0.append(str(p))
    for m in re.finditer(r'^\s*format:\s*([\'"]{0,1})\s*\1\s*$', s, re.M):
        fmt_empty.append(str(p))
missing = sorted(referenced - defined)
print("# Missing referenced UUIDs:" if missing else "# No missing referenced UUIDs found.")
for u in missing: print(u)
long_alias=[x for x in aliases if x[2] > 240]
print("\n# Aliases longer than 240 chars:" if long_alias else "\n# No long aliases >240 chars.")
for f,a,n in long_alias: print(f"{n:3d} {f} :: {a}")
print("\n# Files with uid target_id: 0:" if uid0 else "\n# No uid:0 occurrences.")
for f in sorted(set(uid0)): print(f)
print("\n# Files with empty text 'format':" if fmt_empty else "\n# No empty text formats found.")
for f in sorted(set(fmt_empty)): print(f)
PY

Length of output: 23253


Fix content ownership and text formats in generated YAML files

  • No missing referenced UUIDs and no aliases over 240 chars.
  • Multiple files flagged with target_id: 0; update these to a valid non-zero uid.
  • Multiple node files have empty format; assign an appropriate text format.
    (See script output for full file list.)
🤖 Prompt for AI Agents
In
recipes/civictheme_content_generated_static/content/node/163433db-da0c-4cbf-ac40-266b3b29228c.yml
around lines 1 to 6, the generated YAML may contain missing referenced UUIDs,
aliases longer than 240 chars, fields with target_id: 0, and empty text format
values; update the file to replace any missing or invalid referenced UUIDs with
valid existing UUIDs (or remove invalid references), shorten or remove aliases
that exceed 240 characters, change any target_id: 0 entries to an appropriate
non-zero user ID or reference ID used in your dataset, and set empty format
fields to a valid text format (e.g., basic_html or full_html) consistent with
your site configuration so the node imports without errors.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
.gitignore (2)

66-71: Keep recipes/ present even if exceptions are removed.

Add an explicit allow for a placeholder to avoid the directory disappearing when none of the whitelisted subdirs exist.

Apply:

 /recipes/*
+!/recipes/.gitkeep
 !/recipes/civictheme_content_generated_static/
 !/recipes/civictheme_drupal_cms_preinstall/
 !/recipes/civictheme_drupal_cms_starter/
 !/recipes/civictheme_starter/

Also commit an empty file at recipes/.gitkeep.


66-71: Optional: future‑proof exceptions with a single glob.

If policy is to track all CivicTheme recipes, a single pattern reduces maintenance.

Alternative:

-/recipes/*
-!/recipes/civictheme_content_generated_static/
-!/recipes/civictheme_drupal_cms_preinstall/
-!/recipes/civictheme_drupal_cms_starter/
-!/recipes/civictheme_starter/
+/recipes/*
+!/recipes/civictheme_*/
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 94f27f3 and c304f62.

📒 Files selected for processing (2)
  • .gitignore (1 hunks)
  • recipes/.gitignore (0 hunks)
💤 Files with no reviewable changes (1)
  • recipes/.gitignore
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build-and-push
  • GitHub Check: build-and-push
  • GitHub Check: commit

Comment on lines +66 to +71
# Ignore recipes directory except specific subdirectories
/recipes/*
!/recipes/civictheme_content_generated_static/
!/recipes/civictheme_drupal_cms_preinstall/
!/recipes/civictheme_drupal_cms_starter/
!/recipes/civictheme_starter/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

🧩 Analysis chain

Patterns/order look correct; verify behavior on real paths.

The anchored ignore and explicit exceptions for recipe subdirs are sound. Recommend verifying with git to ensure only the intended paths are tracked.

Run:


🏁 Script executed:

#!/bin/bash
# List files under recipes and show which ones are ignored vs tracked.
fd -H . recipes -t f -0 | xargs -0 -I{} bash -lc 'git check-ignore -v "{}" || echo "TRACKED: {}"'

Length of output: 51807


Remove tracked recipe files from index and adjust ignore patterns
.gitignore entries correctly ignore /recipes/* and unignore the four subdirectories, but existing files remain tracked and children aren’t re‐included by the current exceptions. To apply the ignore rules:

  • Run git rm -r --cached recipes to untrack all recipe files.
  • Commit the updated .gitignore.
  • Add back only desired directories, e.g. include content by changing
    !/recipes/civictheme_content_generated_static/
    to
    !/recipes/civictheme_content_generated_static/**
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Ignore recipes directory except specific subdirectories
/recipes/*
!/recipes/civictheme_content_generated_static/
!/recipes/civictheme_drupal_cms_preinstall/
!/recipes/civictheme_drupal_cms_starter/
!/recipes/civictheme_starter/
# Ignore recipes directory except specific subdirectories
/recipes/*
!/recipes/civictheme_content_generated_static/**
!/recipes/civictheme_drupal_cms_preinstall/
!/recipes/civictheme_drupal_cms_starter/
!/recipes/civictheme_starter/
🤖 Prompt for AI Agents
.gitignore around lines 66 to 71: the repository currently has /recipes/*
ignored with exceptions for four subdirectories, but files under recipes are
already tracked so the ignore rules have no effect and the current exceptions
don't re-include children; to fix, remove tracked recipe files from the index
(untrack the whole recipes tree), commit the updated .gitignore, then re-add
only the desired directories or files you want tracked (or adjust the exceptions
to re-include children explicitly) so Git tracks only those allowed subpaths.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c304f62 and eb7cac8.

📒 Files selected for processing (1)
  • recipes/civictheme_content_generated_static/composer.json (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build-and-push
  • GitHub Check: build-and-push
  • GitHub Check: commit

{
"name": "drupal/civictheme_content_generated_static",
"description": "Install civictheme generated static content for visual comparison",
"type": "recipe",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Composer package type must be drupal-recipe.

Drupal’s recipe tooling only recognizes packages with "type": "drupal-recipe". Leaving this as "recipe" prevents Composer (and the core recipe-unpack plugin) from detecting and unpacking the recipe, so it will never be applied correctly. Please switch the type to drupal-recipe.(project.pages.drupalcode.org)

Apply this diff:

-    "type": "recipe",
+    "type": "drupal-recipe",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"type": "recipe",
"type": "drupal-recipe",
🤖 Prompt for AI Agents
In recipes/civictheme_content_generated_static/composer.json around line 4 the
package "type" is set to "recipe" which prevents Drupal's recipe tooling from
detecting and unpacking it; change the value to "drupal-recipe" so Composer and
the core recipe-unpack plugin recognize and apply the recipe correctly, updating
the JSON entry for "type" accordingly.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between eb7cac8 and ab903c0.

📒 Files selected for processing (1)
  • .ahoy.yml (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build-and-push
  • GitHub Check: build-and-push
  • GitHub Check: commit

Comment on lines +131 to +134
provision-cms:
usage: Provision a site with Drupal CMS profile.
cmd: ahoy cli "DRUPAL_VERSION=CMS DRUPAL_PROFILE=/app/recipes/drupal_cms_starter ./scripts/drevops/provision.sh"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

CMS recipe path likely incorrect; confirm preinstall sequencing to avoid layout bug

  • Path points to /app/recipes/drupal_cms_starter, but PR describes recipe as civictheme_drupal_cms_starter. Also, the helper recipe civictheme_drupal_cms_preinstall is required “to avoid a missing layout bug,” yet it isn’t invoked here.

Proposed fix (minimum path correction):

-    cmd: ahoy cli "DRUPAL_VERSION=CMS DRUPAL_PROFILE=/app/recipes/drupal_cms_starter ./scripts/drevops/provision.sh"
+    cmd: ahoy cli "DRUPAL_VERSION=CMS DRUPAL_PROFILE=/app/recipes/civictheme_drupal_cms_starter ./scripts/drevops/provision.sh"

If preinstall must run before the CMS starter, either:

  • encode that dependency inside the CMS starter recipe (preferred), or
  • introduce a dedicated Ahoy command that triggers both in sequence (only if provision.sh supports it), e.g. setting an env var that the script reads to install multiple recipes in order.

Quick checks:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Check expected recipe directories exist:"
for d in recipes/civictheme_drupal_cms_starter recipes/drupal_cms_starter recipes/civictheme_starter recipes/civictheme_drupal_cms_preinstall; do
  if [ -d "$d" ]; then echo "FOUND: $d"; else echo "MISSING: $d"; fi
done

echo
echo "Inspect provision.sh for accepted DRUPAL_VERSION values and recipe handling:"
rg -n --color=never '\bDRUPAL_VERSION\b' scripts/drevops/provision.sh || true
rg -n --color=never '\bCMS\b' scripts/drevops/provision.sh || true
rg -n --color=never '\bDRUPAL_PROFILE\b' scripts/drevops/provision.sh || true

Length of output: 516


Fix CMS recipe path and invoke preinstall step

  • In .ahoy.yml (lines 131–134), update the profile path:
- DRUPAL_PROFILE=/app/recipes/drupal_cms_starter
+ DRUPAL_PROFILE=/app/recipes/civictheme_drupal_cms_starter
  • Ensure civictheme_drupal_cms_preinstall runs before the CMS starter—either embed it in the starter recipe or add an Ahoy command that runs both in sequence.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
provision-cms:
usage: Provision a site with Drupal CMS profile.
cmd: ahoy cli "DRUPAL_VERSION=CMS DRUPAL_PROFILE=/app/recipes/drupal_cms_starter ./scripts/drevops/provision.sh"
provision-cms:
usage: Provision a site with Drupal CMS profile.
cmd: ahoy cli "DRUPAL_VERSION=CMS DRUPAL_PROFILE=/app/recipes/civictheme_drupal_cms_starter ./scripts/drevops/provision.sh"
🤖 Prompt for AI Agents
In .ahoy.yml around lines 131 to 134, the Drupal CMS profile path points to the
starter recipe only and does not run the required
civictheme_drupal_cms_preinstall step first; update the DRUPAL_PROFILE path to
the correct preinstall-aware profile (or ensure the starter recipe includes/refs
civictheme_drupal_cms_preinstall), and modify the provision-cms cmd to run the
preinstall step before the starter (either by embedding the preinstall into the
starter recipe or chaining commands so civictheme_drupal_cms_preinstall executes
prior to ./scripts/drevops/provision.sh).

Comment on lines +135 to +137
provision-11:
usage: Provision a site with CivicTheme starter for Drupal 11.
cmd: ahoy cli "DRUPAL_PROFILE=/app/recipes/civictheme_starter DRUPAL_VERSION=11 ./scripts/drevops/provision.sh"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

🧩 Analysis chain

LGTM for Drupal 11 starter command

The command aligns with the civictheme_starter path and expected envs. Consider a quick sanity check that the recipe directory exists and provision.sh recognizes DRUPAL_VERSION=11.

Run:


🏁 Script executed:

#!/bin/bash
[ -d recipes/civictheme_starter ] && echo "FOUND: recipes/civictheme_starter" || echo "MISSING: recipes/civictheme_starter"
rg -n --color=never '\bDRUPAL_VERSION\b' scripts/drevops/provision.sh | rg -n --color=never '11|case|if' || true

Length of output: 33


Add Drupal 11 handling to provision.sh The recipes/civictheme_starter directory exists, but scripts/drevops/provision.sh doesn’t reference DRUPAL_VERSION; please implement explicit support for version 11.

🤖 Prompt for AI Agents
In .ahoy.yml around lines 135-137: the ahoy command exports DRUPAL_VERSION=11
but scripts/drevops/provision.sh doesn’t consume it; update provision.sh to read
the DRUPAL_VERSION env var (with a sensible default), add a branch/case for
version "11" that selects the correct recipe/profile path and any
Drupal_core/composer/drush flags needed for Drupal 11, and ensure downstream
commands (composer create/project, drush/site-install, or recipe copy) use that
chosen version/profile; validate the script exits with a clear error when an
unsupported DRUPAL_VERSION is provided.

ignore: /^content\/.*/
tags:
only: /.*/
- build-drupal-cms:
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First go at testing Drupal CMS with CivicTheme

drush config-set node.settings use_admin_theme 1
fi

if [[ "$DRUPAL_PROFILE" != /app/recipes/* ]] || [[ "$DRUPAL_PROFILE" != "/app/recipes/civictheme_starter" ]]; then
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unsure if we need this.. will check to see if i can remove this conditional.

else
fi

if [ "${DRUPAL_VERSION:-}" != 'CMS' ]; then
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have own admin theme in Drupal CMS.

@@ -23,8 +23,9 @@ fi

if [ "${CIVICTHEME_GENERATED_CONTENT_CREATE_SKIP:-}" != "1" ]; then
echo " > Generate test content."
GENERATED_CONTENT_CREATE=1 drush pm-enable cs_generated_content

drush recipe /app/recipes/civictheme_content_generated_static
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is contentious - but for now I want standardised generated content so we can visual regression (in a follow up PR).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've tested visual regression tool against this release to make sure everything looks the same visually

description: 'Install civicthemes, module dependencies, required configuration, and basic block types.'
type: 'Site'
recipes:
- core/recipes/basic_block_type
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have replaced standard profile - so we are installing with standard profile recipe components that we want.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ab903c0 and 8664c4a.

📒 Files selected for processing (1)
  • .circleci/config.yml (2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: build-and-push
  • GitHub Check: build-and-push
  • GitHub Check: commit
🔇 Additional comments (1)
.circleci/config.yml (1)

635-647: Validate workflow scope and dependencies for the new job.

  • Filters mirror other build jobs (ignore content/*, allow all tags) — OK. Confirm you intend to run CMS builds on every branch, not just develop/release/hotfix like content jobs.
  • If CMS coverage must be green before deploy, add build-drupal-cms to the deploy/deploy_artifact requires lists; otherwise current setup won’t gate deploys on the CMS path.

No code change required; please confirm intent.

@richardgaunt richardgaunt changed the title Feature/add site install recipes Added site install recipes. Sep 29, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8664c4a and 64ec668.

📒 Files selected for processing (5)
  • .circleci/config.yml (2 hunks)
  • .docker/cli.dockerfile (1 hunks)
  • .docker/cli.onlytheme.dockerfile (1 hunks)
  • .docker/cli.sibling.dockerfile (1 hunks)
  • docker-compose.yml (1 hunks)
🧰 Additional context used
🪛 GitHub Actions: Build and Push civictheme-monorepo-drupal to Quant Cloud
.docker/cli.dockerfile

[error] 60-60: COPY recipes /app/recipes failed: failed to build, checksum error: '/recipes' not found in build context.


[warning] 25-25: SecretsUsedInArgOrEnv: Do not use ARG or ENV for sensitive data (ARG "GITHUB_TOKEN").


[warning] 26-26: SecretsUsedInArgOrEnv: Do not use ARG or ENV for sensitive data (ENV "GITHUB_TOKEN").

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: commit
🔇 Additional comments (6)
.circleci/config.yml (2)

387-393: Path issue already flagged in previous review.

The DRUPAL_PROFILE path has already been identified as incorrect in a previous review. The path should reference recipes/civictheme_drupal_cms_starter based on the PR's recipe additions.


635-647: LGTM!

The workflow step correctly wires the new build-drupal-cms job with appropriate dependencies and branch/tag filters.

docker-compose.yml (1)

66-68: LGTM!

The addition of DRUPAL_VERSION and DRUPAL_PROFILE environment variables with sensible defaults (Drupal 11 and standard profile) provides flexibility for different Drupal configurations across the project.

.docker/cli.sibling.dockerfile (1)

59-60: LGTM!

The addition of the recipes directory copy step and updated comment correctly reflect the expanded build scope to include recipe-driven provisioning.

.docker/cli.onlytheme.dockerfile (1)

58-59: LGTM!

The recipes directory is now properly copied into the container, consistent with the other Dockerfile variants in this PR.

.docker/cli.dockerfile (1)

25-26: Note: Pre-existing GITHUB_TOKEN warnings.

The pipeline warnings about GITHUB_TOKEN in ARG/ENV are pre-existing and not introduced by this PR.

@richardgaunt richardgaunt added the State: Needs review Pull requests needs a review from assigned developers label Oct 1, 2025
@github-actions github-actions bot added State: CONFLICT and removed State: Needs review Pull requests needs a review from assigned developers labels Oct 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants