From 24ccd2d205ded8fc55b5ef55440557dae52c4d6a Mon Sep 17 00:00:00 2001 From: Alex Skrypnyk Date: Fri, 3 Nov 2023 09:32:01 +1100 Subject: [PATCH] Updated to DrevOps 1.17 --- .ahoy.local.example.yml | 14 + .ahoy.yml | 193 +++--- .circleci/config.yml | 232 ++++--- .docker/Dockerfile.cli | 120 ---- .docker/Dockerfile.cli.onlytheme | 107 ---- .docker/Dockerfile.cli.sibling | 108 ---- .docker/cli.dockerfile | 118 ++++ .docker/cli.onlytheme.dockerfile | 105 ++++ .docker/cli.sibling.dockerfile | 107 ++++ ...{Dockerfile.mariadb => mariadb.dockerfile} | 7 +- ...e.nginx-drupal => nginx-drupal.dockerfile} | 8 +- .docker/{Dockerfile.php => php.dockerfile} | 3 + .dockerignore | 16 +- .editorconfig | 2 +- .env | 228 +++---- .env.local.default | 52 ++ .github/PULL_REQUEST_TEMPLATE.md | 5 +- .../.github => .github}/release-drafter.yml | 0 ...r-assign.yml => auto-assign-pr-author.yml} | 2 +- .github/workflows/dispatch-webhook-lagoon.yml | 2 +- .github/workflows/release.yml | 22 + .github/workflows/storybook-tests.yml | 6 +- .gitignore | 85 ++- .gitignore.deployment | 48 +- .lagoon.env.master => .lagoon.env.main | 0 .lagoon.yml | 119 +--- .twig_cs.php | 14 + CI.md | 11 - README.md | 62 +- behat.yml | 54 +- composer.json | 100 +-- composer.lock | 115 +++- config/default/.htaccess | 27 + default.ahoy.local.yml | 10 - default.env.local | 16 - ...yml => docker-compose.override.default.yml | 0 docker-compose.yml | 63 +- docs/README.md | 7 + docs/ci.md | 24 + DEPLOYMENT.md => docs/deployment.md | 0 DEVELOPMENT.md => docs/development.md | 19 +- FAQs.md => docs/faqs.md | 104 ++-- docs/onboarding.md | 161 +++++ RELEASING.md => docs/releasing.md | 27 +- TESTING.md => docs/testing.md | 33 +- drush/sites/lagoon.site.yml | 8 + phpcs.xml | 43 +- phpmd.xml | 28 + phpstan.neon | 54 ++ phpunit.xml | 112 ++++ renovate.json | 19 +- scripts/.aspell.en.pws | 4 +- scripts/composer/DrupalSettings.php | 249 -------- scripts/composer/ScriptHandler.php | 122 ++-- ...pal-install-site-1-enable-theme-modules.sh | 46 -- ...drupal-install-site-2-activate-subtheme.sh | 45 -- .../drupal-install-site-3-enable-modules.sh | 28 - ...drupal-install-site-4-provision-content.sh | 36 -- .../provision-10-enable-theme-modules.sh | 46 ++ .../custom/provision-20-activate-subtheme.sh | 45 ++ scripts/custom/provision-30-enable-modules.sh | 28 + .../custom/provision-40-provision-content.sh | 36 ++ scripts/drevops/README.md | 225 ------- scripts/drevops/build.sh | 204 +++--- scripts/drevops/clean.sh | 20 - scripts/drevops/copy-db-acquia.sh | 129 ---- scripts/drevops/copy-files-acquia.sh | 126 ---- scripts/drevops/deploy-artifact.sh | 83 +-- scripts/drevops/deploy-docker.sh | 78 ++- scripts/drevops/deploy-lagoon.sh | 183 +++--- scripts/drevops/deploy-webhook.sh | 30 +- scripts/drevops/deploy.sh | 118 ++-- scripts/drevops/docker-login.sh | 30 - scripts/drevops/docker-restore-image.sh | 39 -- scripts/drevops/doctor.sh | 260 ++++---- scripts/drevops/download-db-acquia.sh | 115 ++-- scripts/drevops/download-db-curl.sh | 22 +- .../drevops/download-db-docker-registry.sh | 49 ++ scripts/drevops/download-db-ftp.sh | 32 +- scripts/drevops/download-db-image.sh | 33 - scripts/drevops/download-db-lagoon.sh | 100 +-- scripts/drevops/download-db.sh | 109 ++-- scripts/drevops/drupal-export-db-image.sh | 63 -- scripts/drevops/drupal-export-db.sh | 41 -- scripts/drevops/drupal-import-db.sh | 36 -- scripts/drevops/drupal-install-site.sh | 282 --------- scripts/drevops/drupal-login.sh | 28 - scripts/drevops/drupal-logout.sh | 23 - scripts/drevops/drupal-sanitize-db.sh | 60 -- scripts/drevops/export-code.sh | 21 - scripts/drevops/export-db-docker.sh | 49 +- scripts/drevops/export-db-file.sh | 46 +- scripts/drevops/export-db.sh | 45 ++ scripts/drevops/github-labels.sh | 215 ++++--- scripts/drevops/info.sh | 61 +- scripts/drevops/lint.sh | 70 --- scripts/drevops/login-docker.sh | 42 ++ scripts/drevops/login.sh | 33 + scripts/drevops/logout.sh | 21 + scripts/drevops/mirror-code.sh | 103 +++ scripts/drevops/notify-deployment-email.php | 60 -- scripts/drevops/notify-deployment-github.sh | 112 ---- scripts/drevops/notify-deployment-jira.sh | 181 ------ scripts/drevops/notify-deployment-newrelic.sh | 80 --- scripts/drevops/notify-deployment.php | 58 -- scripts/drevops/notify-email.sh | 124 ++++ scripts/drevops/notify-github.sh | 118 ++++ scripts/drevops/notify-jira.sh | 191 ++++++ scripts/drevops/notify-newrelic.sh | 97 +++ scripts/drevops/notify.sh | 73 +++ scripts/drevops/provision-sanitize-db.sh | 68 ++ scripts/drevops/provision.sh | 322 ++++++++++ scripts/drevops/purge-cache-acquia.sh | 170 ----- scripts/drevops/reset.sh | 57 +- scripts/drevops/restore-docker-image.sh | 51 ++ scripts/drevops/task-copy-db-acquia.sh | 102 +-- scripts/drevops/task-copy-files-acquia.sh | 100 +-- scripts/drevops/task-custom-lagoon.sh | 58 +- scripts/drevops/task-purge-cache-acquia.sh | 122 ++-- scripts/drevops/test.sh | 171 ----- .../drevops/{update.sh => update-drevops.sh} | 17 +- scripts/lint-spelling.sh | 4 +- scripts/lint-theme-config.sh | 2 +- scripts/test-tooling.sh | 9 +- scripts/update-default-content.sh | 2 +- scripts/update-theme-config.sh | 2 +- tests/bats/.gitignore | 2 + tests/bats/_helper.bash | 516 +-------------- tests/bats/_helper_civictheme.bash | 71 --- tests/bats/_mock.bash | 216 ------- tests/bats/assets.bats | 2 +- tests/bats/assets_demo_custom.bats | 4 +- tests/bats/assets_demo_sibling.bats | 2 +- tests/bats/assets_library.bats | 2 +- tests/bats/helpers.bats | 588 ------------------ tests/bats/mock.bats | 40 -- tests/bats/package-lock.json | 52 ++ tests/bats/package.json | 9 + tests/behat/features/homepage.feature | 6 +- tests/behat/features/login.feature | 6 +- .../assets/fonts => tests/phpunit}/.gitkeep | 0 .../{unit => }/AddPhpcsExclusionsUnitTest.php | 2 +- tests/phpunit/CircleCiConfigTest.php | 176 ++++++ ...CivicthemeCreateSubthemeScriptUnitTest.php | 24 +- tests/phpunit/Drupal/DatabaseSettingsTest.php | 74 +++ .../Drupal/EnvironmentSettingsTest.php | 521 ++++++++++++++++ tests/phpunit/Drupal/SettingsTestCase.php | 351 +++++++++++ .../phpunit/Drupal/SwitchableSettingsTest.php | 202 ++++++ .../ExtractCssColorsToCsvScriptUnitTest.php | 2 +- .../phpunit/{unit => }/ScriptUnitTestBase.php | 0 {docroot => web}/.editorconfig | 0 {docroot => web}/.eslintignore | 0 {docroot => web}/.gitattributes | 0 {docroot => web}/.htaccess | 2 +- {docroot => web}/autoload.php | 3 +- {docroot => web}/index.php | 0 .../civictheme_admin.info.yml | 0 .../civictheme_admin.libraries.yml | 0 .../civictheme_admin/civictheme_admin.module | 0 .../custom/civictheme_admin/composer.json | 0 .../css/claro-node-form-overrides.css | 0 .../custom/civictheme_content/README.md | 0 .../civictheme_content.info.yml | 0 .../civictheme_content.install | 0 .../civictheme_content.module | 0 .../custom/civictheme_content/composer.json | 0 .../civictheme_content_corporate.info.yml | 0 .../civictheme_content_corporate.module | 0 ...victheme_content_corporate.post_update.php | 0 .../block.block.civictheme_footer_menu_1.yml | 0 .../block.block.civictheme_footer_menu_2.yml | 0 .../block.block.civictheme_footer_menu_3.yml | 0 .../block.block.civictheme_footer_menu_4.yml | 0 .../config/optional/civictheme.settings.yml | 0 .../286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml | 0 .../50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml | 0 .../5508dc51-1cf8-4577-9038-b572fbd698ae.yml | 0 .../5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml | 0 .../7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml | 0 .../b7f36176-620f-4178-aadd-9b448c610986.yml | 0 .../d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml | 0 .../007b3ae2-abf2-4433-a24b-ca8ba79f0faa.yml | 0 .../01a0a6a5-a850-41d8-92aa-ae9a8d74c246.yml | 0 .../053b2b9a-5749-46ce-bb22-9099a6834a06.yml | 0 .../12e3b76e-5e63-43d2-bd99-6827a8c9ab2a.yml | 0 .../191f9e3a-a6fb-4bbd-87af-6e3bba478137.yml | 0 .../1f1a4e3d-78a0-45af-a8c8-8eb593fc6268.yml | 0 .../26e57960-218e-475d-a8c6-dc8479949be4.yml | 0 .../26e7545a-e4c1-428a-b26e-426503dfd65b.yml | 0 .../2bc80ea6-0298-425d-b208-fbdfb28c8f4f.yml | 0 .../2d198020-d27e-4282-b716-cc436c2dd893.yml | 0 .../360f9b1c-e7b9-4760-a308-a94d04bad54a.yml | 0 .../3bea3131-85bd-4eac-aeaf-702733630f62.yml | 0 .../41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml | 0 .../4ddb8852-8fcb-4b78-8e8e-72c66006acae.yml | 0 .../587355c9-c76b-459d-adf8-8829c2fe4181.yml | 0 .../82f5b00f-1b04-4dfe-9e50-c466bd3fedd2.yml | 0 .../883ede75-67e4-43c6-9945-9818dc31b543.yml | 0 .../8883d22c-effe-45ae-b13e-9fd5e7df6481.yml | 0 .../8e3e4ca6-a85a-4e67-a550-58ebde6a2cb9.yml | 0 .../933037cf-e8cb-46a0-8132-4668036e90a0.yml | 0 .../93b3fe72-f6fe-4608-b904-cdf6d8037397.yml | 0 .../9f9718c6-9f12-4e44-be68-cf82e94ab271.yml | 0 .../a6e06ca7-a003-4089-9a92-f8716ed8a210.yml | 0 .../a804e5e0-4ede-47fd-8307-08d1a18c7455.yml | 0 .../a8235202-f85a-48b8-b90c-380ea5587f96.yml | 0 .../ae7d79af-9aa4-455d-a415-26191e3ba7c4.yml | 0 .../af42e607-0099-4be4-b695-05795ac1a1e2.yml | 0 .../b1778031-4905-4f37-a8bd-5652f0382822.yml | 0 .../b19ce70e-881e-422f-b03d-70c9677b0892.yml | 0 .../b44c9271-2aab-432e-bac7-f228b60e9c72.yml | 0 .../bde928ff-d995-4831-bd0e-ad03e08e48aa.yml | 0 .../c77ca2da-b928-4f98-a39d-9b56b646bcd6.yml | 0 .../file/civictheme_demo_background_1.png | Bin .../file/corporate_banner_background.png | Bin .../content/file/corporate_bottles.jpg | Bin .../content/file/corporate_clown-fish_2.jpg | Bin .../content/file/corporate_clown-fish_3.jpg | Bin .../content/file/corporate_document.pdf | Bin .../content/file/corporate_dsd.jpg | Bin .../file/corporate_fire-silhouettes.jpg | Bin .../content/file/corporate_fire.jpg | Bin .../content/file/corporate_fish-in-water.jpg | Bin .../content/file/corporate_fish-plastic.jpg | Bin .../content/file/corporate_glacier.jpg | Bin .../file/corporate_great-barrier-reef.jpg | Bin .../content/file/corporate_iceberg.jpg | Bin .../content/file/corporate_icon_download.svg | 0 .../content/file/corporate_icon_facebook.svg | 0 .../content/file/corporate_icon_linkedin.svg | 0 .../content/file/corporate_icon_twitter.svg | 0 .../content/file/corporate_image.jpg | Bin .../content/file/corporate_koala.jpg | Bin .../content/file/corporate_microscope.jpg | Bin .../content/file/corporate_power-plant.jpg | Bin .../content/file/corporate_rainforest.jpg | Bin .../file/corporate_science-beakers.jpg | Bin .../content/file/corporate_scientist.jpg | Bin .../content/file/corporate_seals.jpg | Bin .../content/file/corporate_seedling.jpg | Bin .../content/file/corporate_solar-panels.jpg | Bin .../content/file/corporate_starfish.jpg | Bin .../content/file/corporate_tree.jpg | Bin .../content/file/corporate_turtle.jpg | Bin .../file/corporate_twelve-apostles.jpg | Bin .../content/file/corporate_underwater.jpg | Bin .../content/file/corporate_windfarm.jpg | Bin .../content/file/corporate_woman-flowers.jpg | Bin .../content/file/corporate_woman.jpg | Bin .../d091e99a-55b9-4f80-80c1-b188186537da.yml | 0 .../d415ede9-ef24-420d-bb6d-7ccfc40b4694.yml | 0 .../dca5f3cf-f9a1-4f56-a0ed-9e06dd9cc320.yml | 0 .../de13d35d-8d49-4a7c-9ea7-8f21b0964176.yml | 0 .../e153aace-9481-405a-b544-87a40034bb0a.yml | 0 .../e9b4a5d5-ef8d-4cdb-bb87-834f46c7ca0f.yml | 0 .../ed8e9a4c-f7bf-4bd1-905f-450330b22859.yml | 0 .../ee83d96e-d783-4db6-9149-3db4e9cab340.yml | 0 .../content/file/facebook.svg | 0 .../content/file/generic.png | Bin .../content/file/linkedin.svg | 0 .../content/file/twitter.svg | 0 .../00156c6c-d949-4382-b7d0-78d15fa49b38.yml | 0 .../04ee0921-1bea-4795-b670-3b0f75b17645.yml | 0 .../0eb512d0-d116-48f7-83bb-ae07c3eb2c91.yml | 0 .../1273590e-5a80-45ee-9172-0e1b9343ddb3.yml | 0 .../2283dfc9-d10f-40d6-8cf5-4a3a2d2ef158.yml | 0 .../26820d38-aabc-4c1d-a6df-09fa62a3fe8a.yml | 0 .../429966d5-50c7-433a-bdcf-5d58e1e6e21c.yml | 0 .../4729baf2-63ab-48e2-9c47-ce82acc1f0d1.yml | 0 .../485fc9fd-b6ce-4ff1-a0ac-88ea2fe7fdb9.yml | 0 .../48a4995f-75fc-4bb4-b43b-8dcd81f3f68b.yml | 0 .../6ce72705-bab7-4dce-9ca5-4a3ae097faa3.yml | 0 .../6d127a84-70f5-43d3-a0dc-ee2872d97c8b.yml | 0 .../6eb923f5-2fa8-49b1-ac4c-46d587ec25eb.yml | 0 .../7238591b-bca0-46bf-b6df-534a1fdb2ddf.yml | 0 .../78eb0cf4-882f-47e4-8607-1f254809e9e8.yml | 0 .../86c71cbb-5ab3-41f9-bf7c-f30cd426dbf0.yml | 0 .../87adbef4-9cbd-4c1a-b0d7-bca60377d755.yml | 0 .../8810505e-9c28-43b9-b019-a0a034701b3a.yml | 0 .../889585ce-c08e-4957-9c33-75025e910242.yml | 0 .../8c64e0b7-9541-4191-868c-42d5adeb2828.yml | 0 .../8f8df77d-5b85-48d9-a1f7-b85782d47a78.yml | 0 .../971cc0f7-9e06-4f64-b58b-32d68848d5b3.yml | 0 .../9dd16162-6e1b-43f7-821e-003f0711b0a9.yml | 0 .../a8b62c0c-3e6c-450b-93b4-df5956b87cce.yml | 0 .../ab44a2e7-acd4-4276-bf83-3c6fd3e71271.yml | 0 .../ba705a5b-91ca-4f48-9d82-feeabb645cff.yml | 0 .../bd746089-5c3c-4fb4-aab5-fe9f5cacc821.yml | 0 .../c66b84d0-bd69-4330-96d2-71e1ecddebf0.yml | 0 .../cde35fb7-b01d-4074-ba94-bb62303e27d9.yml | 0 .../d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml | 0 .../d862309a-96ab-4961-9e69-28ccc203a5ff.yml | 0 .../e0a78fef-3e3a-4b96-b303-974ac8fec445.yml | 0 .../e5c0b1c2-b993-40e6-a760-5a0f5565fe10.yml | 0 .../e7ab9bae-edec-4639-b196-9dece305235d.yml | 0 .../eb524ad3-657f-4287-bafd-7b76b3619831.yml | 0 .../ec6f5030-d733-45c9-bd47-50de3d053e5c.yml | 0 .../f06a9e48-e4bc-4e1d-9646-047d984c36ca.yml | 0 .../f9278a83-d921-4890-ad30-e0d3050ef74a.yml | 0 .../fcd683b6-ea34-4310-aedd-7731ff476cbc.yml | 0 .../0457b4f7-1a43-4719-8493-c1aa9d92464e.yml | 0 .../047776b6-e8cc-45e1-8798-c50ecca06bcb.yml | 0 .../058a0544-81c7-4312-baa0-fae4025ec5bf.yml | 0 .../0db77bba-adbf-472e-bbf3-cbe5baff553b.yml | 0 .../0f2b95c3-af99-44ae-b51c-14322d9d9fb8.yml | 0 .../2541114b-22fd-4fda-aa02-2999c9895777.yml | 0 .../30f111fc-59b1-490e-a535-5383420b55e8.yml | 0 .../36e960e5-0a31-4809-a04c-647084058466.yml | 0 .../416ade67-7806-49d2-84db-fc6cce4f1f2e.yml | 0 .../4777a693-bdae-43ce-9e09-c5ef60d56a88.yml | 0 .../4d1becca-390e-425a-82f1-7a837683aea7.yml | 0 .../59667b00-1356-476f-9323-5436bb5be692.yml | 0 .../84a103bd-a203-42a2-aa47-8087596b4159.yml | 0 .../871e1957-f44a-4adc-a6ae-d7bef561ad12.yml | 0 .../8b2fa8a0-ade0-48a1-a072-d545d36d9ebb.yml | 0 .../8cced355-c841-4e0f-a6b6-f59d801f6d0c.yml | 0 .../9635dce4-d427-4114-ac1c-7dc6d45a978f.yml | 0 .../a2107071-edef-49ed-8a22-e1a07d45ae2b.yml | 0 .../b3a3dda4-3901-4cc8-817a-91ecb1b74e2f.yml | 0 .../b718cfb0-071b-44e6-9d38-039e5e10152e.yml | 0 .../b90028d5-337e-4b40-8f15-898c4a2a1c2a.yml | 0 .../bde7a36d-4776-4a4e-a21c-c1562252ddde.yml | 0 .../d0a13a17-530e-4b39-a5f4-9067b3b88781.yml | 0 .../d55b5b63-3364-44fe-bab9-5135a43118b8.yml | 0 .../d9afa100-6d13-419f-85b0-961e7acdb6e1.yml | 0 .../dca3afe1-b9ab-468d-8b7a-f9ececeba2a7.yml | 0 .../de247e03-0ea1-4d32-bbb0-06aa34123279.yml | 0 .../ee89a67c-c256-479d-b85d-c2db725003a5.yml | 0 .../eeed004b-9d43-48fe-b99e-74289614ad56.yml | 0 .../f1f66752-e425-42a2-a966-09adc983b29c.yml | 0 .../f45bf798-cdf1-46fc-b27a-3fd6472fba25.yml | 0 .../ffcaaf1f-bcfa-458c-b938-5c1c1208a940.yml | 0 .../08cead14-37a7-476d-8526-4814867bdb76.yml | 0 .../0a840065-4343-4868-9004-61442d313eac.yml | 0 .../2da124a0-129a-4b03-9f02-dd33a90793b4.yml | 0 .../454edaba-477b-45fa-934d-1b2b2b7899fb.yml | 0 .../45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml | 0 .../51efffb7-e00c-48ee-a5a4-8eabb7c9e903.yml | 0 .../5c582abf-9d2b-4a03-a7b1-dd84e4cfedc9.yml | 0 .../64931832-7e31-4493-81b4-a2a46061dda3.yml | 0 .../6ec9411b-6148-420b-ab02-87466c42db1f.yml | 0 .../74076f33-5c1e-4b09-9522-bbafd6e43afb.yml | 0 .../7a35464b-da5b-4edb-a490-6bcd54339f29.yml | 0 .../853e999d-a302-4cc0-baeb-f419c91bcf3f.yml | 0 .../855f86ae-b6a9-477c-8827-6b13b5c8ff41.yml | 0 .../aa31c2e9-f0af-4e1b-9fde-088ec81403bb.yml | 0 .../c8ee30e2-85e5-42db-b27a-92e508eacd0c.yml | 0 .../c99ffbb4-3782-498c-9d69-23419e9643e1.yml | 0 .../ce6b14c7-f782-40c6-884d-47724566ec60.yml | 0 .../d044d201-6f40-41ed-bdbd-595bfa72cc4d.yml | 0 .../d073b4ba-18b3-49a2-97b6-b02cb22f1a40.yml | 0 .../e2401264-b563-4b62-9d77-b5c107909bf4.yml | 0 .../ef661701-2c8e-4ea4-b927-2d2ecad7617e.yml | 0 .../bb1443d2-3262-4f61-be2c-e9730424054f.yml | 0 .../d95f5188-650c-4dea-abcb-df8ea008919b.yml | 0 .../e1db1abb-7e92-482d-8acf-157b173885c2.yml | 0 .../civictheme_content_default.info.yml | 0 .../civictheme_content_default.module | 0 ...civictheme_content_default.post_update.php | 0 .../config/optional/civictheme.settings.yml | 0 .../286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml | 0 .../50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml | 0 .../5508dc51-1cf8-4577-9038-b572fbd698ae.yml | 0 .../5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml | 0 .../7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml | 0 .../b7f36176-620f-4178-aadd-9b448c610986.yml | 0 .../d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml | 0 .../044c817e-14ba-43ad-b98e-07f860d1bf1a.yml | 0 .../063ae3b8-fc10-4473-8b9d-675b50861e83.yml | 0 .../2803908c-77d8-460b-b084-3185c392797e.yml | 0 .../2d26321f-07ae-44be-9dfc-58566e94cfc8.yml | 0 .../33ec0e62-3317-435d-b1cb-1e42e42e3260.yml | 0 .../41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml | 0 .../4a5c5b53-bad3-4ac6-adb8-d07f3167bb28.yml | 0 .../4c54f9b2-ae04-442f-b830-4cbeed050d75.yml | 0 .../570c6899-92bc-4317-aa07-274a431d618f.yml | 0 .../content/file/Adopt the DIY approach.png | Bin .../Do it yourself - The DIY approach.png | Bin .../content/file/Facebook.svg | 0 .../content/file/Linkedin.svg | 0 .../file/Tried and tested components.png | Bin .../content/file/Twitter.svg | 0 .../a7807b15-8d13-4d42-9615-d7756db3a11d.yml | 0 .../bff45f89-9d22-4558-ae6e-81570c708bb6.yml | 0 .../c31b572d-b1d2-441b-a491-b373d6c54e2f.yml | 0 .../file/civictheme_demo_background_1.png | Bin .../file/demo_govcms-visual-white-paper.jpg | Bin .../content/file/demo_image.jpg | Bin .../file/demo_image_ricardo-esquivel.jpg | Bin .../content/file/demo_nature.jpg | Bin .../content/file/generic.png | Bin .../209291bc-81be-41c7-912c-70d695e9376c.yml | 0 .../2b8021df-e474-4b3a-8b91-62844aefe844.yml | 0 .../35a65b40-b6a0-428d-bce3-3bd7c918f84b.yml | 0 .../4c9975b0-77ca-4f82-95d0-3fb2a1122978.yml | 0 .../68d50fea-aae4-4dde-832c-b385ff9731e1.yml | 0 .../81cd5226-50b8-4d4b-ab47-7b9a783cce85.yml | 0 .../846a6a20-2767-4b7f-9f92-4bbe7ad15ac2.yml | 0 .../d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml | 0 .../e07cdb41-1bd4-463f-9e7c-126302b24740.yml | 0 .../e2b603ff-038b-4c31-bf8d-6e4eb7346b72.yml | 0 .../faa70cfa-88f0-49e7-81ed-9523560bb0d5.yml | 0 .../02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml | 0 .../082e6164-8c11-40e2-a127-8ae90a073db2.yml | 0 .../0985ec26-733f-4e36-959d-89bd54cb097e.yml | 0 .../0b391468-84ed-42dc-9709-a5da331f7984.yml | 0 .../0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml | 0 .../0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml | 0 .../0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml | 0 .../17e25154-b1ae-4a54-abdf-893b083126d9.yml | 0 .../180e120d-0755-466a-97d9-594b24fe120f.yml | 0 .../191d400b-79ec-4129-85a1-d02558ac1dce.yml | 0 .../196a91fb-589a-439b-addf-47226a877fba.yml | 0 .../199ccc90-1158-4d44-b970-7dfa63958962.yml | 0 .../1a52ef66-67f7-4774-9aca-22ade33f449f.yml | 0 .../1af42027-4063-4a52-869f-b34748f3ca75.yml | 0 .../1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml | 0 .../20959401-8e59-45d9-83e8-58deebca4c5e.yml | 0 .../2260317c-2be4-4a79-a4d9-0b74aad46af9.yml | 0 .../23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml | 0 .../245cf97a-8982-421e-945b-e1aa096112b7.yml | 0 .../2b0c79b9-0a00-4849-819d-a866238bac92.yml | 0 .../3078e95c-7129-4b39-a9ff-e5c80e966a56.yml | 0 .../33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml | 0 .../3464de7f-9880-496a-a7ad-cb7d2c369150.yml | 0 .../35be8705-b50e-4506-9a61-568ef0986318.yml | 0 .../38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml | 0 .../38bf2e73-3fcc-44c1-ae36-20fece5bebce.yml | 0 .../3cbb7e47-57c6-4944-a019-0b690ebd74a2.yml | 0 .../407d683e-5ea8-4717-937c-e77660c96de2.yml | 0 .../44e54046-2e1b-4602-8e64-178d92ce8553.yml | 0 .../49620dbf-ea4e-4d07-87c5-be00114e809f.yml | 0 .../49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml | 0 .../4a6e5989-a8a6-4482-a094-f62a3cb50056.yml | 0 .../525ab979-42d4-49b3-8ffd-04427ea1afe2.yml | 0 .../5d6e76f4-0043-44f8-beea-c193bec2bbb8.yml | 0 .../5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml | 0 .../6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml | 0 .../63fe1090-3a57-411c-adbf-40098e87fb02.yml | 0 .../649a9842-82c8-4bf4-b8f2-565e065d7841.yml | 0 .../6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml | 0 .../7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml | 0 .../76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml | 0 .../76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml | 0 .../7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml | 0 .../77dbc92c-a2e9-44c5-b17c-381b9370555b.yml | 0 .../7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml | 0 .../7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml | 0 .../811addc9-1926-48e1-a425-39e7ae375502.yml | 0 .../850a7ffd-1089-4938-a141-d000f40b6ce3.yml | 0 .../85facb10-dd94-47e4-b1a9-96b773707d6e.yml | 0 .../87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml | 0 .../8973fd39-dcfd-4607-a356-f9869a231804.yml | 0 .../8a251c00-43a4-42c4-b140-3f6b62bdc000.yml | 0 .../8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml | 0 .../8d2b105b-6cc3-4a46-beaf-699119814884.yml | 0 .../91a6d91f-a42a-4e29-9c51-edcd7e058276.yml | 0 .../9a4b114c-62fd-46d9-aba9-def076c423b9.yml | 0 .../9d75a522-9956-47af-964c-cf9b482a2d65.yml | 0 .../a674f664-885b-4019-b72b-786d92dd2094.yml | 0 .../b07f9704-b2cf-458a-82ab-db0e55a276e9.yml | 0 .../b5571f4e-0c5c-4ffe-8b3f-0e789b6581ad.yml | 0 .../b76e1882-19e5-4d87-9da7-538e24b0c169.yml | 0 .../bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml | 0 .../bf8e354b-1c39-485c-8860-10d35ae176b2.yml | 0 .../c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml | 0 .../c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml | 0 .../c9db3cb1-9c9f-4af3-a713-58458503589b.yml | 0 .../ce0a363d-bd62-404c-b57e-087bc7ed7734.yml | 0 .../ce9669b2-ec36-46fe-98c9-c6f981b5dd34.yml | 0 .../cf329ad7-38c3-41a6-82b5-f426b62a342b.yml | 0 .../d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml | 0 .../d9abb0dc-5a6d-4fc0-ae0a-f4aa4147cd9b.yml | 0 .../dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml | 0 .../db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml | 0 .../dc2e521d-556e-4ed5-933e-8fcd38f80f56.yml | 0 .../dd250ba1-51b2-4759-967c-55eb090a5e8e.yml | 0 .../e0776472-d1d6-4687-8b15-93e93ffbf63f.yml | 0 .../e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml | 0 .../e6ce2b2a-7948-466d-a57c-a619641c6356.yml | 0 .../ea488546-38fa-421c-a9ff-585bf766b14b.yml | 0 .../ed787a1d-abfb-4078-b2c3-6b101949d602.yml | 0 .../f13af664-68c6-4141-9fbb-bc21aab75a51.yml | 0 .../f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml | 0 .../f7d8f0a9-3229-4bac-ae21-d700fdc1ad77.yml | 0 .../f802050e-0b18-4ac2-ae90-13dba9cf354a.yml | 0 .../fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml | 0 .../fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml | 0 .../fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml | 0 .../fff6ce32-3f1b-495a-8263-c08302c80a32.yml | 0 .../100e4cfc-33b8-4980-9196-05d519a13dea.yml | 0 .../2036a3bc-7988-4105-9c73-5eb14fb8e437.yml | 0 .../416a4c14-20fc-4c12-ad96-aa27d584a554.yml | 0 .../45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml | 0 .../56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml | 0 .../6d2fbfa0-5402-461e-9357-9eb7efb850f5.yml | 0 .../6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml | 0 .../9c4229fe-7dd7-4a10-a389-3868d27ae469.yml | 0 .../c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml | 0 .../db8e6781-f356-497d-9aba-ef0994b6268c.yml | 0 .../0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml | 0 .../75c3061b-50d7-42c4-8db5-7d06859c6725.yml | 0 .../abe71fa3-1197-4bc6-abde-6c0fa270c196.yml | 0 .../d95f5188-650c-4dea-abcb-df8ea008919b.yml | 0 .../dcbc66a3-946d-435b-8ce8-54a680bf3b18.yml | 0 .../assets/favicon.ico | Bin .../logos/logo_primary_dark_desktop.svg | 0 .../assets/logos/logo_primary_dark_mobile.svg | 0 .../logos/logo_primary_light_desktop.svg | 0 .../logos/logo_primary_light_mobile.svg | 0 .../logos/logo_secondary_dark_desktop.png | Bin .../logos/logo_secondary_dark_mobile.png | Bin .../logos/logo_secondary_light_desktop.png | Bin .../logos/logo_secondary_light_mobile.png | Bin .../civictheme_content_government.info.yml | 0 .../civictheme_content_government.module | 0 ...ictheme_content_government.post_update.php | 0 .../block.block.civictheme_footer_menu_1.yml | 0 .../block.block.civictheme_footer_menu_2.yml | 0 .../block.block.civictheme_footer_menu_3.yml | 0 .../block.block.civictheme_footer_menu_4.yml | 0 ...block.block.civictheme_side_navigation.yml | 0 .../config/optional/civictheme.settings.yml | 0 .../286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml | 0 .../50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml | 0 .../5508dc51-1cf8-4577-9038-b572fbd698ae.yml | 0 .../5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml | 0 .../7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml | 0 .../b7f36176-620f-4178-aadd-9b448c610986.yml | 0 .../d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml | 0 .../02e8b931-63b9-4ba7-88c3-0ec21868268b.yml | 0 .../063ae3b8-fc10-4473-8b9d-675b50861e83.yml | 0 .../0d621b6e-9375-47ee-8df1-d6e91e4314aa.yml | 0 .../0db708be-ca52-44f6-a9d9-ff5a24b0867d.yml | 0 .../1376d33e-fd5f-4dbd-af23-6279e7565829.yml | 0 .../19722339-a9a3-452f-b7ac-e48127be10c2.yml | 0 .../212c79c5-e1b2-48f6-b0de-608799a2f5b0.yml | 0 .../2e83befe-9fcb-452e-871d-254b120385c3.yml | 0 .../38de3cdb-63b6-40f1-b60d-110c30a8a9fc.yml | 0 .../3a8368f6-7bf7-4bb1-8691-a1cbfb1674f2.yml | 0 .../42ad3ee5-1d76-4dbb-87c9-cdea3252e774.yml | 0 .../4c54f9b2-ae04-442f-b830-4cbeed050d75.yml | 0 .../533dd153-a9ad-48cb-8ddb-97b9050575d7.yml | 0 .../5d20173e-6b13-4ada-9621-28dd1c65bcc3.yml | 0 .../65559b88-1418-471a-908d-6f440aa939b7.yml | 0 .../6a16b860-5aac-40a4-a5e7-13d8bc051448.yml | 0 .../79bffa90-f6fe-4fb6-a8e4-129d8abf4566.yml | 0 .../82e396eb-aeb2-437f-ac75-891a4901b8cb.yml | 0 .../8a4bb1cb-34e9-4c70-9923-8a78f1408980.yml | 0 .../8af122fe-6beb-42fa-92dd-f11c36aa5276.yml | 0 .../content/file/Facebook.svg | 0 .../content/file/Linkedin.svg | 0 .../content/file/Twitter.svg | 0 .../a11c8970-147e-4977-bff1-074882279be0.yml | 0 .../content/file/aged-man-hugs-aged-woman.png | Bin .../content/file/aged-woman-smiles.png | Bin .../content/file/australian-flag-on-pole.png | Bin .../b0fd58d9-6ee5-4d72-8736-986cce424b88.yml | 0 .../b8433893-9503-4154-a7c6-f6b5ff8fbc1d.yml | 0 .../ba71dc95-1801-406f-880a-41b9da49dcea.yml | 0 .../bff45f89-9d22-4558-ae6e-81570c708bb6.yml | 0 .../content/file/bottom-of-uluru-mountain.png | Bin .../c4bd44cf-c983-4b72-a612-bd3826daae6b.yml | 0 .../db85dd04-fddd-4ab4-b364-2d5a3460ad98.yml | 0 .../content/file/dummy1.docx | Bin .../content/file/dummy1.pdf | Bin .../content/file/dummy1.txt | 0 .../content/file/dummy2.docx | Bin .../content/file/dummy2.pdf | Bin .../content/file/dummy2.txt | 0 .../content/file/dummy3.pdf | Bin .../ea71543e-bcb9-4407-8b95-8035ed2c336b.yml | 0 .../f1180d16-b221-4efc-8815-7c2323410d09.yml | 0 .../f73a6c37-2c78-4850-aabd-cf46210beb58.yml | 0 ...-talking-on-headset-in-a-modern-office.png | Bin ...-young-people-looking-at-laptop-screen.png | Bin .../content/file/generic.png | Bin .../content/file/icon1.svg | 0 .../content/file/icon2.svg | 0 .../content/file/icon3.svg | 0 .../content/file/icon4.svg | 0 .../file/large-australian-flag-on-pole.png | Bin .../content/file/man-with-microscope.png | Bin .../content/file/office_building.jpg | Bin .../parliament-building-in-the-evening.png | Bin .../file/photo-of-hon-adam-bontz-mp.png | Bin .../file/photo-of-hon-john-smith-mp.png | Bin .../file/photo-of-hon-judy-denn-mp.png | Bin .../content/file/small-car-moving-fast.png | Bin .../two-asian-women-looking-at-the-screen.png | Bin .../02986a1f-61c6-4e26-9e74-373d2bc0c634.yml | 0 .../07a20a20-f169-4050-9dfe-dde58117bcb3.yml | 0 .../128cf256-533b-4a10-bedb-e878deada4a5.yml | 0 .../146bdf1c-41ce-4ed4-a8e0-64d1c4f36ddc.yml | 0 .../16a68379-553e-4cd5-a2a1-d7539d15c2ba.yml | 0 .../17896e42-63c2-46db-bda4-a326904295b3.yml | 0 .../1a2711fb-ca12-4835-9e1e-a8a63bd82ad0.yml | 0 .../2fbae552-33a2-406e-87a6-159e419faf85.yml | 0 .../37c33114-06dc-43a2-a6d0-6b6befc11fa2.yml | 0 .../3e31f933-303c-4fd1-bac7-4faab8100c1d.yml | 0 .../4603fcc8-7b0c-4698-aba9-2a43508b1038.yml | 0 .../4df3f04c-7529-4335-a9d2-0d48cc074376.yml | 0 .../50ea2910-e6f9-495e-9174-3b84e97426b7.yml | 0 .../66fcb842-06c3-4432-bd20-62918758e005.yml | 0 .../930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml | 0 .../9896b6d9-c590-48af-a0ce-fed22a0ec861.yml | 0 .../9a81d79d-79da-4bc4-8584-27c411248d3e.yml | 0 .../9e389925-f1f6-4d1c-8aee-03e4a91f6eb4.yml | 0 .../a172a439-0aea-42e1-b19c-7fdd3ba68bcf.yml | 0 .../a5653abc-41de-4b8f-a9b7-cb48aeeacd5b.yml | 0 .../ab71f96c-d1b4-4a7f-be7d-7b5fa5b26925.yml | 0 .../af43a085-7e4f-40d4-a8d7-79ddd18fbcf0.yml | 0 .../c16012a7-6fb9-40a4-8ccf-b4f3691e1feb.yml | 0 .../ccd6cc0e-c403-45a3-949d-216804250433.yml | 0 .../e0c710e3-6eeb-4ea5-b656-0fa728b389b8.yml | 0 .../e343a613-0b38-49f4-a4b5-f000b171b10d.yml | 0 .../e7acc411-519a-4735-80a6-c0bc7dfb61f3.yml | 0 .../f7f391de-797d-4345-90c4-46d1f01c468e.yml | 0 .../fa15a8a9-f7c2-4e9c-a9d3-51cdb501d50b.yml | 0 .../082e6164-8c11-40e2-a127-8ae90a073db2.yml | 0 .../0985ec26-733f-4e36-959d-89bd54cb097e.yml | 0 .../0b391468-84ed-42dc-9709-a5da331f7984.yml | 0 .../0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml | 0 .../0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml | 0 .../17e25154-b1ae-4a54-abdf-893b083126d9.yml | 0 .../191d400b-79ec-4129-85a1-d02558ac1dce.yml | 0 .../196a91fb-589a-439b-addf-47226a877fba.yml | 0 .../199ccc90-1158-4d44-b970-7dfa63958962.yml | 0 .../1a52ef66-67f7-4774-9aca-22ade33f449f.yml | 0 .../1af42027-4063-4a52-869f-b34748f3ca75.yml | 0 .../1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml | 0 .../1fba0787-dc6b-4f85-a1b6-fe57793e88c9.yml | 0 .../20959401-8e59-45d9-83e8-58deebca4c5e.yml | 0 .../2260317c-2be4-4a79-a4d9-0b74aad46af9.yml | 0 .../237efd9c-07ab-4667-9b2e-71e36a276422.yml | 0 .../23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml | 0 .../245cf97a-8982-421e-945b-e1aa096112b7.yml | 0 .../2b0c79b9-0a00-4849-819d-a866238bac92.yml | 0 .../2f378b27-3b67-441a-96a9-0a6de73fb1db.yml | 0 .../33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml | 0 .../3464de7f-9880-496a-a7ad-cb7d2c369150.yml | 0 .../35be8705-b50e-4506-9a61-568ef0986318.yml | 0 .../38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml | 0 .../407d683e-5ea8-4717-937c-e77660c96de2.yml | 0 .../4968109e-0125-40e1-ab9d-b4fca8546ef3.yml | 0 .../4a6e5989-a8a6-4482-a094-f62a3cb50056.yml | 0 .../4b1d211b-63ab-41c6-82f9-d124d52417a3.yml | 0 .../525ab979-42d4-49b3-8ffd-04427ea1afe2.yml | 0 .../5affe220-42a6-4bab-86ce-c64cd9490cf7.yml | 0 .../6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml | 0 .../649a9842-82c8-4bf4-b8f2-565e065d7841.yml | 0 .../6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml | 0 .../6a865497-8c11-4d3c-ad9e-7bcec0bc173b.yml | 0 .../7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml | 0 .../76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml | 0 .../7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml | 0 .../77dbc92c-a2e9-44c5-b17c-381b9370555b.yml | 0 .../7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml | 0 .../7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml | 0 .../811addc9-1926-48e1-a425-39e7ae375502.yml | 0 .../82a5c45f-7594-4e11-bbec-e8fe0e040185.yml | 0 .../85facb10-dd94-47e4-b1a9-96b773707d6e.yml | 0 .../87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml | 0 .../8973fd39-dcfd-4607-a356-f9869a231804.yml | 0 .../8a251c00-43a4-42c4-b140-3f6b62bdc000.yml | 0 .../8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml | 0 .../910c07dc-8c95-436d-9434-5ae6f4ed46c1.yml | 0 .../91a6d91f-a42a-4e29-9c51-edcd7e058276.yml | 0 .../9d75a522-9956-47af-964c-cf9b482a2d65.yml | 0 .../a0c1ecde-9e39-4ca9-9342-943172622ae8.yml | 0 .../b07f9704-b2cf-458a-82ab-db0e55a276e9.yml | 0 .../b76e1882-19e5-4d87-9da7-538e24b0c169.yml | 0 .../b879d56d-cc11-44a4-a0eb-af0d3dae1d1a.yml | 0 .../bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml | 0 .../bf8e354b-1c39-485c-8860-10d35ae176b2.yml | 0 .../c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml | 0 .../c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml | 0 .../c3045aa0-6573-491f-8220-3c09b5e8dd7e.yml | 0 .../c9db3cb1-9c9f-4af3-a713-58458503589b.yml | 0 .../ce0a363d-bd62-404c-b57e-087bc7ed7734.yml | 0 .../cf329ad7-38c3-41a6-82b5-f426b62a342b.yml | 0 .../d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml | 0 .../dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml | 0 .../e0776472-d1d6-4687-8b15-93e93ffbf63f.yml | 0 .../e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml | 0 .../e66e8371-b802-4722-a078-5a19fc6b0f8c.yml | 0 .../ea488546-38fa-421c-a9ff-585bf766b14b.yml | 0 .../ed787a1d-abfb-4078-b2c3-6b101949d602.yml | 0 .../f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml | 0 .../f802050e-0b18-4ac2-ae90-13dba9cf354a.yml | 0 .../fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml | 0 .../fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml | 0 .../fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml | 0 .../fff6ce32-3f1b-495a-8263-c08302c80a32.yml | 0 .../02831341-01cd-4d7d-80b7-20f01feb950b.yml | 0 .../0d96ff66-61ff-44fc-a9e4-a8b174f6da95.yml | 0 .../21d11ae0-2874-4663-9937-a48ce30a7ad7.yml | 0 .../3554631b-63d2-461e-916e-217a18d1d298.yml | 0 .../52a73eef-5883-4277-8e4e-e2e587670b59.yml | 0 .../56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml | 0 .../6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml | 0 .../6f588571-e649-47dc-9911-c1723cb07e71.yml | 0 .../882a6c90-74f4-44c7-ab53-fb0a9937c678.yml | 0 .../b7759fda-e55d-4a37-b6e6-fb1816e75365.yml | 0 .../b7f32ddb-c81a-40ff-8389-a935cd317201.yml | 0 .../c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml | 0 .../d40fd509-9fb5-4295-b3f3-65638aceeaf7.yml | 0 .../d82c4982-b334-43ed-bfad-32ce5e63cba6.yml | 0 .../dbb6bfd1-8427-40f1-9ca6-96d21a368a65.yml | 0 .../f3c7ec64-459f-4ea7-8060-f60b0d84901c.yml | 0 .../f5794802-f1a0-48ac-aaff-27acfd80d799.yml | 0 .../0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml | 0 .../75c3061b-50d7-42c4-8db5-7d06859c6725.yml | 0 .../7f02fd6d-bda1-47a0-b463-f7cd975e026d.yml | 0 .../abe71fa3-1197-4bc6-abde-6c0fa270c196.yml | 0 .../cc796ed1-1ae8-4c50-b462-c97f6773f2f3.yml | 0 .../d95f5188-650c-4dea-abcb-df8ea008919b.yml | 0 .../assets/favicon.ico | Bin .../logos/logo_primary_dark_desktop.svg | 0 .../assets/logos/logo_primary_dark_mobile.svg | 0 .../logos/logo_primary_light_desktop.svg | 0 .../logos/logo_primary_light_mobile.svg | 0 .../logos/logo_secondary_dark_desktop.png | Bin .../logos/logo_secondary_dark_mobile.png | Bin .../logos/logo_secondary_light_desktop.png | Bin .../logos/logo_secondary_light_mobile.png | Bin ...ivictheme_content_highereducation.info.yml | 0 .../civictheme_content_highereducation.module | 0 ...me_content_highereducation.post_update.php | 0 .../block.block.civictheme_footer_menu_1.yml | 0 .../block.block.civictheme_footer_menu_2.yml | 0 .../block.block.civictheme_footer_menu_3.yml | 0 .../block.block.civictheme_footer_menu_4.yml | 0 ...block.block.civictheme_side_navigation.yml | 0 .../config/optional/civictheme.settings.yml | 0 .../286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml | 0 .../50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml | 0 .../5508dc51-1cf8-4577-9038-b572fbd698ae.yml | 0 .../5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml | 0 .../7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml | 0 .../b7f36176-620f-4178-aadd-9b448c610986.yml | 0 .../d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml | 0 .../04f13054-5b92-4d9b-b2e5-4ccb7776cdf8.yml | 0 .../063ae3b8-fc10-4473-8b9d-675b50861e83.yml | 0 .../06649f54-e0ba-4cb3-a291-d07abecdf0f1.yml | 0 .../0c6e3eb6-6ee2-4c19-b27d-9b724797d809.yml | 0 .../0eb831f5-9400-4563-9c0a-7fe15e48359b.yml | 0 .../13cbd4d6-a1d3-468e-80ed-17ee2d97975d.yml | 0 .../17043c65-8fbe-4447-a967-293bedca0dd4.yml | 0 .../2280ddcf-ec73-49ae-8a02-3d6c69579504.yml | 0 .../262c3484-7a1b-4c87-8b62-b4ed2aa6fdff.yml | 0 .../26c337ee-6ff6-4a2f-bc5c-8a2716b64f3c.yml | 0 .../28ab7204-ffc3-4dfa-bae8-b15ff3eb806d.yml | 0 .../2dbb9ea9-fc71-45c8-8fc3-4fd5c4e47f69.yml | 0 .../39d33114-a7ca-4960-8b72-0c616bcd57bc.yml | 0 .../3e2f531a-7aa3-4f8c-92bb-4d2dfe886dac.yml | 0 .../3faebecb-df49-490c-8231-8618caec2a22.yml | 0 .../41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml | 0 .../43d131e1-0ed7-4df4-9666-2f97345b4e85.yml | 0 .../4572afc3-72c9-4e94-a9ed-3c0525428da9.yml | 0 .../485cc58d-a829-4462-8cec-ef747507f158.yml | 0 .../4c54f9b2-ae04-442f-b830-4cbeed050d75.yml | 0 .../52c7c546-4010-44c0-aa09-7b1295255df8.yml | 0 .../52cf5a8d-97bf-48cf-b106-e2249e2e705e.yml | 0 .../5772c7bd-f9b8-4fea-9aab-ea23653e7bf5.yml | 0 .../5aae0577-f184-421f-9818-36c4c91f7268.yml | 0 .../5daffb0b-71e0-40cd-94ab-72cea6e15b30.yml | 0 .../64a4df06-0829-4e3e-89ba-0f8dcf296cd3.yml | 0 .../661348df-1f8d-4fc2-9a86-7b79b7530ddc.yml | 0 .../71884454-94a4-4b31-b549-72457937caae.yml | 0 .../74f3530d-17b6-45a6-be26-22204601cfce.yml | 0 .../75453091-c74a-4b07-b57a-e381d34c65de.yml | 0 .../7c3adf49-2497-4781-a6d7-6caa16a5b9ab.yml | 0 .../7d218cdd-73aa-4253-8e46-59c94197a943.yml | 0 .../7d40a1d7-cb84-416d-b1de-d6bbdae4a4d8.yml | 0 .../7dea2844-77b7-4f1a-bb77-5d61c9d0be28.yml | 0 .../7ec668f1-cd7d-4111-967e-f2522817ff2f.yml | 0 .../87f76de3-68e6-4e5e-b739-9dd448d1ba62.yml | 0 .../894ac492-60e6-4596-b171-4e3c03331076.yml | 0 .../8b15713a-ca0a-458a-a841-86e667f7e913.yml | 0 .../8b42af88-5ca5-4272-8b4d-d9588778a92d.yml | 0 .../8dcc82a3-004e-4a65-aab9-ec73f19b5862.yml | 0 .../8f3322b9-86c2-4ee9-8862-9af7890e436c.yml | 0 .../9c35b490-2a57-458a-a298-4cbc0b0907d9.yml | 0 .../9cea8871-e46e-4671-abf0-f2183a98e6bf.yml | 0 .../file/AI and open data for COVID 1.png | Bin .../Alzheimer\342\200\231s Association.png" | Bin .../content/file/BCG.png | Bin .../content/file/Background Pattern.png | Bin .../content/file/Baker-McKenzie.png | Bin .../content/file/Facebook.svg | 0 .../content/file/Johnson Johnson.png | Bin .../content/file/Linkedin.svg | 0 .../content/file/My University library.png | Bin .../content/file/Newbreakthrough.png | Bin .../content/file/Pfizer.png | Bin .../content/file/Placeholder.png | Bin .../content/file/Red Cross.png | Bin .../content/file/Smithsonian Institute.png | Bin .../file/The Pine Island Glacier 1.png | Bin .../content/file/Twitter.svg | 0 .../content/file/United Nations.png | Bin .../content/file/WHO.png | Bin .../content/file/World Vision.png | Bin .../content/file/_Icon-1.svg | 0 .../content/file/_Icon.svg | 0 .../file/_Icondept of architecture.svg | 0 .../content/file/_Icondept of art.svg | 0 .../content/file/_Icondept of banking.svg | 0 .../file/_Icondept of chem engineering.svg | 0 .../file/_Icondept of civil engineering.svg | 0 .../file/_Icondept of cyber security.svg | 0 .../content/file/_Icondept of economics.svg | 0 .../_Icondept of emerging technologies.svg | 0 .../content/file/_Icondept of marketing.svg | 0 .../_Icondept of mechanical engineering.svg | 0 .../file/_Icondept of political science.svg | 0 .../_Icondept of software engineering.svg | 0 .../_Icondept of structural engineering.svg | 0 .../_Iconschool of biomedical sciences.svg | 0 ...school of english and creative writing.svg | 0 .../content/file/_Iconschool of languages.svg | 0 .../content/file/_Iconschool of law.svg | 0 .../content/file/_Iconschool of med.svg | 0 .../_Iconschool of media and journalism.svg | 0 .../file/_Iconschool of social sciences.svg | 0 .../a2c9a5f4-bdff-46c3-86dc-dde0b7108e6b.yml | 0 .../a9cc17a6-a67a-4785-9ac4-0dbd1ac184f6.yml | 0 .../content/file/account.svg | 0 .../content/file/aecom.png | Bin ...afif-ramdhasuma-lPjeFCIFJwk-unsplash 2.png | Bin .../content/file/awardwinningresearchers.png | Bin .../b7d04e5e-eb1d-4e7e-bb2e-a5fffa073a81.yml | 0 .../b934d372-e59b-4e7d-a0f1-d5c818ea4cef.yml | 0 .../bff45f89-9d22-4558-ae6e-81570c708bb6.yml | 0 .../c14f7e58-db26-4c8d-830a-4f4ce677f898.yml | 0 .../c52989ca-ad3c-468b-b4a0-02aaab1dc7e8.yml | 0 .../cac181f2-fa1e-4a8e-9e30-6dc57124f8bc.yml | 0 .../file/civictheme_background_2 1.png | Bin .../clay-banks-Hf8n0RUk7g0-unsplash 1.png | Bin .../d3dec43b-f5bf-4785-8561-bea57237e02d.yml | 0 .../d5d082de-a211-4e13-b818-6f2e7dbc32f0.yml | 0 .../d838ac0c-5320-4e95-93e7-b1c8d1a7a0b2.yml | 0 .../d9a4a6a1-808f-4d0f-b472-045f64b7bdf5.yml | 0 .../dc5c94dc-faea-4b7c-a079-3f8d9267e713.yml | 0 .../content/file/deloitte.png | Bin .../content/file/demo_image.jpg | Bin .../content/file/demo_lorem-ipsum.pdf | Bin .../dose-media-bU6JyhSI6zo-unsplash 1.png | Bin .../content/file/doubledegrees.png | Bin .../content/file/doubledegreesslider1.png | Bin .../e3080d9e-143f-458b-aed6-cf5fe97f3861.yml | 0 .../e5b5afb3-e0b8-42f3-877e-011c0de89c95.yml | 0 .../e897e660-3b34-41ef-98f9-1160f2528a89.yml | 0 .../eb4983ea-b3e7-47c2-a036-52aadeebadc1.yml | 0 .../eb8db1e8-1ccc-4c99-9a85-75b29eae4de6.yml | 0 .../f127cb9b-1d16-4213-acb1-021e8842e49d.yml | 0 .../f1d15bb3-6018-497d-a9bc-79ec0656793e.yml | 0 .../fbbda862-b3ed-4b06-b8d7-b548a628a60f.yml | 0 .../frankie-lopez-lXy07zu3NN4-unsplash 1.png | Bin .../content/file/generic.png | Bin ...oung-people-looking-at-computer-screen.jpg | Bin .../helena-lopes-UZe35tk5UoA-unsplash 1.png | Bin .../content/file/janesmith.png | Bin .../file/melbourne_flinders_street.jpg | Bin .../content/file/open book.svg | 0 .../content/file/scholarship.png | Bin .../content/file/strategicplan.png | Bin .../content/file/universityranked.png | Bin .../02c5cb96-7bf6-4362-ad5a-0a562e996632.yml | 0 .../052ab323-9e65-4c7b-8c5c-e16277731a30.yml | 0 .../128cf256-533b-4a10-bedb-e878deada4a5.yml | 0 .../12d28525-2e6c-4d9a-9bca-1e8758d0b706.yml | 0 .../143fe51b-83b1-4e43-a0d0-40476540abc3.yml | 0 .../1a1cbd4b-36f6-45ca-b71f-89bccb5d2e83.yml | 0 .../205adb84-4add-4e30-92b8-e5c052aa0bc3.yml | 0 .../20b3c516-3834-4eff-b24f-d67d17464c9c.yml | 0 .../2293c43c-5b29-45f6-9b58-51344002758a.yml | 0 .../23bc48fc-9abc-4e61-be57-f73be8ec5328.yml | 0 .../286955ac-256e-480d-b914-dcad37fa96ff.yml | 0 .../29410ad3-295b-450e-bba4-c58d5a7e83ad.yml | 0 .../2cf05e2f-5d05-4e88-ae27-7248a11978c4.yml | 0 .../2e4ffce7-2f27-4196-9def-763b2657d951.yml | 0 .../33025cb8-4e76-4122-8e56-48c04cb12c8f.yml | 0 .../3a518ae8-054c-4b58-b673-3771f897dbd9.yml | 0 .../405e6f34-e721-473c-b3da-49d618e92105.yml | 0 .../4a661a2b-f6cc-480c-99ed-1f9911b5d405.yml | 0 .../4c1ad737-0d04-4adc-a2b4-10a6b914cb1a.yml | 0 .../519c4e0c-acd5-4233-9628-8335ee7ce51f.yml | 0 .../61e15cff-4f8f-4480-9c0a-8f11669c4374.yml | 0 .../6e092085-4a97-4bd5-9711-ef0005ecdf4a.yml | 0 .../707c016d-26af-43c0-a999-c892e651917a.yml | 0 .../70debdf1-8d42-4ac2-94d3-3b1781181833.yml | 0 .../738f9580-7a92-4a92-9b0a-30d191f49737.yml | 0 .../773a4ec5-1d27-4e1c-9b07-ef1b7cbc0cf4.yml | 0 .../7a47a1a3-d8c3-40e6-bb92-9fdea76de772.yml | 0 .../7b02f9f8-0b74-475b-98cb-efb080b09929.yml | 0 .../7d8c80cb-6e45-4ba2-aad6-8e9bc132f88f.yml | 0 .../807435c6-a632-4c5c-bf66-2ffdc9ab609f.yml | 0 .../8d96e514-518d-46fb-aa93-d0fb629035ee.yml | 0 .../90720509-6653-4acf-a96b-7154da530b88.yml | 0 .../9160afda-d35a-4538-9284-0148f87278e6.yml | 0 .../930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml | 0 .../9e21c1d1-284c-4fa4-8395-7495fb2dbb2d.yml | 0 .../a139973f-f02a-4838-bcb4-3a7e0e0c1556.yml | 0 .../aadedf42-c600-4397-9e6b-5b85e20f1d6a.yml | 0 .../ac4255ad-ec69-47e9-9617-86b2e51872b8.yml | 0 .../afe262f2-18fb-4dd9-b4e2-4f4482766cde.yml | 0 .../b1142872-23be-4b62-a4a8-37cdcd453bb6.yml | 0 .../b2960675-19ac-4689-8fca-fd717c4b8163.yml | 0 .../b4fa303d-042f-4b38-a06b-88c26d1a7eb3.yml | 0 .../b7711963-ecc5-41b8-923f-692f4416f7d2.yml | 0 .../b968b4c6-58b1-4a90-a436-54f93d0d7af1.yml | 0 .../ba25bcb8-b010-4d47-8765-1f9f2b1309a0.yml | 0 .../c4254aad-8fe9-4e9d-abba-1aab19dcec78.yml | 0 .../c62e73db-9388-4088-9da8-facd065a2d39.yml | 0 .../d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml | 0 .../d1a149ce-4422-4767-aef1-1a22ae4e2193.yml | 0 .../d40603f6-cf19-40da-812d-fbee32d8696d.yml | 0 .../d4bd31b4-651a-4120-a7bf-e6d6832f722c.yml | 0 .../d6d58799-0fe0-47c8-8bda-153a48694b1b.yml | 0 .../e4f38f37-1947-4b47-8e9f-3b85ab96614a.yml | 0 .../e5120032-950d-422c-9d6e-3d562e633858.yml | 0 .../e71dbfa0-a672-4c84-a4b7-3b7863e6268c.yml | 0 .../e8ab5ef1-2f45-4937-8f0a-f63c22f52df9.yml | 0 .../eac50bb1-3e95-4be4-80cb-7c768fef1c09.yml | 0 .../ece7dd42-dc11-4d3d-becf-1b0bfad61fb2.yml | 0 .../f6d32a80-22f2-4f4d-b4d5-09a1fc11b783.yml | 0 .../f7f391de-797d-4345-90c4-46d1f01c468e.yml | 0 .../f8695f84-8fbb-4e7e-97b9-423efe719cda.yml | 0 .../fd86cf0a-1055-4ae7-8358-0bf198723fe2.yml | 0 .../ff9dd1cc-ab2e-468c-9b71-174b04ff3707.yml | 0 .../02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml | 0 .../082e6164-8c11-40e2-a127-8ae90a073db2.yml | 0 .../0985ec26-733f-4e36-959d-89bd54cb097e.yml | 0 .../0b391468-84ed-42dc-9709-a5da331f7984.yml | 0 .../0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml | 0 .../0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml | 0 .../0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml | 0 .../17e25154-b1ae-4a54-abdf-893b083126d9.yml | 0 .../191d400b-79ec-4129-85a1-d02558ac1dce.yml | 0 .../196a91fb-589a-439b-addf-47226a877fba.yml | 0 .../199ccc90-1158-4d44-b970-7dfa63958962.yml | 0 .../1a52ef66-67f7-4774-9aca-22ade33f449f.yml | 0 .../1af42027-4063-4a52-869f-b34748f3ca75.yml | 0 .../1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml | 0 .../20959401-8e59-45d9-83e8-58deebca4c5e.yml | 0 .../2260317c-2be4-4a79-a4d9-0b74aad46af9.yml | 0 .../23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml | 0 .../245cf97a-8982-421e-945b-e1aa096112b7.yml | 0 .../2b0c79b9-0a00-4849-819d-a866238bac92.yml | 0 .../3078e95c-7129-4b39-a9ff-e5c80e966a56.yml | 0 .../33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml | 0 .../3464de7f-9880-496a-a7ad-cb7d2c369150.yml | 0 .../35be8705-b50e-4506-9a61-568ef0986318.yml | 0 .../38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml | 0 .../407d683e-5ea8-4717-937c-e77660c96de2.yml | 0 .../44e54046-2e1b-4602-8e64-178d92ce8553.yml | 0 .../49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml | 0 .../4a6e5989-a8a6-4482-a094-f62a3cb50056.yml | 0 .../525ab979-42d4-49b3-8ffd-04427ea1afe2.yml | 0 .../5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml | 0 .../5f598858-36b9-44bc-a172-b5074dbf18e3.yml | 0 .../6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml | 0 .../649a9842-82c8-4bf4-b8f2-565e065d7841.yml | 0 .../6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml | 0 .../7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml | 0 .../71ced34e-4aad-4635-9180-a413f9a9bfba.yml | 0 .../76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml | 0 .../76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml | 0 .../7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml | 0 .../7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml | 0 .../7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml | 0 .../811addc9-1926-48e1-a425-39e7ae375502.yml | 0 .../85facb10-dd94-47e4-b1a9-96b773707d6e.yml | 0 .../87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml | 0 .../8973fd39-dcfd-4607-a356-f9869a231804.yml | 0 .../8a251c00-43a4-42c4-b140-3f6b62bdc000.yml | 0 .../8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml | 0 .../8d47deda-5ee5-4dcc-9f85-80736ff4cfe9.yml | 0 .../8d77d5fa-32c2-4a49-bf6c-d4d29bffabd4.yml | 0 .../91a6d91f-a42a-4e29-9c51-edcd7e058276.yml | 0 .../95e9576e-bf57-4d42-8277-86d6fba07024.yml | 0 .../9d75a522-9956-47af-964c-cf9b482a2d65.yml | 0 .../a29bbfc3-74a7-4f20-b2fb-afc695b5604d.yml | 0 .../b07f9704-b2cf-458a-82ab-db0e55a276e9.yml | 0 .../b76e1882-19e5-4d87-9da7-538e24b0c169.yml | 0 .../bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml | 0 .../bf8e354b-1c39-485c-8860-10d35ae176b2.yml | 0 .../c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml | 0 .../c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml | 0 .../c9db3cb1-9c9f-4af3-a713-58458503589b.yml | 0 .../ce0a363d-bd62-404c-b57e-087bc7ed7734.yml | 0 .../cf329ad7-38c3-41a6-82b5-f426b62a342b.yml | 0 .../d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml | 0 .../dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml | 0 .../db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml | 0 .../e0776472-d1d6-4687-8b15-93e93ffbf63f.yml | 0 .../e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml | 0 .../e6ce2b2a-7948-466d-a57c-a619641c6356.yml | 0 .../e770653a-bfc1-4c88-a6b5-8a2baaf688c6.yml | 0 .../ea488546-38fa-421c-a9ff-585bf766b14b.yml | 0 .../ed787a1d-abfb-4078-b2c3-6b101949d602.yml | 0 .../f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml | 0 .../f802050e-0b18-4ac2-ae90-13dba9cf354a.yml | 0 .../fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml | 0 .../fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml | 0 .../fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml | 0 .../fff6ce32-3f1b-495a-8263-c08302c80a32.yml | 0 .../0900bcaa-2670-4ffa-b22e-f9fa667c45d0.yml | 0 .../11575ae4-d804-4b68-a9e2-528dde78ca5e.yml | 0 .../2036a3bc-7988-4105-9c73-5eb14fb8e437.yml | 0 .../2788e087-f610-435c-898b-996ace50bd11.yml | 0 .../2e309b77-8d77-40e8-95bb-1c1475955e67.yml | 0 .../35b75cc7-cf94-462f-9ee6-6bb69e895d8a.yml | 0 .../439d44bc-bb57-44ac-b1b6-1fbcb0f7668c.yml | 0 .../45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml | 0 .../4cd88c26-8e03-415e-8d67-6d818b07a49b.yml | 0 .../56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml | 0 .../570c4f75-363e-4cdc-980d-b0cc5172469e.yml | 0 .../5d9e4e6b-f957-42c3-8019-30b1ca190dd5.yml | 0 .../6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml | 0 .../802f8c11-788b-44ac-b204-c8fde899532b.yml | 0 .../82bdc4d8-e299-490e-92f8-2a0362724be1.yml | 0 .../866d2c87-0baa-4b54-839c-1e89d5ba6ab6.yml | 0 .../8f45163f-252f-46e3-b3d3-7930b1d9b6c7.yml | 0 .../baeb7d42-1e11-4d7a-abde-dc02cd89d417.yml | 0 .../bbd57889-e07c-4c4f-a223-868f9a441035.yml | 0 .../c0dc5f2f-ce09-4c0f-8fae-db1689f622e1.yml | 0 .../c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml | 0 .../db8e6781-f356-497d-9aba-ef0994b6268c.yml | 0 .../ee025f20-7976-47b2-aa62-a00b84b149de.yml | 0 .../1c76b992-a37f-407a-b0b3-65784043454a.yml | 0 .../5f9ad45f-5aa9-45cd-838d-719f82b7417a.yml | 0 .../96d87429-9acf-4c03-9da6-3e8ba9cc3fab.yml | 0 .../a54aec7d-5aaf-4709-a0ce-dab0ad436a33.yml | 0 .../abe71fa3-1197-4bc6-abde-6c0fa270c196.yml | 0 .../d95f5188-650c-4dea-abcb-df8ea008919b.yml | 0 .../custom/civictheme_content/src/Helper.php | 0 .../civictheme_dev/civictheme_dev.info.yml | 0 .../civictheme_dev/civictheme_dev.install | 0 .../civictheme_dev/civictheme_dev.module | 0 .../civictheme_dev.post_update.php | 0 .../civictheme_dev.services.yml | 0 .../custom/civictheme_dev/composer.json | 0 ...ist_examples_page_multiple_filters_exp.yml | 0 ...mples_page_one_filter_multi_select_exp.yml | 0 ...ples_page_one_filter_single_select_exp.yml | 0 ...iew.civictheme_automated_list_examples.yml | 0 ...ws.view.civictheme_automated_list_test.yml | 0 .../views.view.civictheme_table_examples.yml | 0 .../optional/user.role.administrator.yml | 0 .../CivicthemeDevConfigDevelSubscriber.php | 0 .../custom/civictheme_dev/src/Helper.php | 0 .../CivicthemeDevIgnoreFilter.php | 0 .../custom/civictheme_govcms/README.md | 0 .../civictheme_govcms.info.yml | 0 .../civictheme_govcms.services.yml | 0 .../custom/civictheme_govcms/composer.json | 0 .../optional/user.role.administrator.yml | 0 .../civictheme_govcms/drush.services.yml | 0 .../src/CivicthemeGovcmsManager.php | 0 .../src/Commands/CivicthemeGovcmsCommands.php | 0 .../cs_generated_content/assets/dummy1.doc | Bin .../cs_generated_content/assets/dummy1.docx | Bin .../cs_generated_content/assets/dummy1.gif | Bin .../cs_generated_content/assets/dummy1.jpeg | Bin .../cs_generated_content/assets/dummy1.jpg | Bin .../cs_generated_content/assets/dummy1.mp3 | Bin .../cs_generated_content/assets/dummy1.mp4 | Bin .../cs_generated_content/assets/dummy1.pdf | Bin .../cs_generated_content/assets/dummy1.png | Bin .../cs_generated_content/assets/dummy1.svg | 0 .../cs_generated_content/assets/dummy1.xls | Bin .../cs_generated_content/assets/dummy1.xlsx | Bin .../cs_generated_content/assets/dummy2.doc | Bin .../cs_generated_content/assets/dummy2.docx | Bin .../cs_generated_content/assets/dummy2.gif | Bin .../cs_generated_content/assets/dummy2.jpeg | Bin .../cs_generated_content/assets/dummy2.jpg | Bin .../cs_generated_content/assets/dummy2.pdf | Bin .../cs_generated_content/assets/dummy2.png | Bin .../cs_generated_content/assets/dummy2.svg | 0 .../cs_generated_content/assets/dummy2.xls | Bin .../cs_generated_content/assets/dummy2.xlsx | Bin .../cs_generated_content/assets/dummy3.jpeg | Bin .../cs_generated_content/assets/dummy3.jpg | Bin .../cs_generated_content/assets/dummy3.png | Bin .../custom/cs_generated_content/composer.json | 0 .../views.view.cs_generated_content_list.yml | 0 .../cs_generated_content.info.yml | 0 .../cs_generated_content.install | 0 .../generated_content/file/file.inc | 0 .../media/civictheme_document.inc | 0 .../media/civictheme_icon.inc | 0 .../media/civictheme_image.inc | 0 .../media/civictheme_video.inc | 0 .../node/civictheme_event.inc | 0 .../01.helpers.inc | 0 .../02.general.inc | 0 .../component.attachment.inc | 0 .../component.map.inc | 0 .../node/civictheme_page.inc | 0 .../civictheme_page_variations/01.helpers.inc | 0 .../civictheme_page_variations/02.general.inc | 0 .../civictheme_page_variations/03.banner.inc | 0 .../component.accordion.inc | 0 .../component.attachment.inc | 0 .../component.automated_list.inc | 0 .../component.callout.inc | 0 .../component.campaign.inc | 0 .../component.cards.inc | 0 .../component.content.inc | 0 .../component.iframe.inc | 0 .../component.manual_list.inc | 0 .../component.map.inc | 0 .../component.next_step.inc | 0 .../component.promo.inc | 0 .../component.quote.inc | 0 .../component.slider.inc | 0 .../component.webform.inc | 0 .../civictheme_site_sections.inc | 0 .../taxonomy_term/civictheme_topics.inc | 0 .../generated_content/user/user.inc | 0 .../src/CsGeneratedContentAssetGenerator.php | 0 .../src/CsGeneratedContentCivicthemeTrait.php | 0 .../src/CsGeneratedContentHelper.php | 0 .../src/CsGeneratedContentServiceProvider.php | 0 {docroot => web}/robots.txt | 0 .../sites/default/default.services.local.yml | 0 .../sites/default/default.services.yml | 13 + .../sites/default/default.settings.local.php | 4 +- .../sites/default/default.settings.php | 32 +- .../settings.environment_indicator.php | 29 + .../default/includes/settings.fast404.php | 3 + .../default/includes/settings.shield.php | 40 ++ {docroot => web}/sites/default/services.yml | 106 +++- {docroot => web}/sites/default/settings.php | 199 +++--- .../themes/contrib/civictheme/.ahoy.yml | 0 .../contrib/civictheme/.circleci/build.sh | 0 .../contrib/civictheme/.circleci/config.yml | 0 .../contrib/civictheme/.circleci/deploy.sh | 0 .../contrib/civictheme/.circleci/lint.sh | 0 .../civictheme/.circleci/process-artifacts.sh | 0 .../contrib/civictheme/.circleci/test.sh | 0 .../themes/contrib/civictheme/.editorconfig | 0 .../themes/contrib/civictheme/.eslintignore | 0 .../themes/contrib/civictheme/.eslintrc.yml | 0 .../themes/contrib/civictheme/.gitattributes | 0 .../civictheme/.github/release-drafter.yml | 12 + .../.github/workflows/draft-release.yml | 0 .../themes/contrib/civictheme/.gitignore | 0 .../contrib/civictheme/.gitignore.release | 0 .../themes/contrib/civictheme/.nvmrc | 0 .../civictheme/.storybook/addon-config.js | 0 .../.storybook/components_css.stories.js | 0 .../civictheme/.storybook/drupal_behaviors.js | 0 .../.storybook/importer.scss_variables.js | 0 .../contrib/civictheme/.storybook/main.js | 0 .../civictheme/.storybook/manager-head.html | 0 .../contrib/civictheme/.storybook/manager.js | 0 .../contrib/civictheme/.storybook/preview.js | 0 .../civictheme/.storybook/setupTwig.js | 0 .../.storybook/static/api/alerts1.json | 0 .../.storybook/static/api/alerts2.json | 0 .../.storybook/static/api/alerts3.json | 0 .../contrib/civictheme/.storybook/theme.js | 0 .../contrib/civictheme/.stylelintignore | 0 .../contrib/civictheme/.stylelintrc.json | 0 .../themes/contrib/civictheme/README.md | 0 .../backgrounds/civictheme_background_1.png | Bin .../backgrounds/civictheme_background_2.png | Bin .../contrib/civictheme/assets/favicon.ico | Bin .../contrib/civictheme/assets/fonts}/.gitkeep | 0 .../civictheme/assets/icons/account.svg | 0 .../civictheme/assets/icons/approve.svg | 0 .../contrib/civictheme/assets/icons/bars.svg | 0 .../civictheme/assets/icons/bullet.svg | 0 .../civictheme/assets/icons/calendar-1.svg | 0 .../civictheme/assets/icons/calendar-2.svg | 0 .../contrib/civictheme/assets/icons/call.svg | 0 .../civictheme/assets/icons/cancel.svg | 0 .../civictheme/assets/icons/checked.svg | 0 .../civictheme/assets/icons/close-outline.svg | 0 .../contrib/civictheme/assets/icons/close.svg | 0 .../civictheme/assets/icons/down-arrow-1.svg | 0 .../civictheme/assets/icons/down-arrow-2.svg | 0 .../assets/icons/down-arrow-large.svg | 0 .../civictheme/assets/icons/download-file.svg | 0 .../civictheme/assets/icons/download.svg | 0 .../assets/icons/exclamation-mark-1.svg | 0 .../assets/icons/exclamation-mark-2.svg | 0 .../assets/icons/exclamation-mark-3.svg | 0 .../contrib/civictheme/assets/icons/eye.svg | 0 .../civictheme/assets/icons/facebook.svg | 0 .../contrib/civictheme/assets/icons/help.svg | 0 .../contrib/civictheme/assets/icons/image.svg | 0 .../assets/icons/information-mark.svg | 0 .../assets/icons/left-arrow-outline.svg | 0 .../civictheme/assets/icons/left-arrow.svg | 0 .../civictheme/assets/icons/linkedin.svg | 0 .../civictheme/assets/icons/magnifier.svg | 0 .../contrib/civictheme/assets/icons/map.svg | 0 .../civictheme/assets/icons/megaphone.svg | 0 .../civictheme/assets/icons/mortarboard.svg | 0 .../civictheme/assets/icons/newspaper.svg | 0 .../civictheme/assets/icons/pdf-file.svg | 0 .../civictheme/assets/icons/progress.svg | 0 .../civictheme/assets/icons/right-arrow-1.svg | 0 .../civictheme/assets/icons/right-arrow-2.svg | 0 .../civictheme/assets/icons/select-box.svg | 0 .../contrib/civictheme/assets/icons/share.svg | 0 .../civictheme/assets/icons/square.svg | 0 .../contrib/civictheme/assets/icons/to-do.svg | 0 .../civictheme/assets/icons/twitter.svg | 0 .../assets/icons/up-arrow-large.svg | 0 .../civictheme/assets/icons/up-arrow.svg | 0 .../civictheme/assets/icons/upper-arrow.svg | 0 .../assets/icons/upper-right-arrow.svg | 0 .../contrib/civictheme/assets/icons/watch.svg | 0 .../civictheme/assets/icons/word-file.svg | 0 .../civictheme/assets/images/demo1.jpg | Bin .../civictheme/assets/images/demo2.jpg | Bin .../civictheme/assets/images/demo3.jpg | Bin .../civictheme/assets/images/demo4.jpg | Bin .../civictheme/assets/images/demo5.jpg | Bin .../civictheme/assets/images/demo6.jpg | Bin .../civictheme/assets/images/facebook.svg | 0 .../civictheme/assets/images/linkedin.svg | 0 .../civictheme/assets/images/twitter.svg | 0 .../contrib/civictheme/assets/js}/.gitkeep | 0 .../logos/logo_primary_dark_desktop.svg | 0 .../assets/logos/logo_primary_dark_mobile.svg | 0 .../logos/logo_primary_light_desktop.svg | 0 .../logos/logo_primary_light_mobile.svg | 0 .../logos/logo_secondary_dark_desktop.png | Bin .../logos/logo_secondary_dark_mobile.png | Bin .../logos/logo_secondary_light_desktop.png | Bin .../logos/logo_secondary_light_mobile.png | Bin .../assets/sass/header/_header.scss | 0 .../contrib/civictheme/assets/sass/theme.scss | 0 .../contrib/civictheme/assets/videos/demo.avi | Bin .../contrib/civictheme/assets/videos/demo.mp4 | Bin .../civictheme/assets/videos/demo.webm | Bin .../civictheme/assets/videos/demo_poster.png | Bin .../contrib/civictheme/civictheme.api.php | 0 .../civictheme/civictheme.breakpoints.yml | 0 .../contrib/civictheme/civictheme.info.yml | 0 .../contrib/civictheme/civictheme.layouts.yml | 0 .../civictheme/civictheme.libraries.yml | 0 .../civictheme/civictheme.post_update.php | 0 .../contrib/civictheme/civictheme.theme | 0 .../civictheme/civictheme_create_subtheme.php | 0 .../civictheme_library/.eslintignore | 0 .../civictheme_library/.eslintrc.yml | 0 .../civictheme_library/.gitattributes | 0 .../civictheme/civictheme_library/.gitignore | 0 .../civictheme_library/.gitignore.release | 0 .../civictheme/civictheme_library/.nvmrc | 0 .../.storybook/addon-config.js | 0 .../.storybook/css.stories.js | 0 .../.storybook/importer.scss_variables.js | 0 .../civictheme_library/.storybook/main.js | 0 .../.storybook/manager-head.html | 0 .../civictheme_library/.storybook/manager.js | 0 .../civictheme_library/.storybook/preview.js | 0 .../.storybook/static/api/alerts1.json | 0 .../.storybook/static/api/alerts2.json | 0 .../.storybook/static/api/alerts3.json | 0 .../civictheme_library/.storybook/theme.js | 0 .../civictheme_library/.stylelintignore | 0 .../civictheme_library/.stylelintrc.json | 0 .../civictheme/civictheme_library/README.md | 0 .../backgrounds/civictheme_background_1.png | Bin .../backgrounds/civictheme_background_2.png | Bin .../backgrounds/civictheme_background_3.png | Bin .../backgrounds/civictheme_background_4.png | Bin .../backgrounds/civictheme_background_5.png | Bin .../backgrounds/civictheme_background_6.png | Bin .../backgrounds/civictheme_background_7.png | Bin .../civictheme_library/assets/favicon.ico | Bin .../civictheme_library/assets/fonts}/.gitkeep | 0 .../assets/icons/account.svg | 0 .../assets/icons/approve.svg | 0 .../civictheme_library/assets/icons/bars.svg | 0 .../assets/icons/bullet.svg | 0 .../assets/icons/calendar-1.svg | 0 .../assets/icons/calendar-2.svg | 0 .../civictheme_library/assets/icons/call.svg | 0 .../assets/icons/cancel.svg | 0 .../assets/icons/checked.svg | 0 .../assets/icons/close-outline.svg | 0 .../civictheme_library/assets/icons/close.svg | 0 .../assets/icons/down-arrow-1.svg | 0 .../assets/icons/down-arrow-2.svg | 0 .../assets/icons/down-arrow-large.svg | 0 .../assets/icons/download-file.svg | 0 .../assets/icons/download.svg | 0 .../assets/icons/exclamation-mark-1.svg | 0 .../assets/icons/exclamation-mark-2.svg | 0 .../assets/icons/exclamation-mark-3.svg | 0 .../civictheme_library/assets/icons/eye.svg | 0 .../assets/icons/facebook.svg | 0 .../civictheme_library/assets/icons/help.svg | 0 .../civictheme_library/assets/icons/image.svg | 0 .../assets/icons/information-mark.svg | 0 .../assets/icons/left-arrow-outline.svg | 0 .../assets/icons/left-arrow.svg | 0 .../assets/icons/linkedin.svg | 0 .../assets/icons/magnifier.svg | 0 .../civictheme_library/assets/icons/map.svg | 0 .../assets/icons/megaphone.svg | 0 .../assets/icons/mortarboard.svg | 0 .../assets/icons/newspaper.svg | 0 .../assets/icons/pdf-file.svg | 0 .../assets/icons/progress.svg | 0 .../assets/icons/right-arrow-1.svg | 0 .../assets/icons/right-arrow-2.svg | 0 .../assets/icons/select-box.svg | 0 .../civictheme_library/assets/icons/share.svg | 0 .../assets/icons/square.svg | 0 .../civictheme_library/assets/icons/to-do.svg | 0 .../assets/icons/twitter.svg | 0 .../assets/icons/up-arrow-large.svg | 0 .../assets/icons/up-arrow.svg | 0 .../assets/icons/upper-arrow.svg | 0 .../assets/icons/upper-right-arrow.svg | 0 .../civictheme_library/assets/icons/watch.svg | 0 .../assets/icons/word-file.svg | 0 .../assets/images/demo1.jpg | Bin .../assets/images/demo2.jpg | Bin .../assets/images/demo3.jpg | Bin .../assets/images/demo4.jpg | Bin .../assets/images/demo5.jpg | Bin .../assets/images/demo6.jpg | Bin .../logos/logo_primary_dark_desktop.png | Bin .../assets/logos/logo_primary_dark_mobile.png | Bin .../logos/logo_primary_light_desktop.png | Bin .../logos/logo_primary_light_mobile.png | Bin .../logos/logo_secondary_dark_desktop.png | Bin .../logos/logo_secondary_dark_mobile.png | Bin .../logos/logo_secondary_light_desktop.png | Bin .../logos/logo_secondary_light_mobile.png | Bin .../civictheme_library/assets/videos/demo.avi | Bin .../civictheme_library/assets/videos/demo.mp4 | Bin .../assets/videos/demo.webm | Bin .../assets/videos/demo_poster.png | Bin .../components/00-base/_variables.base.scss | 0 .../00-base/_variables.components.scss | 0 .../00-base/background/background.scss | 0 .../00-base/background/background.stories.js | 0 .../background/background.stories.scss | 0 .../00-base/background/background.utils.js | 0 .../components/00-base/base.stories.scss | 0 .../components/00-base/base.utils.js | 0 .../00-base/collapsible/collapsible.js | 0 .../00-base/collapsible/collapsible.scss | 0 .../collapsible/collapsible.stories.js | 0 .../collapsible/collapsible.stories.twig | 0 .../00-base/colors/colors.stories.js | 0 .../00-base/colors/colors.stories.scss | 0 .../00-base/colors/colors.stories.twig | 0 .../components/00-base/debug/_index.scss | 0 .../00-base/elevation/elevation.stories.js | 0 .../00-base/elevation/elevation.stories.scss | 0 .../components/00-base/flyout/flyout.js | 0 .../components/00-base/flyout/flyout.scss | 0 .../00-base/flyout/flyout.stories.js | 0 .../00-base/flyout/flyout.stories.scss | 0 .../00-base/flyout/flyout.stories.twig | 0 .../components/00-base/fonts/_index.scss | 0 .../components/00-base/fonts/fonts.stories.js | 0 .../00-base/fonts/fonts.stories.scss | 0 .../components/00-base/grid/_index.scss | 0 .../components/00-base/grid/grid.stories.js | 0 .../components/00-base/grid/grid.stories.scss | 0 .../components/00-base/icon/icon.scss | 0 .../components/00-base/icon/icon.stories.js | 0 .../components/00-base/icon/icon.twig | 0 .../components/00-base/icon/icon.utils.js | 0 .../00-base/item-grid/item-grid.scss | 0 .../00-base/item-grid/item-grid.stories.js | 0 .../00-base/item-grid/item-grid.twig | 0 .../00-base/item-list/item-list.scss | 0 .../00-base/item-list/item-list.stories.js | 0 .../00-base/item-list/item-list.twig | 0 ...ntent-layout--single-column-contained.twig | 0 .../layout/content-layout--single-column.twig | 0 .../components/00-base/layout/layout.scss | 0 .../00-base/layout/layout.stories.js | 0 .../components/00-base/layout/layout.twig | 0 .../components/00-base/menu/menu.stories.js | 0 .../components/00-base/menu/menu.stories.scss | 0 .../components/00-base/menu/menu.twig | 0 .../components/00-base/menu/menu.utils.js | 0 .../00-base/mixins/_breakpoint.scss | 0 .../components/00-base/mixins/_color.scss | 0 .../components/00-base/mixins/_component.scss | 0 .../components/00-base/mixins/_content.scss | 0 .../components/00-base/mixins/_debug.scss | 0 .../00-base/mixins/_deprecations.scss | 0 .../components/00-base/mixins/_disabled.scss | 0 .../components/00-base/mixins/_elevation.scss | 0 .../components/00-base/mixins/_font.scss | 0 .../components/00-base/mixins/_form.scss | 0 .../components/00-base/mixins/_generator.scss | 0 .../components/00-base/mixins/_grid.scss | 0 .../components/00-base/mixins/_highlight.scss | 0 .../components/00-base/mixins/_icon.scss | 0 .../components/00-base/mixins/_image.scss | 0 .../components/00-base/mixins/_index.scss | 0 .../components/00-base/mixins/_link.scss | 0 .../components/00-base/mixins/_map.scss | 0 .../components/00-base/mixins/_message.scss | 0 .../components/00-base/mixins/_outline.scss | 0 .../components/00-base/mixins/_particle.scss | 0 .../components/00-base/mixins/_print.scss | 0 .../components/00-base/mixins/_rem.scss | 0 .../components/00-base/mixins/_reset.scss | 0 .../components/00-base/mixins/_spacing.scss | 0 .../components/00-base/mixins/_string.scss | 0 .../components/00-base/mixins/_table.scss | 0 .../00-base/mixins/_typography.scss | 0 .../00-base/mixins/_visibility.scss | 0 .../components/00-base/reset/reset.scss | 0 .../00-base/responsive/responsive.js | 0 .../00-base/responsive/responsive.stories.js | 0 .../responsive/responsive.stories.twig | 0 .../components/00-base/scrollspy/scrollspy.js | 0 .../00-base/scrollspy/scrollspy.scss | 0 .../00-base/scrollspy/scrollspy.stories.js | 0 .../00-base/scrollspy/scrollspy.stories.scss | 0 .../components/00-base/spacing/spacing.scss | 0 .../00-base/spacing/spacing.stories.js | 0 .../00-base/spacing/spacing.stories.scss | 0 .../components/00-base/time/time.stories.js | 0 .../components/00-base/time/time.twig | 0 .../components/00-base/typography/_index.scss | 0 .../00-base/typography/typography.stories.js | 0 .../typography/typography.stories.twig | 0 .../components/00-base/variables.scss | 0 .../components/00-base/visibility/_index.scss | 0 .../components/01-atoms/button/button.js | 0 .../components/01-atoms/button/button.scss | 0 .../01-atoms/button/button.stories.js | 0 .../components/01-atoms/button/button.twig | 0 .../01-atoms/checkbox/checkbox.scss | 0 .../01-atoms/checkbox/checkbox.stories.js | 0 .../01-atoms/checkbox/checkbox.twig | 0 .../01-atoms/chip/chip.event.stories.js | 0 .../components/01-atoms/chip/chip.js | 0 .../components/01-atoms/chip/chip.scss | 0 .../components/01-atoms/chip/chip.stories.js | 0 .../components/01-atoms/chip/chip.twig | 0 .../01-atoms/content-link/content-link.scss | 0 .../content-link/content-link.stories.js | 0 .../01-atoms/content-link/content-link.twig | 0 .../field-description/field-description.scss | 0 .../field-description.stories.js | 0 .../field-description/field-description.twig | 0 .../01-atoms/field-message/field-message.scss | 0 .../field-message/field-message.stories.js | 0 .../01-atoms/field-message/field-message.twig | 0 .../01-atoms/fieldset/fieldset.scss | 0 .../01-atoms/fieldset/fieldset.stories.js | 0 .../01-atoms/fieldset/fieldset.twig | 0 .../components/01-atoms/heading/heading.scss | 0 .../01-atoms/heading/heading.stories.js | 0 .../components/01-atoms/heading/heading.twig | 0 .../components/01-atoms/iframe/iframe.scss | 0 .../01-atoms/iframe/iframe.stories.js | 0 .../components/01-atoms/iframe/iframe.twig | 0 .../01-atoms/image/image.stories.js | 0 .../components/01-atoms/image/image.twig | 0 .../components/01-atoms/input/input.scss | 0 .../components/01-atoms/input/input.twig | 0 .../components/01-atoms/label/label.scss | 0 .../01-atoms/label/label.stories.js | 0 .../components/01-atoms/label/label.twig | 0 .../components/01-atoms/link/link.scss | 0 .../components/01-atoms/link/link.stories.js | 0 .../components/01-atoms/link/link.twig | 0 .../01-atoms/paragraph/paragraph.scss | 0 .../01-atoms/paragraph/paragraph.stories.js | 0 .../01-atoms/paragraph/paragraph.twig | 0 .../components/01-atoms/popover/popover.scss | 0 .../01-atoms/popover/popover.stories.js | 0 .../components/01-atoms/popover/popover.twig | 0 .../components/01-atoms/radio/radio.scss | 0 .../01-atoms/radio/radio.stories.js | 0 .../components/01-atoms/radio/radio.twig | 0 .../components/01-atoms/select/select.scss | 0 .../01-atoms/select/select.stories.js | 0 .../components/01-atoms/select/select.twig | 0 .../components/01-atoms/table/table.js | 0 .../components/01-atoms/table/table.scss | 0 .../01-atoms/table/table.stories.js | 0 .../components/01-atoms/table/table.twig | 0 .../components/01-atoms/tag/tag.scss | 0 .../components/01-atoms/tag/tag.stories.js | 0 .../components/01-atoms/tag/tag.twig | 0 .../01-atoms/textarea/textarea.scss | 0 .../01-atoms/textarea/textarea.stories.js | 0 .../01-atoms/textarea/textarea.twig | 0 .../01-atoms/textfield/textfield.scss | 0 .../01-atoms/textfield/textfield.stories.js | 0 .../01-atoms/textfield/textfield.twig | 0 .../01-atoms/video/video.stories.js | 0 .../components/01-atoms/video/video.twig | 0 .../02-molecules/accordion/accordion.scss | 0 .../accordion/accordion.stories.js | 0 .../02-molecules/accordion/accordion.twig | 0 .../02-molecules/attachment/attachment.scss | 0 .../attachment/attachment.stories.js | 0 .../02-molecules/attachment/attachment.twig | 0 .../basic-content/basic-content.scss | 0 .../basic-content/basic-content.stories.js | 0 .../basic-content/basic-content.twig | 0 .../02-molecules/breadcrumb/breadcrumb.scss | 0 .../breadcrumb/breadcrumb.stories.js | 0 .../02-molecules/breadcrumb/breadcrumb.twig | 0 .../02-molecules/callout/callout.scss | 0 .../02-molecules/callout/callout.stories.js | 0 .../02-molecules/callout/callout.twig | 0 .../editor-content/editor-content.stories.js | 0 .../editor-content.stories.scss | 0 .../02-molecules/event-card/event-card.scss | 0 .../event-card/event-card.stories.js | 0 .../02-molecules/event-card/event-card.twig | 0 .../02-molecules/figure/figure.scss | 0 .../02-molecules/figure/figure.stories.js | 0 .../02-molecules/figure/figure.twig | 0 .../form-element/form-element.scss | 0 .../form-element/form-element.stories.js | 0 .../form-element/form-element.twig | 0 .../group-filter/group-filter.scss | 0 .../group-filter/group-filter.stories.js | 0 .../group-filter/group-filter.twig | 0 .../components/02-molecules/logo/logo.scss | 0 .../02-molecules/logo/logo.stories.js | 0 .../components/02-molecules/logo/logo.twig | 0 .../02-molecules/logo/logo.utils.js | 0 .../components/02-molecules/map/map.scss | 0 .../02-molecules/map/map.stories.js | 0 .../components/02-molecules/map/map.twig | 0 .../navigation-card/navigation-card.scss | 0 .../navigation-card.stories.js | 0 .../navigation-card/navigation-card.twig | 0 .../02-molecules/next-step/next-step.scss | 0 .../next-step/next-step.stories.js | 0 .../02-molecules/next-step/next-step.twig | 0 .../02-molecules/pagination/pagination.scss | 0 .../pagination/pagination.stories.js | 0 .../02-molecules/pagination/pagination.twig | 0 .../02-molecules/promo-card/promo-card.scss | 0 .../promo-card/promo-card.stories.js | 0 .../02-molecules/promo-card/promo-card.twig | 0 .../publication-card/publication-card.scss | 0 .../publication-card.stories.js | 0 .../publication-card/publication-card.twig | 0 .../components/02-molecules/quote/quote.scss | 0 .../02-molecules/quote/quote.stories.js | 0 .../components/02-molecules/quote/quote.twig | 0 .../02-molecules/search/search.scss | 0 .../02-molecules/search/search.stories.js | 0 .../02-molecules/search/search.twig | 0 .../service-card/service-card.scss | 0 .../service-card/service-card.stories.js | 0 .../service-card/service-card.twig | 0 .../single-filter/single-filter.scss | 0 .../single-filter/single-filter.stories.js | 0 .../single-filter/single-filter.twig | 0 .../02-molecules/snippet/snippet.scss | 0 .../02-molecules/snippet/snippet.stories.js | 0 .../02-molecules/snippet/snippet.twig | 0 .../subject-card/subject-card.scss | 0 .../subject-card/subject-card.stories.js | 0 .../subject-card/subject-card.twig | 0 .../table-of-contents/table-of-contents.js | 0 .../table-of-contents/table-of-contents.scss | 0 .../table-of-contents.stories.js | 0 .../components/02-molecules/tabs/tabs.js | 0 .../components/02-molecules/tabs/tabs.scss | 0 .../02-molecules/tabs/tabs.stories.js | 0 .../components/02-molecules/tabs/tabs.twig | 0 .../02-molecules/tag-list/tag-list.stories.js | 0 .../02-molecules/tag-list/tag-list.twig | 0 .../02-molecules/tooltip/tooltip.js | 0 .../02-molecules/tooltip/tooltip.scss | 0 .../02-molecules/tooltip/tooltip.stories.js | 0 .../02-molecules/tooltip/tooltip.twig | 0 .../video-player/video-player.scss | 0 .../video-player/video-player.stories.js | 0 .../video-player/video-player.twig | 0 .../components/03-organisms/alert/alert.js | 0 .../components/03-organisms/alert/alert.scss | 0 .../03-organisms/alert/alert.stories.js | 0 .../components/03-organisms/alert/alert.twig | 0 .../03-organisms/back-to-top/back-to-top.scss | 0 .../back-to-top/back-to-top.stories.js | 0 .../back-to-top/back-to-top.stories.scss | 0 .../03-organisms/back-to-top/back-to-top.twig | 0 .../03-organisms/banner/banner.scss | 0 .../03-organisms/banner/banner.stories.js | 0 .../03-organisms/banner/banner.stories.scss | 0 .../03-organisms/banner/banner.stories.twig | 0 .../03-organisms/banner/banner.twig | 0 .../03-organisms/campaign/campaign.scss | 0 .../03-organisms/campaign/campaign.stories.js | 0 .../03-organisms/campaign/campaign.twig | 0 .../03-organisms/footer/footer.scss | 0 .../03-organisms/footer/footer.stories.js | 0 .../03-organisms/footer/footer.stories.twig | 0 .../03-organisms/footer/footer.twig | 0 .../03-organisms/header/header.scss | 0 .../03-organisms/header/header.stories.js | 0 .../03-organisms/header/header.stories.twig | 0 .../03-organisms/header/header.twig | 0 .../components/03-organisms/list/list.scss | 0 .../03-organisms/list/list.stories.js | 0 .../components/03-organisms/list/list.twig | 0 .../03-organisms/message/message.scss | 0 .../03-organisms/message/message.stories.js | 0 .../03-organisms/message/message.twig | 0 .../mobile-navigation-close.twig | 0 .../mobile-navigation-menu.twig | 0 .../mobile-navigation-trigger.twig | 0 .../mobile-navigation/mobile-navigation.scss | 0 .../mobile-navigation.stories.js | 0 .../mobile-navigation.stories.scss | 0 .../mobile-navigation.stories.twig | 0 .../mobile-navigation/mobile-navigation.twig | 0 .../03-organisms/navigation/navigation.scss | 0 .../navigation/navigation.stories.js | 0 .../03-organisms/navigation/navigation.twig | 0 .../components/03-organisms/promo/promo.scss | 0 .../03-organisms/promo/promo.stories.js | 0 .../components/03-organisms/promo/promo.twig | 0 .../side-navigation/side-navigation.scss | 0 .../side-navigation.stories.js | 0 .../side-navigation/side-navigation.twig | 0 .../03-organisms/skip-link/skip-link.scss | 0 .../skip-link/skip-link.stories.js | 0 .../03-organisms/skip-link/skip-link.twig | 0 .../components/03-organisms/slider/slide.twig | 0 .../components/03-organisms/slider/slider.js | 0 .../03-organisms/slider/slider.scss | 0 .../03-organisms/slider/slider.stories.js | 0 .../03-organisms/slider/slider.twig | 0 .../03-organisms/slider/slider.utils.js | 0 .../social-links/social-links.scss | 0 .../social-links/social-links.stories.js | 0 .../social-links/social-links.twig | 0 .../03-organisms/webform/webform.scss | 0 .../03-organisms/webform/webform.stories.js | 0 .../03-organisms/webform/webform.twig | 0 .../components/04-templates/event}/.gitkeep | 0 .../components/04-templates/page/page.twig | 0 .../components/style.css_variables.scss | 0 .../components/style.editor.scss | 0 .../civictheme_library/components/style.scss | 0 .../components/style.stories.scss | 0 .../components/variables.base.scss | 0 .../components/variables.components.scss | 0 .../civictheme_library/package.json | 0 .../scripts/extract_css_colors_to_csv.php | 0 .../civictheme_library/webpack/assets.js | 0 .../webpack/babel-plugin-script-wrapper.js | 0 .../civictheme_library/webpack/css.js | 0 .../webpack/css_variables.js | 0 .../civictheme_library/webpack/info.js | 0 .../civictheme_library/webpack/libraries.js | 0 .../webpack/webpack.common.js | 0 .../civictheme_library/webpack/webpack.dev.js | 0 .../webpack/webpack.prod.js | 0 .../civictheme_starter_kit/.editorconfig | 0 .../civictheme_starter_kit/.eslintignore | 0 .../civictheme_starter_kit/.eslintrc.yml | 0 .../civictheme_starter_kit/.gitignore | 0 .../civictheme/civictheme_starter_kit/.nvmrc | 0 .../.storybook/addon-config.js | 0 .../.storybook/components_css.stories.js | 0 .../.storybook/drupal_behaviors.js | 0 .../.storybook/importer.scss_variables.js | 0 .../civictheme_starter_kit/.storybook/main.js | 0 .../.storybook/manager-head.html | 0 .../.storybook/manager.js | 0 .../.storybook/preview.js | 0 .../.storybook/setupTwig.js | 0 .../.storybook/static/api/alerts1.json | 0 .../.storybook/static/api/alerts2.json | 0 .../.storybook/static/api/alerts3.json | 0 .../.storybook/theme.js | 0 .../civictheme_starter_kit/.stylelintrc.json | 0 .../civictheme_starter_kit/README.md | 0 .../civictheme_starter_kit_background_1.png | Bin .../civictheme_starter_kit_background_2.png | Bin .../civictheme_starter_kit/assets/favicon.ico | Bin .../assets/fonts}/.gitkeep | 0 .../DancingScript/DancingScript-Regular.ttf | Bin .../DancingScript/DancingScript-Regular.woff | Bin .../DancingScript/DancingScript-Regular.woff2 | Bin .../assets/fonts/roboto/Roboto-Black.eot | Bin .../assets/fonts/roboto/Roboto-Black.ttf | Bin .../assets/fonts/roboto/Roboto-Black.woff | Bin .../assets/fonts/roboto/Roboto-Bold.eot | Bin .../assets/fonts/roboto/Roboto-Bold.ttf | Bin .../assets/fonts/roboto/Roboto-Bold.woff | Bin .../assets/fonts/roboto/Roboto-BoldItalic.eot | Bin .../assets/fonts/roboto/Roboto-BoldItalic.ttf | Bin .../fonts/roboto/Roboto-BoldItalic.woff | Bin .../assets/fonts/roboto/Roboto-Italic.eot | Bin .../assets/fonts/roboto/Roboto-Italic.ttf | Bin .../assets/fonts/roboto/Roboto-Italic.woff | Bin .../assets/fonts/roboto/Roboto-Medium.eot | Bin .../assets/fonts/roboto/Roboto-Medium.ttf | Bin .../assets/fonts/roboto/Roboto-Medium.woff | Bin .../fonts/roboto/Roboto-MediumItalic.eot | Bin .../fonts/roboto/Roboto-MediumItalic.ttf | Bin .../fonts/roboto/Roboto-MediumItalic.woff | Bin .../assets/fonts/roboto/Roboto-Regular.eot | Bin .../assets/fonts/roboto/Roboto-Regular.ttf | Bin .../assets/fonts/roboto/Roboto-Regular.woff | Bin .../assets/fonts/roboto/Roboto-Thin.eot | Bin .../assets/fonts/roboto/Roboto-Thin.ttf | Bin .../assets/fonts/roboto/Roboto-Thin.woff | Bin .../assets/icons/account.svg | 0 .../assets/icons/approve.svg | 0 .../assets/icons/bars.svg | 0 .../assets/icons/bullet.svg | 0 .../assets/icons/calendar-1.svg | 0 .../assets/icons/calendar-2.svg | 0 .../assets/icons/call.svg | 0 .../assets/icons/cancel.svg | 0 .../assets/icons/checked.svg | 0 .../assets/icons/close-outline.svg | 0 .../assets/icons/close.svg | 0 .../assets/icons/down-arrow-1.svg | 0 .../assets/icons/down-arrow-2.svg | 0 .../assets/icons/down-arrow-large.svg | 0 .../assets/icons/download-file.svg | 0 .../assets/icons/download.svg | 0 .../assets/icons/exclamation-mark-1.svg | 0 .../assets/icons/exclamation-mark-2.svg | 0 .../assets/icons/exclamation-mark-3.svg | 0 .../assets/icons/eye.svg | 0 .../assets/icons/facebook.svg | 0 .../assets/icons/help.svg | 0 .../assets/icons/image.svg | 0 .../assets/icons/information-mark.svg | 0 .../assets/icons/left-arrow-outline.svg | 0 .../assets/icons/left-arrow.svg | 0 .../assets/icons/linkedin.svg | 0 .../assets/icons/magnifier.svg | 0 .../assets/icons/map.svg | 0 .../assets/icons/megaphone.svg | 0 .../assets/icons/mortarboard.svg | 0 .../assets/icons/newspaper.svg | 0 .../assets/icons/pdf-file.svg | 0 .../assets/icons/progress.svg | 0 .../assets/icons/right-arrow-1.svg | 0 .../assets/icons/right-arrow-2.svg | 0 .../assets/icons/select-box.svg | 0 .../assets/icons/share.svg | 0 .../assets/icons/square.svg | 0 .../assets/icons/to-do.svg | 0 .../assets/icons/twitter.svg | 0 .../assets/icons/up-arrow-large.svg | 0 .../assets/icons/up-arrow.svg | 0 .../assets/icons/upper-arrow.svg | 0 .../assets/icons/upper-right-arrow.svg | 0 .../assets/icons/watch.svg | 0 .../assets/icons/word-file.svg | 0 .../assets/images/demo1.jpg | Bin .../assets/images/demo2.jpg | Bin .../assets/images/demo3.jpg | Bin .../assets/images/demo4.jpg | Bin .../assets/images/demo5.jpg | Bin .../assets/images/demo6.jpg | Bin .../assets/images/facebook.svg | 0 .../assets/images/linkedin.svg | 0 .../assets/images/twitter.svg | 0 .../assets/js}/.gitkeep | 0 .../logos/logo_primary_dark_desktop.svg | 0 .../assets/logos/logo_primary_dark_mobile.svg | 0 .../logos/logo_primary_light_desktop.svg | 0 .../logos/logo_primary_light_mobile.svg | 0 .../logos/logo_secondary_dark_desktop.png | Bin .../logos/logo_secondary_dark_mobile.png | Bin .../logos/logo_secondary_light_desktop.png | Bin .../logos/logo_secondary_light_mobile.png | Bin .../assets/sass/block/_local-tasks.scss | 0 .../assets/sass/editor/_index.scss | 0 .../assets/sass/theme.scss | 0 .../assets/videos/demo.avi | Bin .../assets/videos/demo.mp4 | Bin .../assets/videos/demo.webm | Bin .../assets/videos/demo_poster.png | Bin .../civictheme_starter_kit.info.yml | 0 .../civictheme_starter_kit.libraries.yml | 0 .../civictheme_starter_kit.theme | 0 .../components/00-base}/.gitkeep | 0 .../components/01-atoms}/.gitkeep | 0 .../01-atoms/demo-button/demo-button.js | 0 .../01-atoms/demo-button/demo-button.scss | 0 .../demo-button/demo-button.stories.js | 0 .../01-atoms/demo-button/demo-button.twig | 0 .../components/02-molecules}/.gitkeep | 0 .../navigation-card.stories.js | 0 .../navigation-card/navigation-card.twig | 0 .../components/03-organisms}/.gitkeep | 0 .../03-organisms/header/header.twig | 0 .../components/04-templates}/.gitkeep | 0 .../components/variables.base.scss | 0 .../components/variables.components.scss | 0 .../civictheme_starter_kit/composer.json | 0 .../civictheme_starter_kit/gulpfile.js | 0 .../civictheme_starter_kit/logo.svg | 0 .../civictheme_starter_kit/package.json | 0 .../civictheme_starter_kit/screenshot.png | Bin .../scripts/add_phpcs_exclusions.php | 0 .../civictheme_starter_kit/templates/.gitkeep | 0 .../templates/form/input--submit.html.twig | 0 .../civictheme_starter_kit/webpack/assets.js | 0 .../babel-plugin-drupal-behavior-wrapper.js | 0 .../webpack/components_css.js | 0 .../webpack/css_variables.js | 0 .../webpack/editor_css.js | 0 .../webpack/libraries.js | 0 .../webpack/theme_css.js | 0 .../webpack/theme_js.js | 0 .../webpack/webpack.common.js | 0 .../webpack/webpack.dev.js | 0 .../webpack/webpack.prod.js | 0 .../themes/contrib/civictheme/components | 0 .../themes/contrib/civictheme/composer.json | 0 .../block.block.civictheme_content.yml | 0 ...k.block.civictheme_footer_sitebranding.yml | 0 ...k.block.civictheme_header_sitebranding.yml | 0 ....block.civictheme_header_sitebranding2.yml | 0 .../install/block.block.civictheme_help.yml | 0 .../block.block.civictheme_messages.yml | 0 ...k.block.civictheme_primaryadminactions.yml | 0 .../install/block.block.civictheme_tabs.yml | 0 .../block_content.type.civictheme_banner.yml | 0 ...ontent.type.civictheme_component_block.yml | 0 ...tent.type.civictheme_mobile_navigation.yml | 0 .../block_content.type.civictheme_search.yml | 0 ...k_content.type.civictheme_social_links.yml | 0 .../config/install/civictheme.settings.yml | 0 ...override.node.civictheme_alert.promote.yml | 0 ...override.node.civictheme_event.promote.yml | 0 ..._override.node.civictheme_page.promote.yml | 0 ...core.date_format.civictheme_short_date.yml | 0 ..._format.civictheme_short_date_and_time.yml | 0 ...lock_content.civictheme_banner.default.yml | 0 ...ent.civictheme_component_block.default.yml | 0 ...t.civictheme_mobile_navigation.default.yml | 0 ...lock_content.civictheme_search.default.yml | 0 ...ontent.civictheme_social_links.default.yml | 0 ...display.media.civictheme_audio.default.yml | 0 ...y.media.civictheme_audio.media_library.yml | 0 ...play.media.civictheme_document.default.yml | 0 ...edia.civictheme_document.media_library.yml | 0 ..._display.media.civictheme_icon.default.yml | 0 ...ay.media.civictheme_icon.media_library.yml | 0 ...display.media.civictheme_image.default.yml | 0 ...y.media.civictheme_image.media_library.yml | 0 ....media.civictheme_remote_video.default.yml | 0 ....civictheme_remote_video.media_library.yml | 0 ...display.media.civictheme_video.default.yml | 0 ...y.media.civictheme_video.media_library.yml | 0 ..._display.node.civictheme_alert.default.yml | 0 ..._display.node.civictheme_event.default.yml | 0 ...m_display.node.civictheme_page.default.yml | 0 ...paragraph.civictheme_accordion.default.yml | 0 ...aph.civictheme_accordion_panel.default.yml | 0 ...aragraph.civictheme_attachment.default.yml | 0 ...raph.civictheme_automated_list.default.yml | 0 ...y.paragraph.civictheme_callout.default.yml | 0 ....paragraph.civictheme_campaign.default.yml | 0 ...y.paragraph.civictheme_content.default.yml | 0 ...aragraph.civictheme_event_card.default.yml | 0 ...raph.civictheme_event_card_ref.default.yml | 0 ...ay.paragraph.civictheme_iframe.default.yml | 0 ...ragraph.civictheme_manual_list.default.yml | 0 ...splay.paragraph.civictheme_map.default.yml | 0 ...aph.civictheme_navigation_card.default.yml | 0 ...civictheme_navigation_card_ref.default.yml | 0 ...paragraph.civictheme_next_step.default.yml | 0 ...lay.paragraph.civictheme_promo.default.yml | 0 ...aragraph.civictheme_promo_card.default.yml | 0 ...raph.civictheme_promo_card_ref.default.yml | 0 ...ph.civictheme_publication_card.default.yml | 0 ...lay.paragraph.civictheme_quote.default.yml | 0 ...agraph.civictheme_service_card.default.yml | 0 ...ay.paragraph.civictheme_slider.default.yml | 0 ...agraph.civictheme_slider_slide.default.yml | 0 ...ph.civictheme_slider_slide_ref.default.yml | 0 ...y.paragraph.civictheme_snippet.default.yml | 0 ...ragraph.civictheme_snippet_ref.default.yml | 0 ...ragraph.civictheme_social_icon.default.yml | 0 ...agraph.civictheme_subject_card.default.yml | 0 ...ph.civictheme_subject_card_ref.default.yml | 0 ...y.paragraph.civictheme_webform.default.yml | 0 ..._term.civictheme_site_sections.default.yml | 0 ...lock_content.civictheme_banner.default.yml | 0 ...ent.civictheme_component_block.default.yml | 0 ...t.civictheme_mobile_navigation.default.yml | 0 ...lock_content.civictheme_search.default.yml | 0 ...ontent.civictheme_social_links.default.yml | 0 ...display.media.civictheme_audio.default.yml | 0 ...y.media.civictheme_audio.media_library.yml | 0 ...play.media.civictheme_document.default.yml | 0 ...edia.civictheme_document.media_library.yml | 0 ..._display.media.civictheme_icon.default.yml | 0 ...ay.media.civictheme_icon.media_library.yml | 0 ...splay.media.civictheme_image.component.yml | 0 ...display.media.civictheme_image.default.yml | 0 ...isplay.media.civictheme_image.embedded.yml | 0 ...y.media.civictheme_image.media_library.yml | 0 ....media.civictheme_remote_video.default.yml | 0 ...lay.media.civictheme_remote_video.full.yml | 0 ....civictheme_remote_video.media_library.yml | 0 ...display.media.civictheme_video.default.yml | 0 ...ew_display.media.civictheme_video.full.yml | 0 ...y.media.civictheme_video.media_library.yml | 0 ..._display.node.civictheme_alert.default.yml | 0 ...theme_event.civictheme_navigation_card.yml | 0 ...civictheme_event.civictheme_promo_card.yml | 0 ...victheme_event.civictheme_slider_slide.yml | 0 ..._display.node.civictheme_event.default.yml | 0 ...ctheme_page.civictheme_navigation_card.yml | 0 ....civictheme_page.civictheme_promo_card.yml | 0 ...ivictheme_page.civictheme_slider_slide.yml | 0 ...w_display.node.civictheme_page.default.yml | 0 ...paragraph.civictheme_accordion.default.yml | 0 ...aph.civictheme_accordion_panel.default.yml | 0 ...aragraph.civictheme_attachment.default.yml | 0 ...raph.civictheme_automated_list.default.yml | 0 ...y.paragraph.civictheme_callout.default.yml | 0 ....paragraph.civictheme_campaign.default.yml | 0 ...y.paragraph.civictheme_content.default.yml | 0 ...aragraph.civictheme_event_card.default.yml | 0 ...raph.civictheme_event_card_ref.default.yml | 0 ...ay.paragraph.civictheme_iframe.default.yml | 0 ...ragraph.civictheme_manual_list.default.yml | 0 ...splay.paragraph.civictheme_map.default.yml | 0 ...aph.civictheme_navigation_card.default.yml | 0 ...civictheme_navigation_card_ref.default.yml | 0 ...paragraph.civictheme_next_step.default.yml | 0 ...lay.paragraph.civictheme_promo.default.yml | 0 ...aragraph.civictheme_promo_card.default.yml | 0 ...raph.civictheme_promo_card_ref.default.yml | 0 ...ph.civictheme_publication_card.default.yml | 0 ...lay.paragraph.civictheme_quote.default.yml | 0 ...agraph.civictheme_service_card.default.yml | 0 ...ay.paragraph.civictheme_slider.default.yml | 0 ...agraph.civictheme_slider_slide.default.yml | 0 ...ph.civictheme_slider_slide_ref.default.yml | 0 ...y.paragraph.civictheme_snippet.default.yml | 0 ...ragraph.civictheme_snippet_ref.default.yml | 0 ...ragraph.civictheme_social_icon.default.yml | 0 ...agraph.civictheme_subject_card.default.yml | 0 ...ph.civictheme_subject_card_ref.default.yml | 0 ...y.paragraph.civictheme_webform.default.yml | 0 .../core.entity_view_mode.media.component.yml | 0 .../core.entity_view_mode.media.embedded.yml | 0 ...w_mode.node.civictheme_navigation_card.yml | 0 ...y_view_mode.node.civictheme_promo_card.yml | 0 ...view_mode.node.civictheme_slider_slide.yml | 0 ...tity_view_mode.node.civictheme_snippet.yml | 0 .../editor.editor.civictheme_rich_text.yml | 0 ...heme_banner.field_c_b_background_image.yml | 0 ...eme_banner.field_c_b_banner_blend_mode.yml | 0 ...ivictheme_banner.field_c_b_banner_type.yml | 0 ...ctheme_banner.field_c_b_featured_image.yml | 0 ...tent.civictheme_banner.field_c_b_theme.yml | 0 ...e_component_block.field_c_b_components.yml | 0 ...eme_mobile_navigation.field_c_b_bottom.yml | 0 ...heme_mobile_navigation.field_c_b_theme.yml | 0 ...ctheme_mobile_navigation.field_c_b_top.yml | 0 ...bile_navigation.field_c_b_trigger_text.yml | 0 ...ile_navigation.field_c_b_trigger_theme.yml | 0 ...ntent.civictheme_search.field_c_b_link.yml | 0 ...me_social_links.field_c_b_social_icons.yml | 0 ...ivictheme_social_links.field_c_b_theme.yml | 0 ...eme_social_links.field_c_b_with_border.yml | 0 ....civictheme_audio.field_c_m_audio_file.yml | 0 ...civictheme_document.field_c_m_document.yml | 0 ...d.media.civictheme_icon.field_c_m_icon.yml | 0 ...dia.civictheme_image.field_c_m_caption.yml | 0 ...media.civictheme_image.field_c_m_image.yml | 0 ...me_remote_video.field_c_m_oembed_video.yml | 0 ...heme_remote_video.field_c_m_transcript.yml | 0 ...remote_video.field_c_m_transcript_link.yml | 0 ....civictheme_video.field_c_m_transcript.yml | 0 ...ctheme_video.field_c_m_transcript_link.yml | 0 ....civictheme_video.field_c_m_video_file.yml | 0 ..._alert.field_c_n_alert_page_visibility.yml | 0 ....civictheme_alert.field_c_n_alert_type.yml | 0 ...d.node.civictheme_alert.field_c_n_body.yml | 0 ....civictheme_alert.field_c_n_date_range.yml | 0 ...civictheme_event.field_c_n_attachments.yml | 0 ...d.node.civictheme_event.field_c_n_body.yml | 0 ...me_event.field_c_n_custom_last_updated.yml | 0 ....civictheme_event.field_c_n_date_range.yml | 0 ...de.civictheme_event.field_c_n_location.yml | 0 ...heme_event.field_c_n_show_last_updated.yml | 0 ...de.civictheme_event.field_c_n_show_toc.yml | 0 ...ivictheme_event.field_c_n_site_section.yml | 0 ...ode.civictheme_event.field_c_n_summary.yml | 0 ...e.civictheme_event.field_c_n_thumbnail.yml | 0 ...node.civictheme_event.field_c_n_topics.yml | 0 ...theme_event.field_c_n_vertical_spacing.yml | 0 ...theme_page.field_c_n_banner_background.yml | 0 ...theme_page.field_c_n_banner_blend_mode.yml | 0 ...theme_page.field_c_n_banner_components.yml | 0 ..._page.field_c_n_banner_components_bott.yml | 0 ...e_page.field_c_n_banner_featured_image.yml | 0 ..._page.field_c_n_banner_hide_breadcrumb.yml | 0 ...civictheme_page.field_c_n_banner_theme.yml | 0 ...civictheme_page.field_c_n_banner_title.yml | 0 ....civictheme_page.field_c_n_banner_type.yml | 0 ...e.civictheme_page.field_c_n_components.yml | 0 ...eme_page.field_c_n_custom_last_updated.yml | 0 ...civictheme_page.field_c_n_hide_sidebar.yml | 0 ...de.civictheme_page.field_c_n_hide_tags.yml | 0 ...theme_page.field_c_n_show_last_updated.yml | 0 ...ode.civictheme_page.field_c_n_show_toc.yml | 0 ...civictheme_page.field_c_n_site_section.yml | 0 ...node.civictheme_page.field_c_n_summary.yml | 0 ...de.civictheme_page.field_c_n_thumbnail.yml | 0 ....node.civictheme_page.field_c_n_topics.yml | 0 ...ctheme_page.field_c_n_vertical_spacing.yml | 0 ...ictheme_accordion.field_c_p_background.yml | 0 ....civictheme_accordion.field_c_p_expand.yml | 0 ....civictheme_accordion.field_c_p_panels.yml | 0 ...h.civictheme_accordion.field_c_p_theme.yml | 0 ...e_accordion.field_c_p_vertical_spacing.yml | 0 ...heme_accordion_panel.field_c_p_content.yml | 0 ...theme_accordion_panel.field_c_p_expand.yml | 0 ...ctheme_accordion_panel.field_c_p_title.yml | 0 ...theme_attachment.field_c_p_attachments.yml | 0 ...ctheme_attachment.field_c_p_background.yml | 0 ...ivictheme_attachment.field_c_p_content.yml | 0 ....civictheme_attachment.field_c_p_theme.yml | 0 ....civictheme_attachment.field_c_p_title.yml | 0 ..._attachment.field_c_p_vertical_spacing.yml | 0 ...me_automated_list.field_c_p_background.yml | 0 ...theme_automated_list.field_c_p_content.yml | 0 ...mated_list.field_c_p_list_column_count.yml | 0 ...mated_list.field_c_p_list_content_type.yml | 0 ...tomated_list.field_c_p_list_fill_width.yml | 0 ...omated_list.field_c_p_list_filters_exp.yml | 0 ...tomated_list.field_c_p_list_item_theme.yml | 0 ...mated_list.field_c_p_list_item_view_as.yml | 0 ...me_automated_list.field_c_p_list_limit.yml | 0 ...tomated_list.field_c_p_list_limit_type.yml | 0 ...tomated_list.field_c_p_list_link_above.yml | 0 ...tomated_list.field_c_p_list_link_below.yml | 0 ...ated_list.field_c_p_list_site_sections.yml | 0 ...e_automated_list.field_c_p_list_topics.yml | 0 ...eme_automated_list.field_c_p_list_type.yml | 0 ...ictheme_automated_list.field_c_p_theme.yml | 0 ...ictheme_automated_list.field_c_p_title.yml | 0 ...omated_list.field_c_p_vertical_spacing.yml | 0 ...h.civictheme_callout.field_c_p_content.yml | 0 ...aph.civictheme_callout.field_c_p_links.yml | 0 ...aph.civictheme_callout.field_c_p_theme.yml | 0 ...aph.civictheme_callout.field_c_p_title.yml | 0 ...eme_callout.field_c_p_vertical_spacing.yml | 0 ....civictheme_campaign.field_c_p_content.yml | 0 ...aph.civictheme_campaign.field_c_p_date.yml | 0 ...ph.civictheme_campaign.field_c_p_image.yml | 0 ...heme_campaign.field_c_p_image_position.yml | 0 ...ph.civictheme_campaign.field_c_p_links.yml | 0 ...ph.civictheme_campaign.field_c_p_theme.yml | 0 ...ph.civictheme_campaign.field_c_p_title.yml | 0 ...h.civictheme_campaign.field_c_p_topics.yml | 0 ...me_campaign.field_c_p_vertical_spacing.yml | 0 ...ivictheme_content.field_c_p_background.yml | 0 ...h.civictheme_content.field_c_p_content.yml | 0 ...aph.civictheme_content.field_c_p_theme.yml | 0 ...eme_content.field_c_p_vertical_spacing.yml | 0 ...ctheme_event_card.field_c_p_date_range.yml | 0 ....civictheme_event_card.field_c_p_image.yml | 0 ...h.civictheme_event_card.field_c_p_link.yml | 0 ...victheme_event_card.field_c_p_location.yml | 0 ...ivictheme_event_card.field_c_p_summary.yml | 0 ....civictheme_event_card.field_c_p_theme.yml | 0 ....civictheme_event_card.field_c_p_title.yml | 0 ...civictheme_event_card.field_c_p_topics.yml | 0 ...eme_event_card_ref.field_c_p_reference.yml | 0 ...ictheme_event_card_ref.field_c_p_theme.yml | 0 ...civictheme_iframe.field_c_p_attributes.yml | 0 ...civictheme_iframe.field_c_p_background.yml | 0 ...aph.civictheme_iframe.field_c_p_height.yml | 0 ...raph.civictheme_iframe.field_c_p_theme.yml | 0 ...agraph.civictheme_iframe.field_c_p_url.yml | 0 ...heme_iframe.field_c_p_vertical_spacing.yml | 0 ...raph.civictheme_iframe.field_c_p_width.yml | 0 ...theme_manual_list.field_c_p_background.yml | 0 ...victheme_manual_list.field_c_p_content.yml | 0 ...anual_list.field_c_p_list_column_count.yml | 0 ..._manual_list.field_c_p_list_fill_width.yml | 0 ...theme_manual_list.field_c_p_list_items.yml | 0 ..._manual_list.field_c_p_list_link_above.yml | 0 ..._manual_list.field_c_p_list_link_below.yml | 0 ...civictheme_manual_list.field_c_p_theme.yml | 0 ...civictheme_manual_list.field_c_p_title.yml | 0 ...manual_list.field_c_p_vertical_spacing.yml | 0 ...graph.civictheme_map.field_c_p_address.yml | 0 ...ph.civictheme_map.field_c_p_background.yml | 0 ...aph.civictheme_map.field_c_p_embed_url.yml | 0 ...ragraph.civictheme_map.field_c_p_theme.yml | 0 ...ictheme_map.field_c_p_vertical_spacing.yml | 0 ...aph.civictheme_map.field_c_p_view_link.yml | 0 ...ctheme_navigation_card.field_c_p_image.yml | 0 ...ictheme_navigation_card.field_c_p_link.yml | 0 ...tion_card.field_c_p_show_image_as_icon.yml | 0 ...heme_navigation_card.field_c_p_summary.yml | 0 ...ctheme_navigation_card.field_c_p_theme.yml | 0 ...ctheme_navigation_card.field_c_p_title.yml | 0 ...avigation_card_ref.field_c_p_reference.yml | 0 ...me_navigation_card_ref.field_c_p_theme.yml | 0 ...civictheme_next_step.field_c_p_content.yml | 0 ...ph.civictheme_next_step.field_c_p_link.yml | 0 ...h.civictheme_next_step.field_c_p_theme.yml | 0 ...h.civictheme_next_step.field_c_p_title.yml | 0 ...e_next_step.field_c_p_vertical_spacing.yml | 0 ...aph.civictheme_promo.field_c_p_content.yml | 0 ...agraph.civictheme_promo.field_c_p_link.yml | 0 ...graph.civictheme_promo.field_c_p_theme.yml | 0 ...graph.civictheme_promo.field_c_p_title.yml | 0 ...theme_promo.field_c_p_vertical_spacing.yml | 0 ....civictheme_promo_card.field_c_p_image.yml | 0 ...h.civictheme_promo_card.field_c_p_link.yml | 0 ...victheme_promo_card.field_c_p_subtitle.yml | 0 ...ivictheme_promo_card.field_c_p_summary.yml | 0 ....civictheme_promo_card.field_c_p_theme.yml | 0 ....civictheme_promo_card.field_c_p_title.yml | 0 ...civictheme_promo_card.field_c_p_topics.yml | 0 ...eme_promo_card_ref.field_c_p_reference.yml | 0 ...ictheme_promo_card_ref.field_c_p_theme.yml | 0 ...me_publication_card.field_c_p_document.yml | 0 ...theme_publication_card.field_c_p_image.yml | 0 ...eme_publication_card.field_c_p_summary.yml | 0 ...theme_publication_card.field_c_p_theme.yml | 0 ...theme_publication_card.field_c_p_title.yml | 0 ...raph.civictheme_quote.field_c_p_author.yml | 0 ...aph.civictheme_quote.field_c_p_content.yml | 0 ...graph.civictheme_quote.field_c_p_theme.yml | 0 ...theme_quote.field_c_p_vertical_spacing.yml | 0 ...ivictheme_service_card.field_c_p_links.yml | 0 ...ivictheme_service_card.field_c_p_theme.yml | 0 ...ivictheme_service_card.field_c_p_title.yml | 0 ...civictheme_slider.field_c_p_background.yml | 0 ...aph.civictheme_slider.field_c_p_slides.yml | 0 ...raph.civictheme_slider.field_c_p_theme.yml | 0 ...raph.civictheme_slider.field_c_p_title.yml | 0 ...heme_slider.field_c_p_vertical_spacing.yml | 0 ...ictheme_slider_slide.field_c_p_content.yml | 0 ...civictheme_slider_slide.field_c_p_date.yml | 0 ...ivictheme_slider_slide.field_c_p_image.yml | 0 ..._slider_slide.field_c_p_image_position.yml | 0 ...ivictheme_slider_slide.field_c_p_links.yml | 0 ...ivictheme_slider_slide.field_c_p_theme.yml | 0 ...ivictheme_slider_slide.field_c_p_title.yml | 0 ...victheme_slider_slide.field_c_p_topics.yml | 0 ...der_slide_ref.field_c_p_image_position.yml | 0 ...e_slider_slide_ref.field_c_p_link_text.yml | 0 ...e_slider_slide_ref.field_c_p_reference.yml | 0 ...theme_slider_slide_ref.field_c_p_theme.yml | 0 ...raph.civictheme_snippet.field_c_p_link.yml | 0 ...h.civictheme_snippet.field_c_p_summary.yml | 0 ...aph.civictheme_snippet.field_c_p_theme.yml | 0 ...aph.civictheme_snippet.field_c_p_title.yml | 0 ...ph.civictheme_snippet.field_c_p_topics.yml | 0 ...ctheme_snippet_ref.field_c_p_reference.yml | 0 ...civictheme_snippet_ref.field_c_p_theme.yml | 0 ....civictheme_social_icon.field_c_p_icon.yml | 0 ....civictheme_social_icon.field_c_p_link.yml | 0 ...ivictheme_subject_card.field_c_p_image.yml | 0 ...civictheme_subject_card.field_c_p_link.yml | 0 ...ivictheme_subject_card.field_c_p_theme.yml | 0 ...ivictheme_subject_card.field_c_p_title.yml | 0 ...e_subject_card_ref.field_c_p_reference.yml | 0 ...theme_subject_card_ref.field_c_p_theme.yml | 0 ...ivictheme_webform.field_c_p_background.yml | 0 ...aph.civictheme_webform.field_c_p_theme.yml | 0 ...eme_webform.field_c_p_vertical_spacing.yml | 0 ...h.civictheme_webform.field_c_p_webform.yml | 0 ...ock_content.field_c_b_background_image.yml | 0 ...ck_content.field_c_b_banner_blend_mode.yml | 0 ...ge.block_content.field_c_b_banner_type.yml | 0 ...storage.block_content.field_c_b_bottom.yml | 0 ...age.block_content.field_c_b_components.yml | 0 ...block_content.field_c_b_featured_image.yml | 0 ...d.storage.block_content.field_c_b_link.yml | 0 ...e.block_content.field_c_b_social_icons.yml | 0 ....storage.block_content.field_c_b_theme.yml | 0 ...ld.storage.block_content.field_c_b_top.yml | 0 ...e.block_content.field_c_b_trigger_text.yml | 0 ....block_content.field_c_b_trigger_theme.yml | 0 ...ge.block_content.field_c_b_with_border.yml | 0 ...eld.storage.media.field_c_m_audio_file.yml | 0 .../field.storage.media.field_c_m_caption.yml | 0 ...field.storage.media.field_c_m_document.yml | 0 .../field.storage.media.field_c_m_icon.yml | 0 .../field.storage.media.field_c_m_image.yml | 0 ...d.storage.media.field_c_m_oembed_video.yml | 0 ...eld.storage.media.field_c_m_transcript.yml | 0 ...torage.media.field_c_m_transcript_link.yml | 0 ...eld.storage.media.field_c_m_video_file.yml | 0 ...e.node.field_c_n_alert_page_visibility.yml | 0 ...ield.storage.node.field_c_n_alert_type.yml | 0 ...eld.storage.node.field_c_n_attachments.yml | 0 ...orage.node.field_c_n_banner_background.yml | 0 ...orage.node.field_c_n_banner_blend_mode.yml | 0 ...orage.node.field_c_n_banner_components.yml | 0 ....node.field_c_n_banner_components_bott.yml | 0 ...e.node.field_c_n_banner_featured_image.yml | 0 ....node.field_c_n_banner_hide_breadcrumb.yml | 0 ...ld.storage.node.field_c_n_banner_theme.yml | 0 ...ld.storage.node.field_c_n_banner_title.yml | 0 ...eld.storage.node.field_c_n_banner_type.yml | 0 .../field.storage.node.field_c_n_body.yml | 0 ...ield.storage.node.field_c_n_components.yml | 0 ...age.node.field_c_n_custom_last_updated.yml | 0 ...ield.storage.node.field_c_n_date_range.yml | 0 ...ld.storage.node.field_c_n_hide_sidebar.yml | 0 ...field.storage.node.field_c_n_hide_tags.yml | 0 .../field.storage.node.field_c_n_location.yml | 0 ...orage.node.field_c_n_show_last_updated.yml | 0 .../field.storage.node.field_c_n_show_toc.yml | 0 ...ld.storage.node.field_c_n_site_section.yml | 0 .../field.storage.node.field_c_n_summary.yml | 0 ...field.storage.node.field_c_n_thumbnail.yml | 0 .../field.storage.node.field_c_n_topics.yml | 0 ...torage.node.field_c_n_vertical_spacing.yml | 0 ...ld.storage.paragraph.field_c_p_address.yml | 0 ...torage.paragraph.field_c_p_attachments.yml | 0 ...storage.paragraph.field_c_p_attributes.yml | 0 ...eld.storage.paragraph.field_c_p_author.yml | 0 ...storage.paragraph.field_c_p_background.yml | 0 ...ield.storage.paragraph.field_c_p_cards.yml | 0 ...ld.storage.paragraph.field_c_p_content.yml | 0 ...field.storage.paragraph.field_c_p_date.yml | 0 ...storage.paragraph.field_c_p_date_range.yml | 0 ...rage.paragraph.field_c_p_default_panel.yml | 0 ...d.storage.paragraph.field_c_p_document.yml | 0 ....storage.paragraph.field_c_p_embed_url.yml | 0 ...eld.storage.paragraph.field_c_p_expand.yml | 0 ...torage.paragraph.field_c_p_footer_link.yml | 0 ...torage.paragraph.field_c_p_header_link.yml | 0 ...eld.storage.paragraph.field_c_p_height.yml | 0 ...field.storage.paragraph.field_c_p_icon.yml | 0 ...ield.storage.paragraph.field_c_p_image.yml | 0 ...age.paragraph.field_c_p_image_position.yml | 0 ...field.storage.paragraph.field_c_p_link.yml | 0 ....storage.paragraph.field_c_p_link_text.yml | 0 ...ield.storage.paragraph.field_c_p_links.yml | 0 ....paragraph.field_c_p_list_column_count.yml | 0 ....paragraph.field_c_p_list_content_type.yml | 0 ...ge.paragraph.field_c_p_list_fill_width.yml | 0 ...e.paragraph.field_c_p_list_filters_exp.yml | 0 ...ge.paragraph.field_c_p_list_item_theme.yml | 0 ....paragraph.field_c_p_list_item_view_as.yml | 0 ...storage.paragraph.field_c_p_list_items.yml | 0 ...storage.paragraph.field_c_p_list_limit.yml | 0 ...ge.paragraph.field_c_p_list_limit_type.yml | 0 ...ge.paragraph.field_c_p_list_link_above.yml | 0 ...ge.paragraph.field_c_p_list_link_below.yml | 0 ...paragraph.field_c_p_list_site_sections.yml | 0 ...torage.paragraph.field_c_p_list_topics.yml | 0 ....storage.paragraph.field_c_p_list_type.yml | 0 ...d.storage.paragraph.field_c_p_location.yml | 0 ...eld.storage.paragraph.field_c_p_panels.yml | 0 ....storage.paragraph.field_c_p_reference.yml | 0 ...paragraph.field_c_p_show_image_as_icon.yml | 0 ...eld.storage.paragraph.field_c_p_slides.yml | 0 ...d.storage.paragraph.field_c_p_subtitle.yml | 0 ...ld.storage.paragraph.field_c_p_summary.yml | 0 ...ield.storage.paragraph.field_c_p_theme.yml | 0 ...ield.storage.paragraph.field_c_p_title.yml | 0 ...eld.storage.paragraph.field_c_p_topics.yml | 0 .../field.storage.paragraph.field_c_p_url.yml | 0 ...e.paragraph.field_c_p_vertical_spacing.yml | 0 ....storage.paragraph.field_c_p_view_link.yml | 0 ...ld.storage.paragraph.field_c_p_webform.yml | 0 ...ield.storage.paragraph.field_c_p_width.yml | 0 .../filter.format.civictheme_plain_text.yml | 0 .../filter.format.civictheme_rich_text.yml | 0 .../install/image.style.civictheme_medium.yml | 0 ...image.style.civictheme_navigation_card.yml | 0 .../image.style.civictheme_promo_banner.yml | 0 .../image.style.civictheme_promo_card.yml | 0 .../image.style.civictheme_thumbnail.yml | 0 .../image.style.civictheme_topic_desktop.yml | 0 .../image.style.civictheme_topic_mobile.yml | 0 .../install/media.type.civictheme_audio.yml | 0 .../media.type.civictheme_document.yml | 0 .../install/media.type.civictheme_icon.yml | 0 .../install/media.type.civictheme_image.yml | 0 .../media.type.civictheme_remote_video.yml | 0 .../install/media.type.civictheme_video.yml | 0 .../install/node.type.civictheme_alert.yml | 0 .../install/node.type.civictheme_event.yml | 0 .../install/node.type.civictheme_page.yml | 0 ...s.paragraphs_type.civictheme_accordion.yml | 0 ...graphs_type.civictheme_accordion_panel.yml | 0 ....paragraphs_type.civictheme_attachment.yml | 0 ...agraphs_type.civictheme_automated_list.yml | 0 ...phs.paragraphs_type.civictheme_callout.yml | 0 ...hs.paragraphs_type.civictheme_campaign.yml | 0 ...phs.paragraphs_type.civictheme_content.yml | 0 ....paragraphs_type.civictheme_event_card.yml | 0 ...agraphs_type.civictheme_event_card_ref.yml | 0 ...aphs.paragraphs_type.civictheme_iframe.yml | 0 ...paragraphs_type.civictheme_manual_list.yml | 0 ...agraphs.paragraphs_type.civictheme_map.yml | 0 ...graphs_type.civictheme_navigation_card.yml | 0 ...hs_type.civictheme_navigation_card_ref.yml | 0 ...s.paragraphs_type.civictheme_next_step.yml | 0 ...raphs.paragraphs_type.civictheme_promo.yml | 0 ....paragraphs_type.civictheme_promo_card.yml | 0 ...agraphs_type.civictheme_promo_card_ref.yml | 0 ...raphs_type.civictheme_publication_card.yml | 0 ...raphs.paragraphs_type.civictheme_quote.yml | 0 ...aragraphs_type.civictheme_service_card.yml | 0 ...aphs.paragraphs_type.civictheme_slider.yml | 0 ...aragraphs_type.civictheme_slider_slide.yml | 0 ...raphs_type.civictheme_slider_slide_ref.yml | 0 ...phs.paragraphs_type.civictheme_snippet.yml | 0 ...paragraphs_type.civictheme_snippet_ref.yml | 0 ...paragraphs_type.civictheme_social_icon.yml | 0 ...aragraphs_type.civictheme_subject_card.yml | 0 ...raphs_type.civictheme_subject_card_ref.yml | 0 ...phs.paragraphs_type.civictheme_webform.yml | 0 .../pathauto.pattern.civictheme_alert.yml | 0 .../pathauto.pattern.civictheme_event.yml | 0 .../pathauto.pattern.civictheme_page.yml | 0 .../install/system.menu.civictheme-footer.yml | 0 ...tem.menu.civictheme-primary-navigation.yml | 0 ...m.menu.civictheme-secondary-navigation.yml | 0 ...my.vocabulary.civictheme_site_sections.yml | 0 .../taxonomy.vocabulary.civictheme_topics.yml | 0 .../user.role.civictheme_content_approver.yml | 0 .../user.role.civictheme_content_author.yml | 0 ...ser.role.civictheme_site_administrator.yml | 0 .../install/views.view.civictheme_alerts.yml | 0 .../views.view.civictheme_automated_list.yml | 0 .../webform.webform.civictheme_enquiry.yml | 0 .../block.block.civictheme_banner.yml | 0 ...theme_footer_acknowledgment_of_country.yml | 0 ...lock.block.civictheme_footer_copyright.yml | 0 .../block.block.civictheme_footer_menu_1.yml | 0 .../block.block.civictheme_footer_menu_2.yml | 0 .../block.block.civictheme_footer_menu_3.yml | 0 .../block.block.civictheme_footer_menu_4.yml | 0 ...k.block.civictheme_footer_social_links.yml | 0 ...ock.block.civictheme_mobile_navigation.yml | 0 ...ck.block.civictheme_primary_navigation.yml | 0 .../block.block.civictheme_search.yml | 0 ....block.civictheme_secondary_navigation.yml | 0 ...block.block.civictheme_side_navigation.yml | 0 .../block.block.civictheme_signup.yml | 0 .../linkit.linkit_profile.civictheme.yml | 0 .../config/optional/media.settings.yml | 0 .../search_api.index.civictheme_content.yml | 0 .../search_api.server.civictheme_database.yml | 0 .../config/optional/search_api.settings.yml | 0 .../optional/search_api_db.settings.yml | 0 .../optional/views.view.civictheme_search.yml | 0 .../config/schema/civictheme.schema.yml | 0 .../contrib/civictheme/includes/accordion.inc | 0 .../contrib/civictheme/includes/alert.inc | 0 .../civictheme/includes/attachment.inc | 0 .../civictheme/includes/automated_list.inc | 0 .../contrib/civictheme/includes/banner.inc | 0 .../civictheme/includes/block_content.inc | 0 .../contrib/civictheme/includes/callout.inc | 0 .../contrib/civictheme/includes/campaign.inc | 0 .../contrib/civictheme/includes/cards.inc | 0 .../contrib/civictheme/includes/content.inc | 0 .../contrib/civictheme/includes/form.inc | 0 .../contrib/civictheme/includes/iframe.inc | 0 .../contrib/civictheme/includes/image.inc | 0 .../contrib/civictheme/includes/libraries.inc | 0 .../contrib/civictheme/includes/link.inc | 0 .../civictheme/includes/local_tasks.inc | 0 .../civictheme/includes/manual_list.inc | 0 .../contrib/civictheme/includes/map.inc | 0 .../contrib/civictheme/includes/media.inc | 0 .../contrib/civictheme/includes/menu.inc | 0 .../civictheme/includes/mobile_navigation.inc | 0 .../contrib/civictheme/includes/next_step.inc | 0 .../contrib/civictheme/includes/node.inc | 0 .../contrib/civictheme/includes/page.inc | 0 .../contrib/civictheme/includes/pager.inc | 0 .../civictheme/includes/paragraphs.inc | 0 .../includes/primary_navigation.inc | 0 .../contrib/civictheme/includes/process.inc | 0 .../contrib/civictheme/includes/promo.inc | 0 .../contrib/civictheme/includes/quote.inc | 0 .../contrib/civictheme/includes/search.inc | 0 .../includes/secondary_navigation.inc | 0 .../civictheme/includes/site_section.inc | 0 .../contrib/civictheme/includes/skip_link.inc | 0 .../contrib/civictheme/includes/slider.inc | 0 .../contrib/civictheme/includes/snippet.inc | 0 .../civictheme/includes/social_links.inc | 0 .../civictheme/includes/system_branding.inc | 0 .../civictheme/includes/system_main_block.inc | 0 .../contrib/civictheme/includes/table.inc | 0 .../contrib/civictheme/includes/utilities.inc | 0 .../contrib/civictheme/includes/views.inc | 0 .../contrib/civictheme/includes/webform.inc | 0 .../contrib/civictheme/includes/wysiwyg.inc | 0 .../themes/contrib/civictheme/logo.svg | 0 .../themes/contrib/civictheme/package.json | 0 .../themes/contrib/civictheme/screenshot.png | Bin .../civictheme/src/CivicthemeColorManager.php | 0 .../src/CivicthemeConfigImporter.php | 0 .../src/CivicthemeConfigManager.php | 0 .../civictheme/src/CivicthemeConstants.php | 0 .../civictheme/src/CivicthemePluginLoader.php | 0 .../src/CivicthemeSettingsFormManager.php | 0 .../src/CivicthemeStylesheetGenerator.php | 0 .../src/CivicthemeStylesheetParser.php | 0 .../civictheme/src/CivicthemeUpdateHelper.php | 0 .../civictheme/src/CivicthemeUtility.php | 0 .../src/CivicthemeVersionManager.php | 0 .../civictheme/src/Color/CivicthemeColor.php | 0 .../src/Color/CivicthemeColorFilterBase.php | 0 .../src/Color/CivicthemeColorShadeFilter.php | 0 .../src/Color/CivicthemeColorTintFilter.php | 0 .../src/Color/CivicthemeColorUtility.php | 0 .../src/Drush/Commands/CivicthemeCommands.php | 2 +- .../CivicthemeSettingsFormSectionAttached.php | 0 .../CivicthemeSettingsFormSectionBase.php | 0 .../CivicthemeSettingsFormSectionColors.php | 0 ...ivicthemeSettingsFormSectionComponents.php | 0 ...victhemeSettingsFormSectionInformation.php | 0 .../CivicthemeSettingsFormSectionOptout.php | 0 ...CivicthemeSettingsFormSectionProvision.php | 0 .../CivicthemeSettingsFormSectionReset.php | 0 ...CivicthemeSettingsFormSectionStorybook.php | 0 .../CivicthemeSettingsFormSectionVersion.php | 0 ...lock--civictheme-banner--default.html.twig | 0 ...ictheme-component-block--default.html.twig | 0 ...theme-mobile-navigation--default.html.twig | 0 ...lock--civictheme-search--default.html.twig | 0 ...civictheme-social-links--default.html.twig | 0 ...k--menu-block--civictheme-footer.html.twig | 0 ...k--civictheme-primary-navigation.html.twig | 0 ...-civictheme-secondary-navigation.html.twig | 0 .../block--system-branding-block.html.twig | 0 .../templates/block/block.html.twig | 0 .../content/node--civictheme-alert.html.twig | 0 ...vent--civictheme-navigation-card.html.twig | 0 ...eme-event--civictheme-promo-card.html.twig | 0 ...e-event--civictheme-slider-slide.html.twig | 0 ...ctheme-event--civictheme-snippet.html.twig | 0 ...page--civictheme-navigation-card.html.twig | 0 ...heme-page--civictheme-promo-card.html.twig | 0 ...me-page--civictheme-slider-slide.html.twig | 0 ...ictheme-page--civictheme-snippet.html.twig | 0 .../templates/content/page-title.html.twig | 0 .../templates/dataset/table.html.twig | 0 .../field/field--field-c-n-body.html.twig | 0 .../field/field--field-c-n-date.html.twig | 0 ...ield--node--field-c-n-date-range.html.twig | 0 .../templates/field/field.html.twig | 0 .../templates/form/checkboxes.html.twig | 0 .../form/form-element-label.html.twig | 0 .../templates/form/form-element.html.twig | 0 .../templates/form/input--submit.html.twig | 0 .../civictheme/templates/form/input.html.twig | 0 .../templates/form/radios.html.twig | 0 .../templates/form/select.html.twig | 0 .../templates/form/textarea.html.twig | 0 .../templates/layout/html.html.twig | 0 .../layout--single-column-contained.html.twig | 0 .../layout/layout--single-column.html.twig | 0 .../templates/layout/page.html.twig | 0 .../templates/layout/region.html.twig | 0 ...dia--civictheme-image--component.html.twig | 0 .../media/media--civictheme-image.html.twig | 0 ...a--civictheme-remote-video--full.html.twig | 0 .../media--civictheme-remote-video.html.twig | 0 .../media--civictheme-video--full.html.twig | 0 .../media/media--civictheme-video.html.twig | 0 .../templates/misc/basic-content.html.twig | 0 .../civictheme/templates/misc/image.html.twig | 0 .../templates/misc/status-messages.html.twig | 0 .../templates/misc/tag-list.html.twig | 0 .../templates/navigation/breadcrumb.html.twig | 0 .../navigation/menu-local-tasks.html.twig | 0 .../templates/navigation/menu.html.twig | 0 .../templates/navigation/pager.html.twig | 0 .../navigation/views-mini-pager.html.twig | 0 .../paragraph--civictheme-accordion.html.twig | 0 ...paragraph--civictheme-attachment.html.twig | 0 ...graph--civictheme-automated-list.html.twig | 0 .../paragraph--civictheme-callout.html.twig | 0 .../paragraph--civictheme-campaign.html.twig | 0 .../paragraph--civictheme-content.html.twig | 0 ...graph--civictheme-event-card-ref.html.twig | 0 ...paragraph--civictheme-event-card.html.twig | 0 .../paragraph--civictheme-iframe.html.twig | 0 ...aragraph--civictheme-manual-list.html.twig | 0 .../paragraph--civictheme-map.html.twig | 0 ...--civictheme-navigation-card-ref.html.twig | 0 ...raph--civictheme-navigation-card.html.twig | 0 .../paragraph--civictheme-next-step.html.twig | 0 ...graph--civictheme-promo-card-ref.html.twig | 0 ...paragraph--civictheme-promo-card.html.twig | 0 .../paragraph--civictheme-promo.html.twig | 0 ...aph--civictheme-publication-card.html.twig | 0 .../paragraph--civictheme-quote.html.twig | 0 ...graph--civictheme-reference-card.html.twig | 0 ...ragraph--civictheme-service-card.html.twig | 0 ...aph--civictheme-slider-slide-ref.html.twig | 0 ...ragraph--civictheme-slider-slide.html.twig | 0 .../paragraph--civictheme-slider.html.twig | 0 ...aragraph--civictheme-snippet-ref.html.twig | 0 .../paragraph--civictheme-snippet.html.twig | 0 ...aph--civictheme-subject-card-ref.html.twig | 0 ...ragraph--civictheme-subject-card.html.twig | 0 .../paragraph--civictheme-webform.html.twig | 0 .../views/views-exposed-form.html.twig | 0 .../templates/views/views-view-grid.html.twig | 0 .../views/views-view-table.html.twig | 0 .../templates/views/views-view.html.twig | 0 ...0-rc1.minimal.civictheme_1.3.2.bare.php.gz | Bin ...rc1.minimal.civictheme_1.3.2.filled.php.gz | Bin .../Functional/CivicthemeBrowserTestBase.php | 0 .../CivicthemeInstallOptionalTest.php | 0 .../CivicthemeInstallRequiredTest.php | 0 .../Update/CivicthemeUpdatePathBareTest.php | 0 .../Update/CivicthemeUpdatePathFilledTest.php | 0 .../src/Traits/CivicthemeTestHelperTrait.php | 0 .../Unit/CivicthemeColorUtilityUnitTest.php | 0 .../src/Unit/CivicthemeHtmlLinkUnitTest.php | 0 .../tests/src/Unit/CivicthemeUnitTestBase.php | 0 .../src/Unit/CivicthemeUtilityUnitTest.php | 0 .../contrib/civictheme/theme-settings.php | 0 .../civictheme/theme-settings.provision.inc | 0 .../civictheme/theme-settings/assets/logo.png | Bin .../civictheme.theme-settings.colors.css | 0 .../civictheme.theme-settings.colors.js | 0 .../contrib/civictheme/webpack/assets.js | 0 .../babel-plugin-drupal-behavior-wrapper.js | 0 .../civictheme/webpack/components_css.js | 0 .../civictheme/webpack/css_variables.js | 0 .../contrib/civictheme/webpack/editor_css.js | 0 .../contrib/civictheme/webpack/libraries.js | 0 .../contrib/civictheme/webpack/theme_css.js | 0 .../contrib/civictheme/webpack/theme_js.js | 0 .../civictheme/webpack/webpack.common.js | 0 .../contrib/civictheme/webpack/webpack.dev.js | 0 .../civictheme/webpack/webpack.prod.js | 0 {docroot => web}/update.php | 0 2565 files changed, 6180 insertions(+), 6213 deletions(-) create mode 100644 .ahoy.local.example.yml delete mode 100644 .docker/Dockerfile.cli delete mode 100644 .docker/Dockerfile.cli.onlytheme delete mode 100644 .docker/Dockerfile.cli.sibling create mode 100644 .docker/cli.dockerfile create mode 100644 .docker/cli.onlytheme.dockerfile create mode 100644 .docker/cli.sibling.dockerfile rename .docker/{Dockerfile.mariadb => mariadb.dockerfile} (74%) rename .docker/{Dockerfile.nginx-drupal => nginx-drupal.dockerfile} (68%) rename .docker/{Dockerfile.php => php.dockerfile} (85%) create mode 100644 .env.local.default rename {docroot/themes/contrib/civictheme/.github => .github}/release-drafter.yml (100%) rename .github/workflows/{auto-author-assign.yml => auto-assign-pr-author.yml} (78%) create mode 100644 .github/workflows/release.yml rename .lagoon.env.master => .lagoon.env.main (100%) create mode 100644 .twig_cs.php delete mode 100644 CI.md create mode 100644 config/default/.htaccess delete mode 100644 default.ahoy.local.yml delete mode 100644 default.env.local rename default.docker-compose.override.yml => docker-compose.override.default.yml (100%) create mode 100644 docs/README.md create mode 100644 docs/ci.md rename DEPLOYMENT.md => docs/deployment.md (100%) rename DEVELOPMENT.md => docs/development.md (85%) rename FAQs.md => docs/faqs.md (59%) create mode 100644 docs/onboarding.md rename RELEASING.md => docs/releasing.md (66%) rename TESTING.md => docs/testing.md (64%) create mode 100644 drush/sites/lagoon.site.yml create mode 100644 phpmd.xml create mode 100644 phpstan.neon create mode 100644 phpunit.xml delete mode 100644 scripts/composer/DrupalSettings.php delete mode 100755 scripts/custom/drupal-install-site-1-enable-theme-modules.sh delete mode 100755 scripts/custom/drupal-install-site-2-activate-subtheme.sh delete mode 100755 scripts/custom/drupal-install-site-3-enable-modules.sh delete mode 100755 scripts/custom/drupal-install-site-4-provision-content.sh create mode 100755 scripts/custom/provision-10-enable-theme-modules.sh create mode 100755 scripts/custom/provision-20-activate-subtheme.sh create mode 100755 scripts/custom/provision-30-enable-modules.sh create mode 100755 scripts/custom/provision-40-provision-content.sh delete mode 100644 scripts/drevops/README.md delete mode 100755 scripts/drevops/clean.sh delete mode 100755 scripts/drevops/copy-db-acquia.sh delete mode 100755 scripts/drevops/copy-files-acquia.sh delete mode 100755 scripts/drevops/docker-login.sh delete mode 100755 scripts/drevops/docker-restore-image.sh create mode 100755 scripts/drevops/download-db-docker-registry.sh delete mode 100755 scripts/drevops/download-db-image.sh delete mode 100755 scripts/drevops/drupal-export-db-image.sh delete mode 100755 scripts/drevops/drupal-export-db.sh delete mode 100755 scripts/drevops/drupal-import-db.sh delete mode 100755 scripts/drevops/drupal-install-site.sh delete mode 100755 scripts/drevops/drupal-login.sh delete mode 100755 scripts/drevops/drupal-logout.sh delete mode 100755 scripts/drevops/drupal-sanitize-db.sh delete mode 100755 scripts/drevops/export-code.sh create mode 100755 scripts/drevops/export-db.sh delete mode 100755 scripts/drevops/lint.sh create mode 100755 scripts/drevops/login-docker.sh create mode 100755 scripts/drevops/login.sh create mode 100755 scripts/drevops/logout.sh create mode 100755 scripts/drevops/mirror-code.sh delete mode 100755 scripts/drevops/notify-deployment-email.php delete mode 100755 scripts/drevops/notify-deployment-github.sh delete mode 100755 scripts/drevops/notify-deployment-jira.sh delete mode 100755 scripts/drevops/notify-deployment-newrelic.sh delete mode 100755 scripts/drevops/notify-deployment.php create mode 100755 scripts/drevops/notify-email.sh create mode 100755 scripts/drevops/notify-github.sh create mode 100755 scripts/drevops/notify-jira.sh create mode 100755 scripts/drevops/notify-newrelic.sh create mode 100755 scripts/drevops/notify.sh create mode 100755 scripts/drevops/provision-sanitize-db.sh create mode 100755 scripts/drevops/provision.sh delete mode 100755 scripts/drevops/purge-cache-acquia.sh create mode 100755 scripts/drevops/restore-docker-image.sh delete mode 100755 scripts/drevops/test.sh rename scripts/drevops/{update.sh => update-drevops.sh} (55%) create mode 100644 tests/bats/.gitignore delete mode 100644 tests/bats/_helper_civictheme.bash delete mode 100644 tests/bats/_mock.bash delete mode 100644 tests/bats/helpers.bats delete mode 100644 tests/bats/mock.bats create mode 100644 tests/bats/package-lock.json create mode 100644 tests/bats/package.json rename {docroot/themes/contrib/civictheme/assets/fonts => tests/phpunit}/.gitkeep (100%) rename tests/phpunit/{unit => }/AddPhpcsExclusionsUnitTest.php (92%) create mode 100644 tests/phpunit/CircleCiConfigTest.php rename tests/phpunit/{unit => }/CivicthemeCreateSubthemeScriptUnitTest.php (95%) create mode 100644 tests/phpunit/Drupal/DatabaseSettingsTest.php create mode 100644 tests/phpunit/Drupal/EnvironmentSettingsTest.php create mode 100644 tests/phpunit/Drupal/SettingsTestCase.php create mode 100644 tests/phpunit/Drupal/SwitchableSettingsTest.php rename tests/phpunit/{unit => }/ExtractCssColorsToCsvScriptUnitTest.php (99%) rename tests/phpunit/{unit => }/ScriptUnitTestBase.php (100%) rename {docroot => web}/.editorconfig (100%) rename {docroot => web}/.eslintignore (100%) rename {docroot => web}/.gitattributes (100%) rename {docroot => web}/.htaccess (99%) rename {docroot => web}/autoload.php (69%) rename {docroot => web}/index.php (100%) rename {docroot => web}/modules/custom/civictheme_admin/civictheme_admin.info.yml (100%) rename {docroot => web}/modules/custom/civictheme_admin/civictheme_admin.libraries.yml (100%) rename {docroot => web}/modules/custom/civictheme_admin/civictheme_admin.module (100%) rename {docroot => web}/modules/custom/civictheme_admin/composer.json (100%) rename {docroot => web}/modules/custom/civictheme_admin/css/claro-node-form-overrides.css (100%) rename {docroot => web}/modules/custom/civictheme_content/README.md (100%) rename {docroot => web}/modules/custom/civictheme_content/civictheme_content.info.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/civictheme_content.install (100%) rename {docroot => web}/modules/custom/civictheme_content/civictheme_content.module (100%) rename {docroot => web}/modules/custom/civictheme_content/composer.json (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.info.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.module (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.post_update.php (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/civictheme.settings.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/007b3ae2-abf2-4433-a24b-ca8ba79f0faa.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/01a0a6a5-a850-41d8-92aa-ae9a8d74c246.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/053b2b9a-5749-46ce-bb22-9099a6834a06.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/12e3b76e-5e63-43d2-bd99-6827a8c9ab2a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/191f9e3a-a6fb-4bbd-87af-6e3bba478137.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/1f1a4e3d-78a0-45af-a8c8-8eb593fc6268.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/26e57960-218e-475d-a8c6-dc8479949be4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/26e7545a-e4c1-428a-b26e-426503dfd65b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/2bc80ea6-0298-425d-b208-fbdfb28c8f4f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/2d198020-d27e-4282-b716-cc436c2dd893.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/360f9b1c-e7b9-4760-a308-a94d04bad54a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/3bea3131-85bd-4eac-aeaf-702733630f62.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/4ddb8852-8fcb-4b78-8e8e-72c66006acae.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/587355c9-c76b-459d-adf8-8829c2fe4181.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/82f5b00f-1b04-4dfe-9e50-c466bd3fedd2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/883ede75-67e4-43c6-9945-9818dc31b543.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/8883d22c-effe-45ae-b13e-9fd5e7df6481.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/8e3e4ca6-a85a-4e67-a550-58ebde6a2cb9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/933037cf-e8cb-46a0-8132-4668036e90a0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/93b3fe72-f6fe-4608-b904-cdf6d8037397.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/9f9718c6-9f12-4e44-be68-cf82e94ab271.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a6e06ca7-a003-4089-9a92-f8716ed8a210.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a804e5e0-4ede-47fd-8307-08d1a18c7455.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a8235202-f85a-48b8-b90c-380ea5587f96.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ae7d79af-9aa4-455d-a415-26191e3ba7c4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/af42e607-0099-4be4-b695-05795ac1a1e2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b1778031-4905-4f37-a8bd-5652f0382822.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b19ce70e-881e-422f-b03d-70c9677b0892.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b44c9271-2aab-432e-bac7-f228b60e9c72.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/bde928ff-d995-4831-bd0e-ad03e08e48aa.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/c77ca2da-b928-4f98-a39d-9b56b646bcd6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/civictheme_demo_background_1.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_banner_background.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_bottles.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_clown-fish_2.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_clown-fish_3.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_document.pdf (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_dsd.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fire-silhouettes.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fire.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fish-in-water.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fish-plastic.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_glacier.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_great-barrier-reef.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_iceberg.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_download.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_facebook.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_linkedin.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_twitter.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_image.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_koala.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_microscope.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_power-plant.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_rainforest.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_science-beakers.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_scientist.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_seals.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_seedling.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_solar-panels.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_starfish.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_tree.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_turtle.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_twelve-apostles.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_underwater.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_windfarm.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_woman-flowers.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_woman.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/d091e99a-55b9-4f80-80c1-b188186537da.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/d415ede9-ef24-420d-bb6d-7ccfc40b4694.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/dca5f3cf-f9a1-4f56-a0ed-9e06dd9cc320.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/de13d35d-8d49-4a7c-9ea7-8f21b0964176.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/e153aace-9481-405a-b544-87a40034bb0a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/e9b4a5d5-ef8d-4cdb-bb87-834f46c7ca0f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ed8e9a4c-f7bf-4bd1-905f-450330b22859.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ee83d96e-d783-4db6-9149-3db4e9cab340.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/facebook.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/generic.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/linkedin.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/twitter.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/00156c6c-d949-4382-b7d0-78d15fa49b38.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/04ee0921-1bea-4795-b670-3b0f75b17645.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/0eb512d0-d116-48f7-83bb-ae07c3eb2c91.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/1273590e-5a80-45ee-9172-0e1b9343ddb3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/2283dfc9-d10f-40d6-8cf5-4a3a2d2ef158.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/26820d38-aabc-4c1d-a6df-09fa62a3fe8a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/429966d5-50c7-433a-bdcf-5d58e1e6e21c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/4729baf2-63ab-48e2-9c47-ce82acc1f0d1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/485fc9fd-b6ce-4ff1-a0ac-88ea2fe7fdb9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/48a4995f-75fc-4bb4-b43b-8dcd81f3f68b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6ce72705-bab7-4dce-9ca5-4a3ae097faa3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6d127a84-70f5-43d3-a0dc-ee2872d97c8b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6eb923f5-2fa8-49b1-ac4c-46d587ec25eb.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/7238591b-bca0-46bf-b6df-534a1fdb2ddf.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/78eb0cf4-882f-47e4-8607-1f254809e9e8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/86c71cbb-5ab3-41f9-bf7c-f30cd426dbf0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/87adbef4-9cbd-4c1a-b0d7-bca60377d755.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8810505e-9c28-43b9-b019-a0a034701b3a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/889585ce-c08e-4957-9c33-75025e910242.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8c64e0b7-9541-4191-868c-42d5adeb2828.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8f8df77d-5b85-48d9-a1f7-b85782d47a78.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/971cc0f7-9e06-4f64-b58b-32d68848d5b3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/9dd16162-6e1b-43f7-821e-003f0711b0a9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/a8b62c0c-3e6c-450b-93b4-df5956b87cce.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ab44a2e7-acd4-4276-bf83-3c6fd3e71271.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ba705a5b-91ca-4f48-9d82-feeabb645cff.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/bd746089-5c3c-4fb4-aab5-fe9f5cacc821.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/c66b84d0-bd69-4330-96d2-71e1ecddebf0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/cde35fb7-b01d-4074-ba94-bb62303e27d9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/d862309a-96ab-4961-9e69-28ccc203a5ff.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e0a78fef-3e3a-4b96-b303-974ac8fec445.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e5c0b1c2-b993-40e6-a760-5a0f5565fe10.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e7ab9bae-edec-4639-b196-9dece305235d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/eb524ad3-657f-4287-bafd-7b76b3619831.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ec6f5030-d733-45c9-bd47-50de3d053e5c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/f06a9e48-e4bc-4e1d-9646-047d984c36ca.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/f9278a83-d921-4890-ad30-e0d3050ef74a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/fcd683b6-ea34-4310-aedd-7731ff476cbc.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0457b4f7-1a43-4719-8493-c1aa9d92464e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/047776b6-e8cc-45e1-8798-c50ecca06bcb.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/058a0544-81c7-4312-baa0-fae4025ec5bf.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0db77bba-adbf-472e-bbf3-cbe5baff553b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0f2b95c3-af99-44ae-b51c-14322d9d9fb8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/2541114b-22fd-4fda-aa02-2999c9895777.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/30f111fc-59b1-490e-a535-5383420b55e8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/36e960e5-0a31-4809-a04c-647084058466.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/416ade67-7806-49d2-84db-fc6cce4f1f2e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/4777a693-bdae-43ce-9e09-c5ef60d56a88.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/4d1becca-390e-425a-82f1-7a837683aea7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/59667b00-1356-476f-9323-5436bb5be692.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/84a103bd-a203-42a2-aa47-8087596b4159.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/871e1957-f44a-4adc-a6ae-d7bef561ad12.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/8b2fa8a0-ade0-48a1-a072-d545d36d9ebb.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/8cced355-c841-4e0f-a6b6-f59d801f6d0c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/9635dce4-d427-4114-ac1c-7dc6d45a978f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/a2107071-edef-49ed-8a22-e1a07d45ae2b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b3a3dda4-3901-4cc8-817a-91ecb1b74e2f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b718cfb0-071b-44e6-9d38-039e5e10152e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b90028d5-337e-4b40-8f15-898c4a2a1c2a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/bde7a36d-4776-4a4e-a21c-c1562252ddde.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d0a13a17-530e-4b39-a5f4-9067b3b88781.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d55b5b63-3364-44fe-bab9-5135a43118b8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d9afa100-6d13-419f-85b0-961e7acdb6e1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/dca3afe1-b9ab-468d-8b7a-f9ececeba2a7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/de247e03-0ea1-4d32-bbb0-06aa34123279.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/ee89a67c-c256-479d-b85d-c2db725003a5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/eeed004b-9d43-48fe-b99e-74289614ad56.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/f1f66752-e425-42a2-a966-09adc983b29c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/f45bf798-cdf1-46fc-b27a-3fd6472fba25.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/ffcaaf1f-bcfa-458c-b938-5c1c1208a940.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/08cead14-37a7-476d-8526-4814867bdb76.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/0a840065-4343-4868-9004-61442d313eac.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/2da124a0-129a-4b03-9f02-dd33a90793b4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/454edaba-477b-45fa-934d-1b2b2b7899fb.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/51efffb7-e00c-48ee-a5a4-8eabb7c9e903.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/5c582abf-9d2b-4a03-a7b1-dd84e4cfedc9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/64931832-7e31-4493-81b4-a2a46061dda3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/6ec9411b-6148-420b-ab02-87466c42db1f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/74076f33-5c1e-4b09-9522-bbafd6e43afb.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/7a35464b-da5b-4edb-a490-6bcd54339f29.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/853e999d-a302-4cc0-baeb-f419c91bcf3f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/855f86ae-b6a9-477c-8827-6b13b5c8ff41.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/aa31c2e9-f0af-4e1b-9fde-088ec81403bb.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/c8ee30e2-85e5-42db-b27a-92e508eacd0c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/c99ffbb4-3782-498c-9d69-23419e9643e1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/ce6b14c7-f782-40c6-884d-47724566ec60.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/d044d201-6f40-41ed-bdbd-595bfa72cc4d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/d073b4ba-18b3-49a2-97b6-b02cb22f1a40.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/e2401264-b563-4b62-9d77-b5c107909bf4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/ef661701-2c8e-4ea4-b927-2d2ecad7617e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/bb1443d2-3262-4f61-be2c-e9730424054f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/e1db1abb-7e92-482d-8acf-157b173885c2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.info.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.module (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.post_update.php (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/config/optional/civictheme.settings.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/044c817e-14ba-43ad-b98e-07f860d1bf1a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/2803908c-77d8-460b-b084-3185c392797e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/2d26321f-07ae-44be-9dfc-58566e94cfc8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/33ec0e62-3317-435d-b1cb-1e42e42e3260.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/4a5c5b53-bad3-4ac6-adb8-d07f3167bb28.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/570c6899-92bc-4317-aa07-274a431d618f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Adopt the DIY approach.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Do it yourself - The DIY approach.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Facebook.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Linkedin.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Tried and tested components.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Twitter.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/a7807b15-8d13-4d42-9615-d7756db3a11d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/c31b572d-b1d2-441b-a491-b373d6c54e2f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/civictheme_demo_background_1.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_govcms-visual-white-paper.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_image.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_image_ricardo-esquivel.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_nature.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/generic.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/209291bc-81be-41c7-912c-70d695e9376c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/2b8021df-e474-4b3a-8b91-62844aefe844.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/35a65b40-b6a0-428d-bce3-3bd7c918f84b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/4c9975b0-77ca-4f82-95d0-3fb2a1122978.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/68d50fea-aae4-4dde-832c-b385ff9731e1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/81cd5226-50b8-4d4b-ab47-7b9a783cce85.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/846a6a20-2767-4b7f-9f92-4bbe7ad15ac2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/e07cdb41-1bd4-463f-9e7c-126302b24740.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/e2b603ff-038b-4c31-bf8d-6e4eb7346b72.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/faa70cfa-88f0-49e7-81ed-9523560bb0d5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/180e120d-0755-466a-97d9-594b24fe120f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3078e95c-7129-4b39-a9ff-e5c80e966a56.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/38bf2e73-3fcc-44c1-ae36-20fece5bebce.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3cbb7e47-57c6-4944-a019-0b690ebd74a2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/44e54046-2e1b-4602-8e64-178d92ce8553.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/49620dbf-ea4e-4d07-87c5-be00114e809f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/5d6e76f4-0043-44f8-beea-c193bec2bbb8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/63fe1090-3a57-411c-adbf-40098e87fb02.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/77dbc92c-a2e9-44c5-b17c-381b9370555b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/850a7ffd-1089-4938-a141-d000f40b6ce3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8d2b105b-6cc3-4a46-beaf-699119814884.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/9a4b114c-62fd-46d9-aba9-def076c423b9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/a674f664-885b-4019-b72b-786d92dd2094.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b5571f4e-0c5c-4ffe-8b3f-0e789b6581ad.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ce9669b2-ec36-46fe-98c9-c6f981b5dd34.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/d9abb0dc-5a6d-4fc0-ae0a-f4aa4147cd9b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dc2e521d-556e-4ed5-933e-8fcd38f80f56.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dd250ba1-51b2-4759-967c-55eb090a5e8e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e6ce2b2a-7948-466d-a57c-a619641c6356.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f13af664-68c6-4141-9fbb-bc21aab75a51.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f7d8f0a9-3229-4bac-ae21-d700fdc1ad77.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/100e4cfc-33b8-4980-9196-05d519a13dea.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/2036a3bc-7988-4105-9c73-5eb14fb8e437.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/416a4c14-20fc-4c12-ad96-aa27d584a554.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/6d2fbfa0-5402-461e-9357-9eb7efb850f5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/9c4229fe-7dd7-4a10-a389-3868d27ae469.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/db8e6781-f356-497d-9aba-ef0994b6268c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/75c3061b-50d7-42c4-8db5-7d06859c6725.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/dcbc66a3-946d-435b-8ce8-54a680bf3b18.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/assets/favicon.ico (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_dark_desktop.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_dark_mobile.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_light_desktop.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_light_mobile.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_dark_desktop.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_dark_mobile.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_light_desktop.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_light_mobile.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.info.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.module (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.post_update.php (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_side_navigation.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/civictheme.settings.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/02e8b931-63b9-4ba7-88c3-0ec21868268b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/0d621b6e-9375-47ee-8df1-d6e91e4314aa.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/0db708be-ca52-44f6-a9d9-ff5a24b0867d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/1376d33e-fd5f-4dbd-af23-6279e7565829.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/19722339-a9a3-452f-b7ac-e48127be10c2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/212c79c5-e1b2-48f6-b0de-608799a2f5b0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/2e83befe-9fcb-452e-871d-254b120385c3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/38de3cdb-63b6-40f1-b60d-110c30a8a9fc.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/3a8368f6-7bf7-4bb1-8691-a1cbfb1674f2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/42ad3ee5-1d76-4dbb-87c9-cdea3252e774.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/533dd153-a9ad-48cb-8ddb-97b9050575d7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/5d20173e-6b13-4ada-9621-28dd1c65bcc3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/65559b88-1418-471a-908d-6f440aa939b7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/6a16b860-5aac-40a4-a5e7-13d8bc051448.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/79bffa90-f6fe-4fb6-a8e4-129d8abf4566.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/82e396eb-aeb2-437f-ac75-891a4901b8cb.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/8a4bb1cb-34e9-4c70-9923-8a78f1408980.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/8af122fe-6beb-42fa-92dd-f11c36aa5276.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Facebook.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Linkedin.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Twitter.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/a11c8970-147e-4977-bff1-074882279be0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/aged-man-hugs-aged-woman.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/aged-woman-smiles.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/australian-flag-on-pole.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/b0fd58d9-6ee5-4d72-8736-986cce424b88.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/b8433893-9503-4154-a7c6-f6b5ff8fbc1d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/ba71dc95-1801-406f-880a-41b9da49dcea.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/bottom-of-uluru-mountain.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/c4bd44cf-c983-4b72-a612-bd3826daae6b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/db85dd04-fddd-4ab4-b364-2d5a3460ad98.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.docx (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.pdf (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.txt (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.docx (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.pdf (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.txt (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy3.pdf (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/ea71543e-bcb9-4407-8b95-8035ed2c336b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/f1180d16-b221-4efc-8815-7c2323410d09.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/f73a6c37-2c78-4850-aabd-cf46210beb58.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/female-customer-service-executive-talking-on-headset-in-a-modern-office.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/four-young-people-looking-at-laptop-screen.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/generic.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon1.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon2.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon3.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon4.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/large-australian-flag-on-pole.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/man-with-microscope.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/office_building.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/parliament-building-in-the-evening.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-adam-bontz-mp.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-john-smith-mp.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-judy-denn-mp.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/small-car-moving-fast.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/two-asian-women-looking-at-the-screen.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/02986a1f-61c6-4e26-9e74-373d2bc0c634.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/07a20a20-f169-4050-9dfe-dde58117bcb3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/128cf256-533b-4a10-bedb-e878deada4a5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/146bdf1c-41ce-4ed4-a8e0-64d1c4f36ddc.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/16a68379-553e-4cd5-a2a1-d7539d15c2ba.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/17896e42-63c2-46db-bda4-a326904295b3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/1a2711fb-ca12-4835-9e1e-a8a63bd82ad0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/2fbae552-33a2-406e-87a6-159e419faf85.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/37c33114-06dc-43a2-a6d0-6b6befc11fa2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/3e31f933-303c-4fd1-bac7-4faab8100c1d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/4603fcc8-7b0c-4698-aba9-2a43508b1038.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/4df3f04c-7529-4335-a9d2-0d48cc074376.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/50ea2910-e6f9-495e-9174-3b84e97426b7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/66fcb842-06c3-4432-bd20-62918758e005.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9896b6d9-c590-48af-a0ce-fed22a0ec861.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9a81d79d-79da-4bc4-8584-27c411248d3e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9e389925-f1f6-4d1c-8aee-03e4a91f6eb4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/a172a439-0aea-42e1-b19c-7fdd3ba68bcf.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/a5653abc-41de-4b8f-a9b7-cb48aeeacd5b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/ab71f96c-d1b4-4a7f-be7d-7b5fa5b26925.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/af43a085-7e4f-40d4-a8d7-79ddd18fbcf0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/c16012a7-6fb9-40a4-8ccf-b4f3691e1feb.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/ccd6cc0e-c403-45a3-949d-216804250433.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e0c710e3-6eeb-4ea5-b656-0fa728b389b8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e343a613-0b38-49f4-a4b5-f000b171b10d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e7acc411-519a-4735-80a6-c0bc7dfb61f3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/f7f391de-797d-4345-90c4-46d1f01c468e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/fa15a8a9-f7c2-4e9c-a9d3-51cdb501d50b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1fba0787-dc6b-4f85-a1b6-fe57793e88c9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/237efd9c-07ab-4667-9b2e-71e36a276422.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2f378b27-3b67-441a-96a9-0a6de73fb1db.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4968109e-0125-40e1-ab9d-b4fca8546ef3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4b1d211b-63ab-41c6-82f9-d124d52417a3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/5affe220-42a6-4bab-86ce-c64cd9490cf7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6a865497-8c11-4d3c-ad9e-7bcec0bc173b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/77dbc92c-a2e9-44c5-b17c-381b9370555b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/82a5c45f-7594-4e11-bbec-e8fe0e040185.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/910c07dc-8c95-436d-9434-5ae6f4ed46c1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/a0c1ecde-9e39-4ca9-9342-943172622ae8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b879d56d-cc11-44a4-a0eb-af0d3dae1d1a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c3045aa0-6573-491f-8220-3c09b5e8dd7e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e66e8371-b802-4722-a078-5a19fc6b0f8c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/02831341-01cd-4d7d-80b7-20f01feb950b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/0d96ff66-61ff-44fc-a9e4-a8b174f6da95.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/21d11ae0-2874-4663-9937-a48ce30a7ad7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/3554631b-63d2-461e-916e-217a18d1d298.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/52a73eef-5883-4277-8e4e-e2e587670b59.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/6f588571-e649-47dc-9911-c1723cb07e71.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/882a6c90-74f4-44c7-ab53-fb0a9937c678.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/b7759fda-e55d-4a37-b6e6-fb1816e75365.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/b7f32ddb-c81a-40ff-8389-a935cd317201.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/d40fd509-9fb5-4295-b3f3-65638aceeaf7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/d82c4982-b334-43ed-bfad-32ce5e63cba6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/dbb6bfd1-8427-40f1-9ca6-96d21a368a65.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/f3c7ec64-459f-4ea7-8060-f60b0d84901c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/f5794802-f1a0-48ac-aaff-27acfd80d799.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/75c3061b-50d7-42c4-8db5-7d06859c6725.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/7f02fd6d-bda1-47a0-b463-f7cd975e026d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/cc796ed1-1ae8-4c50-b462-c97f6773f2f3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/favicon.ico (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_dark_desktop.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_dark_mobile.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_light_desktop.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_light_mobile.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_dark_desktop.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_dark_mobile.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_light_desktop.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_light_mobile.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.info.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.module (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.post_update.php (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_side_navigation.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/civictheme.settings.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/04f13054-5b92-4d9b-b2e5-4ccb7776cdf8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/06649f54-e0ba-4cb3-a291-d07abecdf0f1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/0c6e3eb6-6ee2-4c19-b27d-9b724797d809.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/0eb831f5-9400-4563-9c0a-7fe15e48359b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/13cbd4d6-a1d3-468e-80ed-17ee2d97975d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/17043c65-8fbe-4447-a967-293bedca0dd4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/2280ddcf-ec73-49ae-8a02-3d6c69579504.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/262c3484-7a1b-4c87-8b62-b4ed2aa6fdff.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/26c337ee-6ff6-4a2f-bc5c-8a2716b64f3c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/28ab7204-ffc3-4dfa-bae8-b15ff3eb806d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/2dbb9ea9-fc71-45c8-8fc3-4fd5c4e47f69.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/39d33114-a7ca-4960-8b72-0c616bcd57bc.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/3e2f531a-7aa3-4f8c-92bb-4d2dfe886dac.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/3faebecb-df49-490c-8231-8618caec2a22.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/43d131e1-0ed7-4df4-9666-2f97345b4e85.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/4572afc3-72c9-4e94-a9ed-3c0525428da9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/485cc58d-a829-4462-8cec-ef747507f158.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/52c7c546-4010-44c0-aa09-7b1295255df8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/52cf5a8d-97bf-48cf-b106-e2249e2e705e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5772c7bd-f9b8-4fea-9aab-ea23653e7bf5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5aae0577-f184-421f-9818-36c4c91f7268.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5daffb0b-71e0-40cd-94ab-72cea6e15b30.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/64a4df06-0829-4e3e-89ba-0f8dcf296cd3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/661348df-1f8d-4fc2-9a86-7b79b7530ddc.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/71884454-94a4-4b31-b549-72457937caae.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/74f3530d-17b6-45a6-be26-22204601cfce.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/75453091-c74a-4b07-b57a-e381d34c65de.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7c3adf49-2497-4781-a6d7-6caa16a5b9ab.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7d218cdd-73aa-4253-8e46-59c94197a943.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7d40a1d7-cb84-416d-b1de-d6bbdae4a4d8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7dea2844-77b7-4f1a-bb77-5d61c9d0be28.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7ec668f1-cd7d-4111-967e-f2522817ff2f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/87f76de3-68e6-4e5e-b739-9dd448d1ba62.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/894ac492-60e6-4596-b171-4e3c03331076.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8b15713a-ca0a-458a-a841-86e667f7e913.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8b42af88-5ca5-4272-8b4d-d9588778a92d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8dcc82a3-004e-4a65-aab9-ec73f19b5862.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8f3322b9-86c2-4ee9-8862-9af7890e436c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/9c35b490-2a57-458a-a298-4cbc0b0907d9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/9cea8871-e46e-4671-abf0-f2183a98e6bf.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/AI and open data for COVID 1.png (100%) rename "docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Alzheimer\342\200\231s Association.png" => "web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Alzheimer\342\200\231s Association.png" (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/BCG.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Background Pattern.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Baker-McKenzie.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Facebook.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Johnson Johnson.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Linkedin.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/My University library.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Newbreakthrough.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Pfizer.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Placeholder.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Red Cross.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Smithsonian Institute.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/The Pine Island Glacier 1.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Twitter.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/United Nations.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/WHO.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/World Vision.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icon-1.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icon.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of architecture.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of art.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of banking.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of chem engineering.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of civil engineering.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of cyber security.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of economics.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of emerging technologies.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of marketing.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of mechanical engineering.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of political science.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of software engineering.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of structural engineering.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of biomedical sciences.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of english and creative writing.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of languages.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of law.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of med.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of media and journalism.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of social sciences.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/a2c9a5f4-bdff-46c3-86dc-dde0b7108e6b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/a9cc17a6-a67a-4785-9ac4-0dbd1ac184f6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/account.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/aecom.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/afif-ramdhasuma-lPjeFCIFJwk-unsplash 2.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/awardwinningresearchers.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/b7d04e5e-eb1d-4e7e-bb2e-a5fffa073a81.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/b934d372-e59b-4e7d-a0f1-d5c818ea4cef.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/c14f7e58-db26-4c8d-830a-4f4ce677f898.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/c52989ca-ad3c-468b-b4a0-02aaab1dc7e8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/cac181f2-fa1e-4a8e-9e30-6dc57124f8bc.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/civictheme_background_2 1.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/clay-banks-Hf8n0RUk7g0-unsplash 1.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d3dec43b-f5bf-4785-8561-bea57237e02d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d5d082de-a211-4e13-b818-6f2e7dbc32f0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d838ac0c-5320-4e95-93e7-b1c8d1a7a0b2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d9a4a6a1-808f-4d0f-b472-045f64b7bdf5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/dc5c94dc-faea-4b7c-a079-3f8d9267e713.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/deloitte.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/demo_image.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/demo_lorem-ipsum.pdf (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/dose-media-bU6JyhSI6zo-unsplash 1.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/doubledegrees.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/doubledegreesslider1.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e3080d9e-143f-458b-aed6-cf5fe97f3861.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e5b5afb3-e0b8-42f3-877e-011c0de89c95.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e897e660-3b34-41ef-98f9-1160f2528a89.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/eb4983ea-b3e7-47c2-a036-52aadeebadc1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/eb8db1e8-1ccc-4c99-9a85-75b29eae4de6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/f127cb9b-1d16-4213-acb1-021e8842e49d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/f1d15bb3-6018-497d-a9bc-79ec0656793e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/fbbda862-b3ed-4b06-b8d7-b548a628a60f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/frankie-lopez-lXy07zu3NN4-unsplash 1.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/generic.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/group-of-young-people-looking-at-computer-screen.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/helena-lopes-UZe35tk5UoA-unsplash 1.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/janesmith.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/melbourne_flinders_street.jpg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/open book.svg (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/scholarship.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/strategicplan.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/universityranked.png (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/02c5cb96-7bf6-4362-ad5a-0a562e996632.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/052ab323-9e65-4c7b-8c5c-e16277731a30.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/128cf256-533b-4a10-bedb-e878deada4a5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/12d28525-2e6c-4d9a-9bca-1e8758d0b706.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/143fe51b-83b1-4e43-a0d0-40476540abc3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/1a1cbd4b-36f6-45ca-b71f-89bccb5d2e83.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/205adb84-4add-4e30-92b8-e5c052aa0bc3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/20b3c516-3834-4eff-b24f-d67d17464c9c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2293c43c-5b29-45f6-9b58-51344002758a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/23bc48fc-9abc-4e61-be57-f73be8ec5328.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/286955ac-256e-480d-b914-dcad37fa96ff.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/29410ad3-295b-450e-bba4-c58d5a7e83ad.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2cf05e2f-5d05-4e88-ae27-7248a11978c4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2e4ffce7-2f27-4196-9def-763b2657d951.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/33025cb8-4e76-4122-8e56-48c04cb12c8f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/3a518ae8-054c-4b58-b673-3771f897dbd9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/405e6f34-e721-473c-b3da-49d618e92105.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/4a661a2b-f6cc-480c-99ed-1f9911b5d405.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/4c1ad737-0d04-4adc-a2b4-10a6b914cb1a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/519c4e0c-acd5-4233-9628-8335ee7ce51f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/61e15cff-4f8f-4480-9c0a-8f11669c4374.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/6e092085-4a97-4bd5-9711-ef0005ecdf4a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/707c016d-26af-43c0-a999-c892e651917a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/70debdf1-8d42-4ac2-94d3-3b1781181833.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/738f9580-7a92-4a92-9b0a-30d191f49737.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/773a4ec5-1d27-4e1c-9b07-ef1b7cbc0cf4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7a47a1a3-d8c3-40e6-bb92-9fdea76de772.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7b02f9f8-0b74-475b-98cb-efb080b09929.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7d8c80cb-6e45-4ba2-aad6-8e9bc132f88f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/807435c6-a632-4c5c-bf66-2ffdc9ab609f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/8d96e514-518d-46fb-aa93-d0fb629035ee.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/90720509-6653-4acf-a96b-7154da530b88.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/9160afda-d35a-4538-9284-0148f87278e6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/9e21c1d1-284c-4fa4-8395-7495fb2dbb2d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/a139973f-f02a-4838-bcb4-3a7e0e0c1556.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/aadedf42-c600-4397-9e6b-5b85e20f1d6a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ac4255ad-ec69-47e9-9617-86b2e51872b8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/afe262f2-18fb-4dd9-b4e2-4f4482766cde.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b1142872-23be-4b62-a4a8-37cdcd453bb6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b2960675-19ac-4689-8fca-fd717c4b8163.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b4fa303d-042f-4b38-a06b-88c26d1a7eb3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b7711963-ecc5-41b8-923f-692f4416f7d2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b968b4c6-58b1-4a90-a436-54f93d0d7af1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ba25bcb8-b010-4d47-8765-1f9f2b1309a0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/c4254aad-8fe9-4e9d-abba-1aab19dcec78.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/c62e73db-9388-4088-9da8-facd065a2d39.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d1a149ce-4422-4767-aef1-1a22ae4e2193.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d40603f6-cf19-40da-812d-fbee32d8696d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d4bd31b4-651a-4120-a7bf-e6d6832f722c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d6d58799-0fe0-47c8-8bda-153a48694b1b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e4f38f37-1947-4b47-8e9f-3b85ab96614a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e5120032-950d-422c-9d6e-3d562e633858.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e71dbfa0-a672-4c84-a4b7-3b7863e6268c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e8ab5ef1-2f45-4937-8f0a-f63c22f52df9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/eac50bb1-3e95-4be4-80cb-7c768fef1c09.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ece7dd42-dc11-4d3d-becf-1b0bfad61fb2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f6d32a80-22f2-4f4d-b4d5-09a1fc11b783.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f7f391de-797d-4345-90c4-46d1f01c468e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f8695f84-8fbb-4e7e-97b9-423efe719cda.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/fd86cf0a-1055-4ae7-8358-0bf198723fe2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ff9dd1cc-ab2e-468c-9b71-174b04ff3707.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/3078e95c-7129-4b39-a9ff-e5c80e966a56.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/44e54046-2e1b-4602-8e64-178d92ce8553.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/5f598858-36b9-44bc-a172-b5074dbf18e3.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/71ced34e-4aad-4635-9180-a413f9a9bfba.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8d47deda-5ee5-4dcc-9f85-80736ff4cfe9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8d77d5fa-32c2-4a49-bf6c-d4d29bffabd4.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/95e9576e-bf57-4d42-8277-86d6fba07024.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/a29bbfc3-74a7-4f20-b2fb-afc695b5604d.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e6ce2b2a-7948-466d-a57c-a619641c6356.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e770653a-bfc1-4c88-a6b5-8a2baaf688c6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/0900bcaa-2670-4ffa-b22e-f9fa667c45d0.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/11575ae4-d804-4b68-a9e2-528dde78ca5e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2036a3bc-7988-4105-9c73-5eb14fb8e437.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2788e087-f610-435c-898b-996ace50bd11.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2e309b77-8d77-40e8-95bb-1c1475955e67.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/35b75cc7-cf94-462f-9ee6-6bb69e895d8a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/439d44bc-bb57-44ac-b1b6-1fbcb0f7668c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/4cd88c26-8e03-415e-8d67-6d818b07a49b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/570c4f75-363e-4cdc-980d-b0cc5172469e.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/5d9e4e6b-f957-42c3-8019-30b1ca190dd5.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/802f8c11-788b-44ac-b204-c8fde899532b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/82bdc4d8-e299-490e-92f8-2a0362724be1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/866d2c87-0baa-4b54-839c-1e89d5ba6ab6.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/8f45163f-252f-46e3-b3d3-7930b1d9b6c7.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/baeb7d42-1e11-4d7a-abde-dc02cd89d417.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/bbd57889-e07c-4c4f-a223-868f9a441035.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/c0dc5f2f-ce09-4c0f-8fae-db1689f622e1.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/db8e6781-f356-497d-9aba-ef0994b6268c.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/ee025f20-7976-47b2-aa62-a00b84b149de.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/1c76b992-a37f-407a-b0b3-65784043454a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/5f9ad45f-5aa9-45cd-838d-719f82b7417a.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/96d87429-9acf-4c03-9da6-3e8ba9cc3fab.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/a54aec7d-5aaf-4709-a0ce-dab0ad436a33.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml (100%) rename {docroot => web}/modules/custom/civictheme_content/src/Helper.php (100%) rename {docroot => web}/modules/custom/civictheme_dev/civictheme_dev.info.yml (100%) rename {docroot => web}/modules/custom/civictheme_dev/civictheme_dev.install (100%) rename {docroot => web}/modules/custom/civictheme_dev/civictheme_dev.module (100%) rename {docroot => web}/modules/custom/civictheme_dev/civictheme_dev.post_update.php (100%) rename {docroot => web}/modules/custom/civictheme_dev/civictheme_dev.services.yml (100%) rename {docroot => web}/modules/custom/civictheme_dev/composer.json (100%) rename {docroot => web}/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_multiple_filters_exp.yml (100%) rename {docroot => web}/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_one_filter_multi_select_exp.yml (100%) rename {docroot => web}/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_one_filter_single_select_exp.yml (100%) rename {docroot => web}/modules/custom/civictheme_dev/config/install/views.view.civictheme_automated_list_examples.yml (100%) rename {docroot => web}/modules/custom/civictheme_dev/config/install/views.view.civictheme_automated_list_test.yml (100%) rename {docroot => web}/modules/custom/civictheme_dev/config/install/views.view.civictheme_table_examples.yml (100%) rename {docroot => web}/modules/custom/civictheme_dev/config/optional/user.role.administrator.yml (100%) rename {docroot => web}/modules/custom/civictheme_dev/src/EventSubscriber/CivicthemeDevConfigDevelSubscriber.php (100%) rename {docroot => web}/modules/custom/civictheme_dev/src/Helper.php (100%) rename {docroot => web}/modules/custom/civictheme_dev/src/Plugin/ConfigFilter/CivicthemeDevIgnoreFilter.php (100%) rename {docroot => web}/modules/custom/civictheme_govcms/README.md (100%) rename {docroot => web}/modules/custom/civictheme_govcms/civictheme_govcms.info.yml (100%) rename {docroot => web}/modules/custom/civictheme_govcms/civictheme_govcms.services.yml (100%) rename {docroot => web}/modules/custom/civictheme_govcms/composer.json (100%) rename {docroot => web}/modules/custom/civictheme_govcms/config/optional/user.role.administrator.yml (100%) rename {docroot => web}/modules/custom/civictheme_govcms/drush.services.yml (100%) rename {docroot => web}/modules/custom/civictheme_govcms/src/CivicthemeGovcmsManager.php (100%) rename {docroot => web}/modules/custom/civictheme_govcms/src/Commands/CivicthemeGovcmsCommands.php (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.doc (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.docx (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.gif (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.jpeg (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.jpg (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.mp3 (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.mp4 (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.pdf (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.png (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.svg (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.xls (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy1.xlsx (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy2.doc (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy2.docx (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy2.gif (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy2.jpeg (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy2.jpg (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy2.pdf (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy2.png (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy2.svg (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy2.xls (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy2.xlsx (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy3.jpeg (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy3.jpg (100%) rename {docroot => web}/modules/custom/cs_generated_content/assets/dummy3.png (100%) rename {docroot => web}/modules/custom/cs_generated_content/composer.json (100%) rename {docroot => web}/modules/custom/cs_generated_content/config/optional/views.view.cs_generated_content_list.yml (100%) rename {docroot => web}/modules/custom/cs_generated_content/cs_generated_content.info.yml (100%) rename {docroot => web}/modules/custom/cs_generated_content/cs_generated_content.install (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/file/file.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/media/civictheme_document.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/media/civictheme_icon.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/media/civictheme_image.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/media/civictheme_video.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_event.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/01.helpers.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/02.general.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/component.attachment.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/component.map.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/01.helpers.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/02.general.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/03.banner.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.accordion.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.attachment.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.automated_list.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.callout.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.campaign.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.cards.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.content.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.iframe.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.manual_list.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.map.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.next_step.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.promo.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.quote.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.slider.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.webform.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/taxonomy_term/civictheme_site_sections.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/taxonomy_term/civictheme_topics.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/generated_content/user/user.inc (100%) rename {docroot => web}/modules/custom/cs_generated_content/src/CsGeneratedContentAssetGenerator.php (100%) rename {docroot => web}/modules/custom/cs_generated_content/src/CsGeneratedContentCivicthemeTrait.php (100%) rename {docroot => web}/modules/custom/cs_generated_content/src/CsGeneratedContentHelper.php (100%) rename {docroot => web}/modules/custom/cs_generated_content/src/CsGeneratedContentServiceProvider.php (100%) rename {docroot => web}/robots.txt (100%) rename {docroot => web}/sites/default/default.services.local.yml (100%) rename {docroot => web}/sites/default/default.services.yml (94%) rename {docroot => web}/sites/default/default.settings.local.php (90%) rename {docroot => web}/sites/default/default.settings.php (96%) create mode 100644 web/sites/default/includes/settings.environment_indicator.php rename {docroot => web}/sites/default/includes/settings.fast404.php (90%) create mode 100644 web/sites/default/includes/settings.shield.php rename {docroot => web}/sites/default/services.yml (60%) rename {docroot => web}/sites/default/settings.php (51%) rename {docroot => web}/themes/contrib/civictheme/.ahoy.yml (100%) rename {docroot => web}/themes/contrib/civictheme/.circleci/build.sh (100%) rename {docroot => web}/themes/contrib/civictheme/.circleci/config.yml (100%) rename {docroot => web}/themes/contrib/civictheme/.circleci/deploy.sh (100%) rename {docroot => web}/themes/contrib/civictheme/.circleci/lint.sh (100%) rename {docroot => web}/themes/contrib/civictheme/.circleci/process-artifacts.sh (100%) rename {docroot => web}/themes/contrib/civictheme/.circleci/test.sh (100%) rename {docroot => web}/themes/contrib/civictheme/.editorconfig (100%) rename {docroot => web}/themes/contrib/civictheme/.eslintignore (100%) rename {docroot => web}/themes/contrib/civictheme/.eslintrc.yml (100%) rename {docroot => web}/themes/contrib/civictheme/.gitattributes (100%) create mode 100644 web/themes/contrib/civictheme/.github/release-drafter.yml rename {docroot => web}/themes/contrib/civictheme/.github/workflows/draft-release.yml (100%) rename {docroot => web}/themes/contrib/civictheme/.gitignore (100%) rename {docroot => web}/themes/contrib/civictheme/.gitignore.release (100%) rename {docroot => web}/themes/contrib/civictheme/.nvmrc (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/addon-config.js (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/components_css.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/drupal_behaviors.js (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/importer.scss_variables.js (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/main.js (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/manager-head.html (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/manager.js (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/preview.js (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/setupTwig.js (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/static/api/alerts1.json (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/static/api/alerts2.json (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/static/api/alerts3.json (100%) rename {docroot => web}/themes/contrib/civictheme/.storybook/theme.js (100%) rename {docroot => web}/themes/contrib/civictheme/.stylelintignore (100%) rename {docroot => web}/themes/contrib/civictheme/.stylelintrc.json (100%) rename {docroot => web}/themes/contrib/civictheme/README.md (100%) rename {docroot => web}/themes/contrib/civictheme/assets/backgrounds/civictheme_background_1.png (100%) rename {docroot => web}/themes/contrib/civictheme/assets/backgrounds/civictheme_background_2.png (100%) rename {docroot => web}/themes/contrib/civictheme/assets/favicon.ico (100%) rename {docroot/themes/contrib/civictheme/assets/js => web/themes/contrib/civictheme/assets/fonts}/.gitkeep (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/account.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/approve.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/bars.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/bullet.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/calendar-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/calendar-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/call.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/cancel.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/checked.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/close-outline.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/close.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/down-arrow-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/down-arrow-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/down-arrow-large.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/download-file.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/download.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/exclamation-mark-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/exclamation-mark-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/exclamation-mark-3.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/eye.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/facebook.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/help.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/image.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/information-mark.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/left-arrow-outline.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/left-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/linkedin.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/magnifier.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/map.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/megaphone.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/mortarboard.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/newspaper.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/pdf-file.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/progress.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/right-arrow-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/right-arrow-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/select-box.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/share.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/square.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/to-do.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/twitter.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/up-arrow-large.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/up-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/upper-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/upper-right-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/watch.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/icons/word-file.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/images/demo1.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/images/demo2.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/images/demo3.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/images/demo4.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/images/demo5.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/images/demo6.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/images/facebook.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/images/linkedin.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/images/twitter.svg (100%) rename {docroot/themes/contrib/civictheme/civictheme_library/assets/fonts => web/themes/contrib/civictheme/assets/js}/.gitkeep (100%) rename {docroot => web}/themes/contrib/civictheme/assets/logos/logo_primary_dark_desktop.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/logos/logo_primary_dark_mobile.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/logos/logo_primary_light_desktop.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/logos/logo_primary_light_mobile.svg (100%) rename {docroot => web}/themes/contrib/civictheme/assets/logos/logo_secondary_dark_desktop.png (100%) rename {docroot => web}/themes/contrib/civictheme/assets/logos/logo_secondary_dark_mobile.png (100%) rename {docroot => web}/themes/contrib/civictheme/assets/logos/logo_secondary_light_desktop.png (100%) rename {docroot => web}/themes/contrib/civictheme/assets/logos/logo_secondary_light_mobile.png (100%) rename {docroot => web}/themes/contrib/civictheme/assets/sass/header/_header.scss (100%) rename {docroot => web}/themes/contrib/civictheme/assets/sass/theme.scss (100%) rename {docroot => web}/themes/contrib/civictheme/assets/videos/demo.avi (100%) rename {docroot => web}/themes/contrib/civictheme/assets/videos/demo.mp4 (100%) rename {docroot => web}/themes/contrib/civictheme/assets/videos/demo.webm (100%) rename {docroot => web}/themes/contrib/civictheme/assets/videos/demo_poster.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme.api.php (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme.breakpoints.yml (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme.info.yml (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme.layouts.yml (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme.libraries.yml (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme.post_update.php (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme.theme (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_create_subtheme.php (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.eslintignore (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.eslintrc.yml (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.gitattributes (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.gitignore (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.gitignore.release (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.nvmrc (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/addon-config.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/css.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/importer.scss_variables.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/main.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/manager-head.html (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/manager.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/preview.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts1.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts2.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts3.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.storybook/theme.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.stylelintignore (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/.stylelintrc.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/README.md (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_1.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_2.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_3.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_4.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_5.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_6.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_7.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/favicon.ico (100%) rename {docroot/themes/contrib/civictheme/civictheme_library/components/04-templates/event => web/themes/contrib/civictheme/civictheme_library/assets/fonts}/.gitkeep (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/account.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/approve.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/bars.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/bullet.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/calendar-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/calendar-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/call.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/cancel.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/checked.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/close-outline.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/close.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-large.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/download-file.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/download.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-3.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/eye.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/facebook.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/help.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/image.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/information-mark.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/left-arrow-outline.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/left-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/linkedin.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/magnifier.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/map.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/megaphone.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/mortarboard.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/newspaper.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/pdf-file.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/progress.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/right-arrow-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/right-arrow-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/select-box.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/share.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/square.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/to-do.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/twitter.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/up-arrow-large.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/up-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/upper-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/upper-right-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/watch.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/icons/word-file.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/images/demo1.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/images/demo2.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/images/demo3.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/images/demo4.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/images/demo5.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/images/demo6.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_dark_desktop.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_dark_mobile.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_light_desktop.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_light_mobile.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_dark_desktop.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_dark_mobile.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_light_desktop.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_light_mobile.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/videos/demo.avi (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/videos/demo.mp4 (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/videos/demo.webm (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/assets/videos/demo_poster.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/_variables.base.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/_variables.components.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.utils.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/base.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/base.utils.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.stories.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/debug/_index.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/elevation/elevation.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/elevation/elevation.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/_index.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/fonts.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/fonts.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/grid/_index.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/grid/grid.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/grid/grid.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.utils.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/layout/content-layout--single-column-contained.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/layout/content-layout--single-column.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.utils.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_breakpoint.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_color.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_component.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_content.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_debug.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_deprecations.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_disabled.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_elevation.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_font.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_form.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_generator.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_grid.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_highlight.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_icon.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_image.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_index.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_link.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_map.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_message.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_outline.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_particle.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_print.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_rem.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_reset.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_spacing.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_string.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_table.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_typography.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_visibility.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/reset/reset.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.stories.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/time/time.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/time/time.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/typography/_index.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/typography/typography.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/typography/typography.stories.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/variables.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/00-base/visibility/_index.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.event.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/image/image.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/image/image.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/input/input.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/input/input.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/video/video.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/01-atoms/video/video.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/editor-content/editor-content.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/editor-content/editor-content.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.utils.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/tag-list/tag-list.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/tag-list/tag-list.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.stories.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.stories.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-close.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-menu.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-trigger.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slide.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.utils.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.twig (100%) rename {docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts => web/themes/contrib/civictheme/civictheme_library/components/04-templates/event}/.gitkeep (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/04-templates/page/page.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/style.css_variables.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/style.editor.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/style.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/style.stories.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/variables.base.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/components/variables.components.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/package.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/scripts/extract_css_colors_to_csv.php (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/webpack/assets.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/webpack/babel-plugin-script-wrapper.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/webpack/css.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/webpack/css_variables.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/webpack/info.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/webpack/libraries.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/webpack/webpack.common.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/webpack/webpack.dev.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_library/webpack/webpack.prod.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.editorconfig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.eslintignore (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.eslintrc.yml (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.gitignore (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.nvmrc (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/addon-config.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/components_css.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/drupal_behaviors.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/importer.scss_variables.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/main.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/manager-head.html (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/manager.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/preview.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/setupTwig.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts1.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts2.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts3.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.storybook/theme.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/.stylelintrc.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/README.md (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/backgrounds/civictheme_starter_kit_background_1.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/backgrounds/civictheme_starter_kit_background_2.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/favicon.ico (100%) rename {docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/js => web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts}/.gitkeep (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.ttf (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.woff (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.woff2 (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.eot (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.ttf (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.woff (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.eot (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.ttf (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.woff (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.eot (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.ttf (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.woff (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.eot (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.ttf (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.woff (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.eot (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.ttf (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.woff (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.eot (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.ttf (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.woff (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.eot (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.ttf (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.woff (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.eot (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.ttf (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.woff (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/account.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/approve.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/bars.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/bullet.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/calendar-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/calendar-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/call.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/cancel.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/checked.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/close-outline.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/close.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-large.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/download-file.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/download.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-3.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/eye.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/facebook.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/help.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/image.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/information-mark.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/left-arrow-outline.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/left-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/linkedin.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/magnifier.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/map.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/megaphone.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/mortarboard.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/newspaper.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/pdf-file.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/progress.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/right-arrow-1.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/right-arrow-2.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/select-box.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/share.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/square.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/to-do.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/twitter.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/up-arrow-large.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/up-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/upper-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/upper-right-arrow.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/watch.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/word-file.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo1.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo2.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo3.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo4.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo5.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo6.jpg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/images/facebook.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/images/linkedin.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/images/twitter.svg (100%) rename {docroot/themes/contrib/civictheme/civictheme_starter_kit/components/00-base => web/themes/contrib/civictheme/civictheme_starter_kit/assets/js}/.gitkeep (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_dark_desktop.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_dark_mobile.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_light_desktop.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_light_mobile.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_dark_desktop.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_dark_mobile.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_light_desktop.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_light_mobile.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/block/_local-tasks.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/editor/_index.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/theme.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.avi (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.mp4 (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.webm (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo_poster.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.info.yml (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.libraries.yml (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.theme (100%) rename {docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms => web/themes/contrib/civictheme/civictheme_starter_kit/components/00-base}/.gitkeep (100%) rename {docroot/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules => web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms}/.gitkeep (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.twig (100%) rename {docroot/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms => web/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules}/.gitkeep (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/navigation-card/navigation-card.stories.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/navigation-card/navigation-card.twig (100%) rename {docroot/themes/contrib/civictheme/civictheme_starter_kit/components/04-templates => web/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms}/.gitkeep (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms/header/header.twig (100%) rename {docroot/themes/contrib/civictheme/civictheme_starter_kit/templates => web/themes/contrib/civictheme/civictheme_starter_kit/components/04-templates}/.gitkeep (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/components/variables.base.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/components/variables.components.scss (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/composer.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/gulpfile.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/logo.svg (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/package.json (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/screenshot.png (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/scripts/add_phpcs_exclusions.php (100%) create mode 100644 web/themes/contrib/civictheme/civictheme_starter_kit/templates/.gitkeep rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/templates/form/input--submit.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/assets.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/babel-plugin-drupal-behavior-wrapper.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/components_css.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/css_variables.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/editor_css.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/libraries.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/theme_css.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/theme_js.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.common.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.dev.js (100%) rename {docroot => web}/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.prod.js (100%) rename {docroot => web}/themes/contrib/civictheme/components (100%) rename {docroot => web}/themes/contrib/civictheme/composer.json (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block.block.civictheme_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block.block.civictheme_footer_sitebranding.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block.block.civictheme_header_sitebranding.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block.block.civictheme_header_sitebranding2.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block.block.civictheme_help.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block.block.civictheme_messages.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block.block.civictheme_primaryadminactions.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block.block.civictheme_tabs.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block_content.type.civictheme_banner.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block_content.type.civictheme_component_block.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block_content.type.civictheme_mobile_navigation.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block_content.type.civictheme_search.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/block_content.type.civictheme_social_links.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/civictheme.settings.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_alert.promote.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_event.promote.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_page.promote.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.date_format.civictheme_short_date.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.date_format.civictheme_short_date_and_time.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_banner.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_component_block.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_mobile_navigation.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_search.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_social_links.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_audio.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_audio.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_document.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_document.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_icon.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_icon.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_image.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_image.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_remote_video.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_remote_video.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_video.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_video.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_alert.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_event.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_page.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_accordion.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_accordion_panel.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_attachment.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_automated_list.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_callout.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_campaign.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_content.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_event_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_event_card_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_iframe.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_manual_list.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_map.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_navigation_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_navigation_card_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_next_step.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo_card_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_publication_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_quote.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_service_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider_slide.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider_slide_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_snippet.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_snippet_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_social_icon.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_subject_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_subject_card_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_webform.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_form_display.taxonomy_term.civictheme_site_sections.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_banner.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_component_block.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_mobile_navigation.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_search.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_social_links.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_audio.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_audio.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_document.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_document.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_icon.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_icon.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.component.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.embedded.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.full.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.full.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.media_library.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_alert.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_navigation_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_promo_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_slider_slide.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_navigation_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_promo_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_slider_slide.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_accordion.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_accordion_panel.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_attachment.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_automated_list.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_callout.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_campaign.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_content.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_event_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_event_card_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_iframe.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_manual_list.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_map.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_navigation_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_navigation_card_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_next_step.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo_card_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_publication_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_quote.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_service_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider_slide.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider_slide_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_snippet.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_snippet_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_social_icon.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_subject_card.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_subject_card_ref.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_webform.default.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_mode.media.component.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_mode.media.embedded.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_navigation_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_promo_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_slider_slide.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_snippet.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/editor.editor.civictheme_rich_text.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_background_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_banner_blend_mode.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_banner_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_featured_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_component_block.field_c_b_components.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_bottom.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_top.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_trigger_text.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_trigger_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_search.field_c_b_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_social_icons.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_with_border.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_audio.field_c_m_audio_file.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_document.field_c_m_document.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_icon.field_c_m_icon.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_image.field_c_m_caption.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_image.field_c_m_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_oembed_video.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_transcript.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_transcript_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_transcript.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_transcript_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_video_file.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_alert_page_visibility.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_alert_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_body.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_date_range.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_attachments.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_body.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_custom_last_updated.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_date_range.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_location.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_show_last_updated.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_show_toc.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_site_section.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_summary.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_thumbnail.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_blend_mode.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_components.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_components_bott.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_featured_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_hide_breadcrumb.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_components.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_custom_last_updated.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_hide_sidebar.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_hide_tags.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_show_last_updated.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_show_toc.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_site_section.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_summary.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_thumbnail.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_expand.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_panels.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_expand.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_attachments.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_column_count.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_content_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_fill_width.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_filters_exp.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_item_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_item_view_as.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_limit.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_limit_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_link_above.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_link_below.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_site_sections.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_links.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_date.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_image_position.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_links.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_date_range.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_location.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_summary.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card_ref.field_c_p_reference.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card_ref.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_attributes.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_height.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_url.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_width.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_column_count.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_fill_width.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_items.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_link_above.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_link_below.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_address.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_embed_url.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_view_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_show_image_as_icon.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_summary.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card_ref.field_c_p_reference.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card_ref.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_subtitle.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_summary.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card_ref.field_c_p_reference.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card_ref.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_document.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_summary.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_author.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_links.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_slides.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_date.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_image_position.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_links.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_image_position.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_link_text.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_reference.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_summary.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet_ref.field_c_p_reference.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet_ref.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_social_icon.field_c_p_icon.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_social_icon.field_c_p_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card_ref.field_c_p_reference.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card_ref.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_webform.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_background_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_banner_blend_mode.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_banner_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_bottom.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_components.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_featured_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_social_icons.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_top.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_trigger_text.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_trigger_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_with_border.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_audio_file.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_caption.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_document.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_icon.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_oembed_video.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_transcript.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_transcript_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_video_file.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_alert_page_visibility.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_alert_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_attachments.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_blend_mode.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_components.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_components_bott.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_featured_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_hide_breadcrumb.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_body.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_components.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_custom_last_updated.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_date_range.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_hide_sidebar.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_hide_tags.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_location.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_show_last_updated.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_show_toc.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_site_section.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_summary.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_thumbnail.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_address.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_attachments.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_attributes.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_author.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_background.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_cards.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_date.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_date_range.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_default_panel.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_document.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_embed_url.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_expand.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_footer_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_header_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_height.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_icon.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_image_position.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_link_text.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_links.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_column_count.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_content_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_fill_width.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_filters_exp.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_item_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_item_view_as.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_items.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_limit.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_limit_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_link_above.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_link_below.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_site_sections.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_type.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_location.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_panels.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_reference.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_show_image_as_icon.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_slides.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_subtitle.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_summary.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_theme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_title.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_url.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_vertical_spacing.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_view_link.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_webform.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_width.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/filter.format.civictheme_plain_text.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/filter.format.civictheme_rich_text.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/image.style.civictheme_medium.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/image.style.civictheme_navigation_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/image.style.civictheme_promo_banner.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/image.style.civictheme_promo_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/image.style.civictheme_thumbnail.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/image.style.civictheme_topic_desktop.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/image.style.civictheme_topic_mobile.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/media.type.civictheme_audio.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/media.type.civictheme_document.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/media.type.civictheme_icon.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/media.type.civictheme_image.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/media.type.civictheme_remote_video.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/media.type.civictheme_video.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/node.type.civictheme_alert.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/node.type.civictheme_event.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/node.type.civictheme_page.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_accordion.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_accordion_panel.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_attachment.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_automated_list.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_callout.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_campaign.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_event_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_event_card_ref.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_iframe.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_manual_list.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_map.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_navigation_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_navigation_card_ref.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_next_step.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo_card_ref.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_publication_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_quote.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_service_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider_slide.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider_slide_ref.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_snippet.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_snippet_ref.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_social_icon.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_subject_card.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_subject_card_ref.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_webform.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_alert.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_event.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_page.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/system.menu.civictheme-footer.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/system.menu.civictheme-primary-navigation.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/system.menu.civictheme-secondary-navigation.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/taxonomy.vocabulary.civictheme_site_sections.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/taxonomy.vocabulary.civictheme_topics.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/user.role.civictheme_content_approver.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/user.role.civictheme_content_author.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/user.role.civictheme_site_administrator.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/views.view.civictheme_alerts.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/views.view.civictheme_automated_list.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/install/webform.webform.civictheme_enquiry.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_banner.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_acknowledgment_of_country.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_copyright.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_1.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_2.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_3.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_4.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_social_links.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_mobile_navigation.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_primary_navigation.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_search.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_secondary_navigation.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_side_navigation.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/block.block.civictheme_signup.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/linkit.linkit_profile.civictheme.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/media.settings.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/search_api.index.civictheme_content.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/search_api.server.civictheme_database.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/search_api.settings.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/search_api_db.settings.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/optional/views.view.civictheme_search.yml (100%) rename {docroot => web}/themes/contrib/civictheme/config/schema/civictheme.schema.yml (100%) rename {docroot => web}/themes/contrib/civictheme/includes/accordion.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/alert.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/attachment.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/automated_list.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/banner.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/block_content.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/callout.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/campaign.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/cards.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/content.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/form.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/iframe.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/image.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/libraries.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/link.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/local_tasks.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/manual_list.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/map.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/media.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/menu.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/mobile_navigation.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/next_step.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/node.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/page.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/pager.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/paragraphs.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/primary_navigation.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/process.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/promo.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/quote.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/search.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/secondary_navigation.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/site_section.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/skip_link.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/slider.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/snippet.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/social_links.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/system_branding.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/system_main_block.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/table.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/utilities.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/views.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/webform.inc (100%) rename {docroot => web}/themes/contrib/civictheme/includes/wysiwyg.inc (100%) rename {docroot => web}/themes/contrib/civictheme/logo.svg (100%) rename {docroot => web}/themes/contrib/civictheme/package.json (100%) rename {docroot => web}/themes/contrib/civictheme/screenshot.png (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemeColorManager.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemeConfigImporter.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemeConfigManager.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemeConstants.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemePluginLoader.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemeSettingsFormManager.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemeStylesheetGenerator.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemeStylesheetParser.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemeUpdateHelper.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemeUtility.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/CivicthemeVersionManager.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Color/CivicthemeColor.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Color/CivicthemeColorFilterBase.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Color/CivicthemeColorShadeFilter.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Color/CivicthemeColorTintFilter.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Color/CivicthemeColorUtility.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Drush/Commands/CivicthemeCommands.php (98%) rename {docroot => web}/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionAttached.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionBase.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionColors.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionComponents.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionInformation.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionOptout.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionProvision.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionReset.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionStorybook.php (100%) rename {docroot => web}/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionVersion.php (100%) rename {docroot => web}/themes/contrib/civictheme/templates/block/block--civictheme-banner--default.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/block/block--civictheme-component-block--default.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/block/block--civictheme-mobile-navigation--default.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/block/block--civictheme-search--default.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/block/block--civictheme-social-links--default.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-footer.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-primary-navigation.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-secondary-navigation.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/block/block--system-branding-block.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/block/block.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/content/node--civictheme-alert.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-navigation-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-promo-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-slider-slide.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-snippet.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-navigation-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-promo-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-slider-slide.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-snippet.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/content/page-title.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/dataset/table.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/field/field--field-c-n-body.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/field/field--field-c-n-date.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/field/field--node--field-c-n-date-range.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/field/field.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/form/checkboxes.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/form/form-element-label.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/form/form-element.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/form/input--submit.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/form/input.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/form/radios.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/form/select.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/form/textarea.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/layout/html.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/layout/layout--single-column-contained.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/layout/layout--single-column.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/layout/page.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/layout/region.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/media/media--civictheme-image--component.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/media/media--civictheme-image.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/media/media--civictheme-remote-video--full.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/media/media--civictheme-remote-video.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/media/media--civictheme-video--full.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/media/media--civictheme-video.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/misc/basic-content.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/misc/image.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/misc/status-messages.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/misc/tag-list.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/navigation/breadcrumb.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/navigation/menu-local-tasks.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/navigation/menu.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/navigation/pager.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/navigation/views-mini-pager.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-accordion.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-attachment.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-automated-list.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-callout.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-campaign.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-content.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-event-card-ref.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-event-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-iframe.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-manual-list.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-map.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-navigation-card-ref.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-navigation-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-next-step.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo-card-ref.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-publication-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-quote.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-reference-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-service-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider-slide-ref.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider-slide.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-snippet-ref.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-snippet.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-subject-card-ref.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-subject-card.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-webform.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/views/views-exposed-form.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/views/views-view-grid.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/views/views-view-table.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/templates/views/views-view.html.twig (100%) rename {docroot => web}/themes/contrib/civictheme/tests/fixtures/updates/drupal_10.0.0-rc1.minimal.civictheme_1.3.2.bare.php.gz (100%) rename {docroot => web}/themes/contrib/civictheme/tests/fixtures/updates/drupal_10.0.0-rc1.minimal.civictheme_1.3.2.filled.php.gz (100%) rename {docroot => web}/themes/contrib/civictheme/tests/src/Functional/CivicthemeBrowserTestBase.php (100%) rename {docroot => web}/themes/contrib/civictheme/tests/src/Functional/CivicthemeInstallOptionalTest.php (100%) rename {docroot => web}/themes/contrib/civictheme/tests/src/Functional/CivicthemeInstallRequiredTest.php (100%) rename {docroot => web}/themes/contrib/civictheme/tests/src/Functional/Update/CivicthemeUpdatePathBareTest.php (100%) rename {docroot => web}/themes/contrib/civictheme/tests/src/Functional/Update/CivicthemeUpdatePathFilledTest.php (100%) rename {docroot => web}/themes/contrib/civictheme/tests/src/Traits/CivicthemeTestHelperTrait.php (100%) rename {docroot => web}/themes/contrib/civictheme/tests/src/Unit/CivicthemeColorUtilityUnitTest.php (100%) rename {docroot => web}/themes/contrib/civictheme/tests/src/Unit/CivicthemeHtmlLinkUnitTest.php (100%) rename {docroot => web}/themes/contrib/civictheme/tests/src/Unit/CivicthemeUnitTestBase.php (100%) rename {docroot => web}/themes/contrib/civictheme/tests/src/Unit/CivicthemeUtilityUnitTest.php (100%) rename {docroot => web}/themes/contrib/civictheme/theme-settings.php (100%) rename {docroot => web}/themes/contrib/civictheme/theme-settings.provision.inc (100%) rename {docroot => web}/themes/contrib/civictheme/theme-settings/assets/logo.png (100%) rename {docroot => web}/themes/contrib/civictheme/theme-settings/civictheme.theme-settings.colors.css (100%) rename {docroot => web}/themes/contrib/civictheme/theme-settings/civictheme.theme-settings.colors.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/assets.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/babel-plugin-drupal-behavior-wrapper.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/components_css.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/css_variables.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/editor_css.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/libraries.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/theme_css.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/theme_js.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/webpack.common.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/webpack.dev.js (100%) rename {docroot => web}/themes/contrib/civictheme/webpack/webpack.prod.js (100%) rename {docroot => web}/update.php (100%) diff --git a/.ahoy.local.example.yml b/.ahoy.local.example.yml new file mode 100644 index 000000000..5abcbb63b --- /dev/null +++ b/.ahoy.local.example.yml @@ -0,0 +1,14 @@ +--- +ahoyapi: v2 +usage: Project specific ahoy commands. + +commands: + help: + cmd: | + echo "[INFO] Custom local commands" + echo "You may add custom local commands to your toolchain. This local Ahoy file will not be comitted to the repository" + echo + +# mylocalcommand: +# cmd: | +# echo "Anything complex you can do on the command line." diff --git a/.ahoy.yml b/.ahoy.yml index 6af466321..9ddec9cf6 100644 --- a/.ahoy.yml +++ b/.ahoy.yml @@ -17,23 +17,25 @@ commands: usage: Build or rebuild the project. cmd: | ahoy confirm "Running this command will remove your current database and files. Are you sure?" && - ./scripts/drevops/build.sh + ./scripts/drevops/build.sh && + ahoy info info: usage: Show information about this project. cmd: | - docker-compose exec \ - -e COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-${PWD##*/}} \ - -e DREVOPS_HOST_DB_PORT=$(docker port $(docker-compose ps -q mariadb 2>/dev/null) 3306 2>/dev/null | cut -d : -f 2) \ - -e DREVOPS_DRUPAL_SHOW_LOGIN_LINK=${DREVOPS_DRUPAL_SHOW_LOGIN_LINK} \ - cli ./scripts/drevops/info.sh "$@" + COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-${PWD##*/}} \ + DREVOPS_HOST_DB_PORT=$(docker compose port mariadb 3306 2>/dev/null | cut -d : -f 2) \ + DREVOPS_HOST_SOLR_PORT=$(docker compose port solr 8983 2>/dev/null | cut -d : -f 2) \ + DREVOPS_HOST_HAS_SEQUELACE=$(uname -a | grep -i -q darwin && mdfind -name 'Sequel Ace' 2>/dev/null | grep -q "Ace" && echo 1 || true) \ + DREVOPS_DRUPAL_SHOW_LOGIN_LINK=${DREVOPS_DRUPAL_SHOW_LOGIN_LINK} \ + ahoy cli ./scripts/drevops/info.sh "$@" db: usage: Open DB in Sequel Ace. cmd: | - uname -a | grep -i -q darwin && mdfind -name 'Sequel Ace'|grep -q "Ace" \ - && DREVOPS_HOST_DB_PORT="$(docker port $(docker-compose ps -q mariadb 2>/dev/null) 3306 2>/dev/null | cut -d : -f 2)" \ - && open "mysql://${DREVOPS_MARIADB_USER}:${DREVOPS_MARIADB_PASSWORD}@127.0.0.1:${DREVOPS_HOST_DB_PORT}/drupal" -a "Sequel Ace" \ + uname -a | grep -i -q darwin && mdfind -name 'Sequel Ace' 2>/dev/null |grep -q "Ace" \ + && DREVOPS_HOST_DB_PORT="$(docker port $(docker compose ps -q mariadb 2>/dev/null) 3306 2>/dev/null | cut -d : -f 2)" \ + && open "mysql://${MARIADB_USERNAME:-drupal}:${MARIADB_PASSWORD:-drupal}@127.0.0.1:${DREVOPS_HOST_DB_PORT}/drupal" -a "Sequel Ace" \ || echo "Not a supported OS or Sequel Ace is not installed." # ---------------------------------------------------------------------------- @@ -43,32 +45,32 @@ commands: up: usage: Build and start Docker containers. cmd: | - docker-compose up -d "$@" && if docker-compose logs | grep -q "\[Error\]"; then exit 1; fi - mkdir -p docroot/sites/default/files && docker-compose port cli 35729 | cut -d : -f 2 | xargs -I{} ahoy cli 'echo {} > /app/docroot/sites/default/files/livereload.sock' + docker compose up -d "$@" && if docker compose logs | grep -q "\[Error\]"; then exit 1; fi + mkdir -p ${DREVOPS_WEBROOT}/sites/default/files && docker compose port cli 35729 | cut -d : -f 2 | xargs -I{} ahoy cli 'echo {} > /app/${DREVOPS_WEBROOT}/sites/default/files/livereload.sock' down: usage: Stop Docker containers and remove container, images, volumes and networks. cmd: | ahoy confirm "Running this command will remove your current database. Are you sure?" && - if [ -f "docker-compose.yml" ]; then docker-compose down --volumes > /dev/null 2>&1; fi + if [ -f "docker-compose.yml" ]; then docker compose down --remove-orphans --volumes > /dev/null 2>&1; fi start: usage: Start existing Docker containers. cmd: | - docker-compose start "$@" - mkdir -p docroot/sites/default/files && docker-compose port cli 35729 | cut -d : -f 2 | xargs -I{} ahoy cli 'echo {} > /app/docroot/sites/default/files/livereload.sock' + docker compose start "$@" + mkdir -p ${DREVOPS_WEBROOT}/sites/default/files && docker compose port cli 35729 | cut -d : -f 2 | xargs -I{} ahoy cli 'echo {} > /app/${DREVOPS_WEBROOT}/sites/default/files/livereload.sock' stop: usage: Stop running Docker containers. - cmd: docker-compose stop "$@" + cmd: docker compose stop "$@" restart: usage: Restart stopped or running Docker containers. - cmd: docker-compose restart "$@" + cmd: docker compose restart "$@" logs: usage: Show Docker logs for services. - cmd: docker-compose logs "$@" + cmd: docker compose logs "$@" pull: usage: Pull latest Docker images. @@ -77,23 +79,25 @@ commands: cli: usage: Start a shell or run a command inside the CLI service container. # This will drop into shell if no arguments are supplied to this command. - # If arguments supplied, a new shell with DREVOPS_*, COMPOSE_* and TERM - # environment variables will be started. This allows passing of the environment - # variables to Ahoy commands which will then be forwarded to the container. - # Escape double quotes with \" (slash double-quote) when passing arguments with spaces. - cmd: if \[ "${#}" -ne 0 \]; then docker-compose exec $(env | cut -f1 -d= | grep "DREVOPS_\|COMPOSE_\|TERM" | sed 's/^/-e /') -T cli bash -c "$*"; else docker-compose exec cli bash; fi + # If arguments supplied, a new shell with TERM, COMPOSE_*, GITHUB_*, + # DOCKER_*, DRUPAL_* and DREVOPS_* environment variables will be started. + # This allows passing of the environment variables to Ahoy commands which + # will then be forwarded to the container. + # Escape double quotes with \" (slash double-quote) when passing arguments + # with spaces. + cmd: if \[ "${#}" -ne 0 \]; then docker compose exec $(env | cut -f1 -d= | grep "TERM\|COMPOSE_\|GITHUB_\|DOCKER_\DRUPAL_\|DREVOPS_" | sed 's/^/-e /') -T cli bash -c "$*"; else docker compose exec cli bash; fi composer: usage: Run Composer commands in the CLI service container. - cmd: docker-compose exec -T cli composer "$@" + cmd: ahoy cli composer "$@" drush: usage: Run Drush commands in the CLI service container. - cmd: docker-compose exec -T cli bash -c "drush -l ${DREVOPS_LOCALDEV_URL} $*" + cmd: ahoy cli "drush -l \${DREVOPS_LOCALDEV_URL} $*" flush-redis: usage: Flush Redis cache. - cmd: docker-compose exec redis redis-cli flushall + cmd: docker compose exec redis redis-cli flushall # ---------------------------------------------------------------------------- # Application commands. @@ -102,133 +106,111 @@ commands: login: usage: Login to a website. # Unblock user 1 and generate a one time login link. - cmd: ahoy cli ./scripts/drevops/drupal-login.sh + cmd: ahoy cli ./scripts/drevops/login.sh + download-db: + usage: Download database. + cmd: ./scripts/drevops/download-db.sh reload-db: usage: Reload the database container using local database image. cmd: | ahoy confirm "Running this command will replace your current database. Are you sure?" && - docker-compose rm -f -s -v mariadb && ahoy up -- --build mariadb && ahoy install-site && ahoy info && ahoy login || - echo "The operation was canceled." - - install-site: - usage: Install a site. - cmd: | - docker-compose exec \ - -e DREVOPS_DRUPAL_VERSION=${DREVOPS_DRUPAL_VERSION:-} \ - -e DREVOPS_DRUPAL_INSTALL_OPERATIONS_SKIP=${DREVOPS_DRUPAL_INSTALL_OPERATIONS_SKIP:-} \ - -e DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB=${DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB:-0} \ - -e DREVOPS_DRUPAL_PROFILE=${DREVOPS_DRUPAL_PROFILE:-standard} \ - -e CIVICTHEME_SUBTHEME_ACTIVATION_SKIP=${CIVICTHEME_SUBTHEME_ACTIVATION_SKIP:-0} \ - -e CIVICTHEME_SUBTHEME_FE_SKIP=${CIVICTHEME_SUBTHEME_FE_SKIP:-} \ - -e CIVICTHEME_GENERATED_CONTENT_CREATE_SKIP=${CIVICTHEME_GENERATED_CONTENT_CREATE_SKIP:-} \ - -e CIVICTHEME_CONTENT_PROFILE=${CIVICTHEME_CONTENT_PROFILE:-} \ - -T cli ./scripts/drevops/drupal-install-site.sh + docker compose rm -f -s -v mariadb \ + && ahoy up -- --build mariadb \ + && ahoy up wait_dependencies \ + && sleep 15 \ + && ahoy provision \ + && ahoy info \ + && ahoy login + + provision: + usage: Provision a site from the database dump or profile. + cmd: ahoy cli ./scripts/drevops/provision.sh export-db: - usage: Export database dump or database image (DREVOPS_DB_DOCKER_IMAGE variable must be set). - cmd: | - [ -z "${DREVOPS_DB_DOCKER_IMAGE}" ] && docker-compose exec -e DREVOPS_DB_DIR=${DREVOPS_DB_DIR:-} -T cli ./scripts/drevops/export-db-file.sh "$@" || \ - ( DREVOPS_DB_EXPORT_DOCKER_IMAGE="${DREVOPS_DB_DOCKER_IMAGE}" ./scripts/drevops/export-db-docker.sh "$@"; - if [ "${DREVOPS_EXPORT_DB_DOCKER_DEPLOY_PROCEED}" = "1" ]; then DREVOPS_DEPLOY_DOCKER_MAP=mariadb=${DREVOPS_DB_DOCKER_IMAGE} DREVOPS_DEPLOY_DOCKER_IMAGE_TAG=${DREVOPS_DOCKER_IMAGE_TAG} ./scripts/drevops/deploy-docker.sh; fi ) + usage: Export database dump or database image (if DREVOPS_DB_DOCKER_IMAGE variable is set). + cmd: ./scripts/drevops/export-db.sh "$@" pull-db: usage: Download database image with the latest nightly dump. Run "ahoy reload-db" to reload DB in the running stack. cmd: | [ -n "${DREVOPS_DB_DOCKER_IMAGE}" ] && docker pull $DREVOPS_DB_DOCKER_IMAGE - clean: - usage: Remove Docker containers and all build files. - cmd: ahoy down && ./scripts/drevops/clean.sh - reset: - usage: "Remove containers, all build, uncommitted files." + usage: "Remove containers, all build files. Use with `hard` to reset repository to the last commit." cmd: | - ahoy confirm "All containers, build and uncomitted files will be removed, repository will be reset to the last commit. Proceed?" \ - && ahoy clean && ./scripts/drevops/reset.sh || echo "The operation was canceled." + ahoy confirm "All containers and build files will be removed. Proceed?" && + AHOY_CONFIRM_RESPONSE=y ahoy down && ./scripts/drevops/reset.sh "$@" fei: usage: Install front-end assets. cmd: | - [ "${CIVICTHEME_LIBRARY_INSTALL_SKIP}" != "1" ] && ahoy cli "npm --prefix docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}/civictheme_library install" - ahoy cli "npm --prefix docroot/themes/contrib/${DREVOPS_DRUPAL_THEME} install" + [ "${CIVICTHEME_LIBRARY_INSTALL_SKIP}" != "1" ] && ahoy cli "npm --prefix web/themes/contrib/${DRUPAL_THEME}/civictheme_library install" + ahoy cli "npm --prefix web/themes/contrib/${DRUPAL_THEME} install" fe: usage: Build front-end assets. cmd: | - [ "${CIVICTHEME_LIBRARY_INSTALL_SKIP}" != "1" ] && ahoy cli "cd docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}/civictheme_library && npm run build" - ahoy cli "cd docroot/themes/contrib/${DREVOPS_DRUPAL_THEME} && npm run build" + [ "${CIVICTHEME_LIBRARY_INSTALL_SKIP}" != "1" ] && ahoy cli "cd web/themes/contrib/${DRUPAL_THEME}/civictheme_library && npm run build" + ahoy cli "cd web/themes/contrib/${DRUPAL_THEME} && npm run build" lint: usage: Lint back-end and front-end code. - cmd: ahoy cli ./scripts/drevops/lint.sh "$@" + cmd: ahoy lint-be && ahoy lint-fe lint-be: usage: Lint back-end code. - cmd: ahoy cli ./scripts/drevops/lint.sh be + cmd: | + ahoy cli vendor/bin/phpcs + ahoy cli vendor/bin/phpstan + ahoy cli vendor/bin/phpmd . text phpmd.xml lint-fe: usage: Lint front-end code. - cmd: ahoy cli ./scripts/drevops/lint.sh fe + cmd: | + ahoy cli vendor/bin/twigcs + ahoy cli "npm run --prefix \${DREVOPS_WEBROOT}/themes/custom/\${DRUPAL_THEME} lint" lint-config: usage: Lint config - cmd: ahoy cli ./scripts/drevops/lint.sh config + cmd: | + ahoy cli ./scripts/lint-theme-config.sh + ahoy cli "./vendor/bin/drush inspect_config civictheme.settings --detail --only-error" test: usage: Run all tests. cmd: ahoy test-unit && ahoy test-kernel && ahoy test-functional && ahoy test-bdd - test-fe: - usage: Run front-end tests. - cmd: ahoy cli "DREVOPS_TEST_TYPE=fe DREVOPS_TEST_REPORTS_DIR=${DREVOPS_TEST_REPORTS_DIR} ./scripts/drevops/test.sh $@" - test-unit: usage: Run PhpUnit unit tests. - cmd: ahoy cli "DREVOPS_TEST_TYPE=unit DREVOPS_TEST_REPORTS_DIR=${DREVOPS_TEST_REPORTS_DIR} ./scripts/drevops/test.sh $@" + cmd: ahoy cli vendor/bin/phpunit --testsuite=unit "$@" test-kernel: usage: Run PhpUnit kernel tests. - cmd: ahoy cli "DREVOPS_TEST_TYPE=kernel DREVOPS_TEST_ARTIFACT_DIR=${DREVOPS_TEST_ARTIFACT_DIR} DREVOPS_TEST_REPORTS_DIR=${DREVOPS_TEST_REPORTS_DIR} ./scripts/drevops/test.sh $@" + cmd: ahoy cli vendor/bin/phpunit --testsuite=kernel "$@" test-functional: usage: Run PhpUnit functional tests. - cmd: ahoy cli "DREVOPS_TEST_TYPE=functional DREVOPS_TEST_ARTIFACT_DIR=${DREVOPS_TEST_ARTIFACT_DIR} DREVOPS_TEST_REPORTS_DIR=${DREVOPS_TEST_REPORTS_DIR} ./scripts/drevops/test.sh $@" + cmd: ahoy cli vendor/bin/phpunit --testsuite=functional "$@" test-bdd: usage: Run BDD tests. - cmd: ahoy cli "DREVOPS_TEST_TYPE=bdd DREVOPS_TEST_ARTIFACT_DIR=${DREVOPS_TEST_ARTIFACT_DIR} DREVOPS_TEST_REPORTS_DIR=${DREVOPS_TEST_REPORTS_DIR} DREVOPS_TEST_BEHAT_PROFILE=${DREVOPS_TEST_BEHAT_PROFILE:-} DREVOPS_TEST_BEHAT_FORMAT=${DREVOPS_TEST_BEHAT_FORMAT:-} DREVOPS_TEST_BEHAT_PARALLEL_INDEX=${DREVOPS_TEST_BEHAT_PARALLEL_INDEX:-} BEHAT_SCREENSHOT_PURGE=${BEHAT_SCREENSHOT_PURGE-} DREVOPS_TEST_BEHAT_TAGS=${DREVOPS_TEST_BEHAT_TAGS-} ./scripts/drevops/test.sh $@" + cmd: ahoy cli php -d memory_limit=-1 vendor/bin/behat --colors "$@" test-bats: usage: Run Bats tests (host only). - cmd: bats --tap tests/bats/ - + cmd: ./scripts/test-tooling.sh debug: usage: Enable PHP Xdebug. - cmd: ahoy cli php -v | grep -q Xdebug || XDEBUG_ENABLE=true ahoy up cli php nginx && ahoy cli php -v | grep -q Xdebug && echo "Enabled debug confguration. Use 'ahoy up' to disable." - - export-config: - usage: Export theme config. - cmd: | - ahoy cli "./scripts/update-theme-config.sh" - ahoy drush cde civictheme_dev || true - if ahoy drush pm:list --status=Enabled --field=name | grep -q 'cs_generated_content'; then - ahoy drush cde cs_generated_content || true - fi - - export-content: - usage: Export content (run with CIVICTHEME_CONTENT_PROFILE=corporate ahoy install-site) . - cmd: | - ahoy confirm "This will uninstall several modules and users. Proceed?" \ - && ahoy cli "CIVICTHEME_CONTENT_PROFILE=${CIVICTHEME_CONTENT_PROFILE:-default} ./scripts/update-default-content.sh" || echo "The operation was canceled." + cmd: ahoy cli php -v | grep -q Xdebug || XDEBUG_ENABLE=true ahoy up cli php nginx && ahoy cli php -v | grep -q Xdebug && echo "Enabled debug configuration. Use 'ahoy up' to disable." deploy: usage: Run remote deployment procedures. cmd: | - ahoy confirm "Deployment usually runs in CI. Are you sure you want to proceed with manual deployment? (Run as DREVOPS_DEPLOY_PROCEED=1 ahoy deploy [type1,[type2..]], where [type] is 'code', 'docker', 'webhook')" \ - && ./scripts/drevops/deploy.sh "$@" || echo "The operation was canceled." + ahoy confirm "Deployment usually runs in CI. Are you sure you want to proceed with manual deployment? (Run as DREVOPS_DEPLOY_PROCEED=1 ahoy deploy [type1,[type2..]], where [type] is 'code', 'docker', 'webhook')" && + ./scripts/drevops/deploy.sh "$@" github-labels: usage: Update project's GitHub labels. @@ -238,21 +220,34 @@ commands: usage: Find problems with current project setup. cmd: ./scripts/drevops/doctor.sh "$@" - update: - usage: Update development stack. - cmd: ahoy confirm "Some committed files may become overwritten. Proceed?" && ./scripts/drevops/update.sh || echo "The operation was canceled." + update-drevops: + usage: Update DrevOps stack. + cmd: | + ahoy confirm "Some committed files may become overwritten. Proceed?" && + ./scripts/drevops/update-drevops.sh $@ local: usage: Custom local commands. See `ahoy local help`. cmd: | - if [ -f .ahoy.local.yml ]; then ahoy -f ".ahoy.local.yml" "$@"; else echo ".ahoy.local.yml does not exist. Copy default.ahoy.local.yml to .ahoy.local.yml and rerun this command."; fi + if [ -f .ahoy.local.yml ]; then + ahoy -f ".ahoy.local.yml" "$@" + else + echo ".ahoy.local.yml does not exist." + echo "Copy .ahoy.local.example.yml to .ahoy.local.yml and rerun this command."; + fi # ---------------------------------------------------------------------------- # Utilities. # ---------------------------------------------------------------------------- confirm: cmd: | - [ -z "$DREVOPS_AHOY_CONFIRM_RESPONSE" ] && read -r -p "$1 [y/N] " DREVOPS_AHOY_CONFIRM_RESPONSE; [ "$DREVOPS_AHOY_CONFIRM_RESPONSE" = "y" ] || [ "$DREVOPS_AHOY_CONFIRM_RESPONSE" = true ] + if [ -z "$AHOY_CONFIRM_RESPONSE" ]; then + read -r -p ">> $1 [y/N] " AHOY_CONFIRM_RESPONSE + [ "$AHOY_CONFIRM_RESPONSE" = "y" ] || [ "$AHOY_CONFIRM_RESPONSE" = true ] || ( echo "The operation was canceled." && exit 1 ) + else + echo ">> $1 [y/N] $AHOY_CONFIRM_RESPONSE" \ + && if [ "${AHOY_CONFIRM_WAIT_SKIP}" != "1" ]; then echo "Waiting for 3 seconds... Press Ctrl+C to cancel."; sleep 3; fi + fi hide: true # Override entrypoint to alter default behaviour of Ahoy. @@ -266,11 +261,11 @@ entrypoint: # Read variables from .env file, respecting existing environment variable values. # # It is important to understand that variables set in .env file are already - # available inside of the containers after stack is running (as a part of - # docker-compose functionality), so most of the commands are using these + # available inside the containers after stack is running (as a part of + # docker compose functionality), so most of the commands are using these # values taken from containers. # - # However, since docker does not support changes to environment variables in + # However, since Docker does not support changes to environment variables in # running containers without restarting containers, we are adding this # mechanism of reading variables here to allow adjustments of some variables # (like PHPCS scan targets) without the need to restart containers. @@ -279,7 +274,5 @@ entrypoint: - | t=$(mktemp) && export -p > "$t" && set -a && . ./.env && if [ -f ./.env.local ];then . ./.env.local;fi && set +a && . "$t" && rm "$t" && unset t bash -e -c "$0" "$@" - # Replaced with your command. - '{{cmd}}' - # The name of the command that was run (available as $0). - '{{name}}' diff --git a/.circleci/config.yml b/.circleci/config.yml index 71efe3ca3..c319f02d6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,23 +1,16 @@ # # CircleCI 2.0 configuration file. # -# Understanding CircleCI 'docker' executor. +# This configuration file uses the "docker" executor. A "runner" container, +# created from a specified Docker image, is used to checkout source code and +# run commands defined in this file. Application Docker containers defined in +# docker-compose.yml run on a *remote* Docker server controlled by CircleCI. +# The "runner" container uses Docker client to control the remote Docker server. # -# CircleCI uses "runner" container (created from specified Docker image) -# to checkout source code and run commands defined in this file. -# Application Docker containers (the ones defined in docker-compose.yml) -# run on *remote* docker server, started by CircleCI as a part of their stack. -# The "runner" container uses Docker client to control remote Docker server -# (when used locally, Docker bundles both client and server into a single -# "Docker" application, so you may not even know that these are two different -# services). -# -# Because Docker images use layers, it is possible to cache Docker images -# between builds to significantly speedup application provisioning for each -# job (it requires enabling of Docker Layer Caching feature in CircleCI by -# lodging a support request). -# https://circleci.com/docs/2.0/docker-layer-caching/ -version: 2 +# current paragraph) are explaining DrevOps inner workings and can be safely +# removed for your project. They are automatically removed when installing or +# updating DrevOps. +version: '2.1' ################################################################################ # VARIABLES @@ -99,49 +92,50 @@ aliases: DEPLOY_SSH_FINGERPRINT5: *deploy_ssh_fingerprint5 GIT_MIRROR_SSH_FINGERPRINT: *git_mirror_ssh_fingerprint docker: - - image: drevops/ci-builder:23.7.0 + - image: drevops/ci-runner:23.10.0 auth: - username: $DREVOPS_DOCKER_REGISTRY_USERNAME - password: $DREVOPS_DOCKER_REGISTRY_TOKEN + username: $DOCKER_USER + password: $DOCKER_PASS environment: - # Set timezone to ensure that executed operations use correct timestamps. + # Set runner timezone to ensure that executed operations use correct timestamps. TZ: *timezone - # Always answer 'y' to any confirmation questions. - DREVOPS_AHOY_CONFIRM_RESPONSE: 'y' - # Directory to store code exported between jobs. - DREVOPS_EXPORT_CODE_DIR: &drevops_build_export_dir /workspace/code + # Set runner terminal capabilities. + TERM: xterm-256color # Directory to store test results. - DREVOPS_TEST_REPORTS_DIR: &drevops_test_reports_dir /tmp/tests + DREVOPS_CI_TEST_RESULTS: &test_results /tmp/tests # Directory to store test artifacts. - DREVOPS_TEST_ARTIFACT_DIR: &drevops_test_artifact_dir /tmp/artifacts - # Use compact error reporting format. - DREVOPS_TEST_BEHAT_FORMAT: progress_fail + DREVOPS_CI_ARTIFACTS: &artifacts /tmp/artifacts + # Check only minimal stack requirements. + DREVOPS_DOCTOR_CHECK_MINIMAL: 1 + # Directory to store code exported between jobs. + DREVOPS_EXPORT_CODE_DIR: &drevops_build_export_dir /workspace/code # Directory to use for artifact deployments. DREVOPS_DEPLOY_ARTIFACT_SRC: *drevops_build_export_dir # Source code location for artifact deployments. DREVOPS_DEPLOY_ARTIFACT_ROOT: *working_directory # Report file location for artifact deployments. DREVOPS_DEPLOY_ARTIFACT_REPORT_FILE: /tmp/artifacts/deployment_report.txt - # Check only minimal stack requirements. - DREVOPS_DOCTOR_CHECK_MINIMAL: 1 resource_class: *resource_class # Set up remote docker. - &step_setup_remote_docker setup_remote_docker: docker_layer_caching: *docker_layer_caching - version: 19.03.13 + version: 20.10.18 + + # Set up Docker network. + - &step_setup_docker_network + run: docker network prune -f >/dev/null 2>&1 && docker network inspect amazeeio-network >/dev/null 2>&1 || docker network create amazeeio-network >/dev/null 2>&1 || true # Process the codebase to be run in CI environment. - &step_process_codebase run: name: Process codebase to run in CI command: | - # Remove lines containing '###' and uncomment comments starting with '##'. - sed -i -e "/###/d" docker-compose.yml && sed -i -e "s/##//" docker-compose.yml + find . -name "docker-compose.yml" -print0 | xargs -0 -I {} sh -c "sed -i -e ''/###/d'' {} && sed -i -e ''s/##//'' {}" # Alter build for an alternative build setup. - if [ "$CIVICTHEME_INSTALL_SIBLING" = "1" ]; then cp -f .docker/Dockerfile.cli.sibling .docker/Dockerfile.cli; fi - if [ "$CIVICTHEME_LIBRARY_INSTALL_SKIP" = "1" ]; then cp -f .docker/Dockerfile.cli.onlytheme .docker/Dockerfile.cli; fi + if [ "$CIVICTHEME_INSTALL_SIBLING" = "1" ]; then cp -f .docker/cli.sibling.dockerfile .docker/cli.dockerfile; fi + if [ "$CIVICTHEME_LIBRARY_INSTALL_SKIP" = "1" ]; then cp -f .docker/cli.onlytheme.dockerfile .docker/cli.dockerfile; fi ################################################################################ # JOBS @@ -155,37 +149,65 @@ job-build: &job-build - checkout - *step_process_codebase - *step_setup_remote_docker + - *step_setup_docker_network - run: name: Lint docs spelling command: ./scripts/lint-spelling.sh - run: name: Build site - command: ahoy build + command: ./scripts/drevops/build.sh no_output_timeout: 30m - run: - name: Lint code - command: ahoy lint + name: Lint code with PHPCS + command: docker compose exec -T cli vendor/bin/phpcs || [ "${DREVOPS_CI_PHPCS_IGNORE_FAILURE:-0}" -eq 1 ] + - run: + name: Lint code with PHPStan + command: docker compose exec -T cli vendor/bin/phpstan || [ "${DREVOPS_CI_PHPSTAN_IGNORE_FAILURE:-0}" -eq 1 ] + - run: + name: Lint code with PHPMD + command: docker compose exec -T cli vendor/bin/phpmd . text phpmd.xml || [ "${DREVOPS_CI_PHPMD_IGNORE_FAILURE:-0}" -eq 1 ] + - run: + name: Lint code with Twigcs + command: docker compose exec -T cli vendor/bin/twigcs || [ "${DREVOPS_CI_TWIGCS_IGNORE_FAILURE:-0}" -eq 1 ] + - run: + name: Lint code with NPM linters + command: docker compose exec -T cli bash -c "npm run --prefix \${DREVOPS_WEBROOT}/themes/contrib/\${DRUPAL_THEME} lint" || [ "${DREVOPS_CI_NPM_LINT_IGNORE_FAILURE:-0}" -eq 1 ] - run: - name: Lint theme config - command: ahoy lint config + name: Lint Drupal theme configuration + command: docker compose exec -T cli bash -c "./scripts/lint-theme-config.sh" || [ "${DREVOPS_CI_DRUPAL_THEME_CONFIG_LINT_IGNORE_FAILURE:-0}" -eq 1 ] + - run: + name: Lint Drupal theme schema + command: docker compose exec -T cli bash -c "./vendor/bin/drush inspect_config civictheme.settings --detail --only-error" - run: name: Run tooling tests command: ./scripts/test-tooling.sh - run: - name: Run tests - command: 'if [ $CIRCLE_NODE_TOTAL -gt 1 ]; then export DREVOPS_TEST_BEHAT_PARALLEL_INDEX=$CIRCLE_NODE_INDEX; fi && ahoy test' + name: Test with PHPUnit + command: | + XDEBUG_ENABLE=true docker compose up -d cli php nginx # Restart stack with XDEBUG enabled for coverage. + docker compose exec -T -e XDEBUG_MODE=coverage cli vendor/bin/phpunit || [ "${DREVOPS_CI_PHPUNIT_IGNORE_FAILURE:-0}" -eq 1 ] + docker compose up -d cli php nginx # Restart stack without XDEBUG enabled for coverage. + - run: + name: Test with Behat + command: | + if [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ]; then export DREVOPS_CI_BEHAT_PROFILE="${DREVOPS_CI_BEHAT_PROFILE:-p${CIRCLE_NODE_INDEX}}"; fi + echo "Running with ${DREVOPS_CI_BEHAT_PROFILE:-default} profile" + docker compose exec -T cli php -d memory_limit=-1 vendor/bin/behat --colors --strict --profile="${DREVOPS_CI_BEHAT_PROFILE:-default}" || \ + docker compose exec -T cli php -d memory_limit=-1 vendor/bin/behat --colors --strict --rerun --profile="${DREVOPS_CI_BEHAT_PROFILE:-default}" || \ + [ "${DREVOPS_CI_BEHAT_IGNORE_FAILURE:-0}" -eq 1 ] + no_output_timeout: 30m - run: name: Process test logs and artifacts command: | - [ -n "$(docker-compose ps -q cli)" ] && [ -n "$(docker ps -q --no-trunc | grep "$(docker-compose ps -q cli)")" ] && ( - ahoy cli mkdir -p "${DREVOPS_TEST_REPORTS_DIR}" && docker cp "$(docker-compose ps -q cli)":"${DREVOPS_TEST_REPORTS_DIR}" "${DREVOPS_TEST_REPORTS_DIR}" - ahoy cli mkdir -p "${DREVOPS_TEST_ARTIFACT_DIR}" && docker cp "$(docker-compose ps -q cli)":"${DREVOPS_TEST_ARTIFACT_DIR}" "${DREVOPS_TEST_ARTIFACT_DIR}" - ) || true + if docker compose ps --services --filter "status=running" | grep -q cli; then + mkdir -p "${DREVOPS_CI_TEST_RESULTS}" && docker compose cp cli:/app/.logs/test_results/. "${DREVOPS_CI_TEST_RESULTS}/" + mkdir -p "${DREVOPS_CI_ARTIFACTS}" && docker compose cp cli:/app/.logs/. "${DREVOPS_CI_ARTIFACTS}/" + fi when: always - store_test_results: - path: *drevops_test_reports_dir + path: *test_results - store_artifacts: - path: *drevops_test_artifact_dir + path: *artifacts - persist_to_workspace: root: /workspace paths: @@ -201,43 +223,71 @@ job-build-no-persist: &job-build-no-persist - checkout - *step_process_codebase - *step_setup_remote_docker + - *step_setup_docker_network - run: name: Lint docs spelling command: ./scripts/lint-spelling.sh - run: name: Build site - command: ahoy build + command: ./scripts/drevops/build.sh no_output_timeout: 30m - run: - name: Lint code - command: ahoy lint + name: Lint code with PHPCS + command: docker compose exec -T cli vendor/bin/phpcs || [ "${DREVOPS_CI_PHPCS_IGNORE_FAILURE:-0}" -eq 1 ] + - run: + name: Lint code with PHPStan + command: docker compose exec -T cli vendor/bin/phpstan || [ "${DREVOPS_CI_PHPSTAN_IGNORE_FAILURE:-0}" -eq 1 ] + - run: + name: Lint code with PHPMD + command: docker compose exec -T cli vendor/bin/phpmd . text phpmd.xml || [ "${DREVOPS_CI_PHPMD_IGNORE_FAILURE:-0}" -eq 1 ] + - run: + name: Lint code with Twigcs + command: docker compose exec -T cli vendor/bin/twigcs || [ "${DREVOPS_CI_TWIGCS_IGNORE_FAILURE:-0}" -eq 1 ] - run: - name: Lint theme config - command: ahoy lint config + name: Lint code with NPM linters + command: docker compose exec -T cli bash -c "npm run --prefix \${DREVOPS_WEBROOT}/themes/contrib/\${DRUPAL_THEME} lint" || [ "${DREVOPS_CI_NPM_LINT_IGNORE_FAILURE:-0}" -eq 1 ] + - run: + name: Lint Drupal theme configuration + command: docker compose exec -T cli bash -c "./scripts/lint-theme-config.sh" || [ "${DREVOPS_CI_DRUPAL_THEME_CONFIG_LINT_IGNORE_FAILURE:-0}" -eq 1 ] + - run: + name: Lint Drupal theme schema + command: docker compose exec -T cli bash -c "./vendor/bin/drush inspect_config civictheme.settings --detail --only-error" - run: name: Run tooling tests command: ./scripts/test-tooling.sh - run: - name: Run tests - command: 'if [ $CIRCLE_NODE_TOTAL -gt 1 ]; then export DREVOPS_TEST_BEHAT_PARALLEL_INDEX=$CIRCLE_NODE_INDEX; fi && ahoy test' + name: Test with PHPUnit + command: | + XDEBUG_ENABLE=true docker compose up -d cli php nginx # Restart stack with XDEBUG enabled for coverage. + docker compose exec -T -e XDEBUG_MODE=coverage cli vendor/bin/phpunit || [ "${DREVOPS_CI_PHPUNIT_IGNORE_FAILURE:-0}" -eq 1 ] + docker compose up -d cli php nginx # Restart stack without XDEBUG enabled for coverage. + - run: + name: Test with Behat + command: | + if [ "${CIRCLE_NODE_TOTAL:-1}" -gt 1 ]; then export DREVOPS_CI_BEHAT_PROFILE="${DREVOPS_CI_BEHAT_PROFILE:-p${CIRCLE_NODE_INDEX}}"; fi + echo "Running with ${DREVOPS_CI_BEHAT_PROFILE:-default} profile" + docker compose exec -T cli php -d memory_limit=-1 vendor/bin/behat --colors --strict --profile="${DREVOPS_CI_BEHAT_PROFILE:-default}" || \ + docker compose exec -T cli php -d memory_limit=-1 vendor/bin/behat --colors --strict --rerun --profile="${DREVOPS_CI_BEHAT_PROFILE:-default}" || \ + [ "${DREVOPS_CI_BEHAT_IGNORE_FAILURE:-0}" -eq 1 ] + no_output_timeout: 30m - run: name: Process test logs and artifacts command: | - [ -n "$(docker-compose ps -q cli)" ] && [ -n "$(docker ps -q --no-trunc | grep "$(docker-compose ps -q cli)")" ] && ( - ahoy cli mkdir -p "${DREVOPS_TEST_REPORTS_DIR}" && docker cp "$(docker-compose ps -q cli)":"${DREVOPS_TEST_REPORTS_DIR}" "${DREVOPS_TEST_REPORTS_DIR}" - ahoy cli mkdir -p "${DREVOPS_TEST_ARTIFACT_DIR}" && docker cp "$(docker-compose ps -q cli)":"${DREVOPS_TEST_ARTIFACT_DIR}" "${DREVOPS_TEST_ARTIFACT_DIR}" - ) || true + if docker compose ps --services --filter "status=running" | grep -q cli; then + mkdir -p "${DREVOPS_CI_TEST_RESULTS}" && docker compose cp cli:/app/.logs/test_results/. "${DREVOPS_CI_TEST_RESULTS}/" + mkdir -p "${DREVOPS_CI_ARTIFACTS}" && docker compose cp cli:/app/.logs/. "${DREVOPS_CI_ARTIFACTS}/" + fi when: always - store_test_results: - path: *drevops_test_reports_dir + path: *test_results - store_artifacts: - path: *drevops_test_artifact_dir + path: *artifacts # Job to run isolated theme build. job-build-theme-isolated: &job-build-theme-isolated steps: - checkout - - run: mkdir -p ~/project2 && cp -r docroot/themes/contrib/civictheme ~/project2 + - run: mkdir -p ~/project2 && cp -r web/themes/contrib/civictheme ~/project2 - run: cd ~/project2/civictheme; ./.circleci/build.sh - run: cd ~/project2/civictheme; ./.circleci/lint.sh - run: cd ~/project2/civictheme; ./.circleci/test.sh @@ -297,29 +347,28 @@ jobs: build-govcms: <<: *container_config environment: - DREVOPS_DRUPAL_PROFILE: govcms - DREVOPS_LINT_CONFIG_ALLOW_FAILURE: 1 - DREVOPS_TEST_BEHAT_PROFILE: subtheme + DRUPAL_PROFILE: govcms + DREVOPS_CI_DRUPAL_THEME_CONFIG_LINT_IGNORE_FAILURE: 1 <<: *job-build-no-persist # GovCMS profile, no subtheme. build-govcms-no-subtheme: <<: *container_config environment: - DREVOPS_DRUPAL_PROFILE: govcms + DRUPAL_PROFILE: govcms CIVICTHEME_SUBTHEME_ACTIVATION_SKIP: 1 CIVICTHEME_LIBRARY_INSTALL_SKIP: 1 - DREVOPS_LINT_CONFIG_ALLOW_FAILURE: 1 + DREVOPS_CI_DRUPAL_THEME_CONFIG_LINT_IGNORE_FAILURE: 1 <<: *job-build # GovCMS profile, subtheme is a sibling. build-govcms-sibling: <<: *container_config environment: - DREVOPS_DRUPAL_PROFILE: govcms + DRUPAL_PROFILE: govcms CIVICTHEME_INSTALL_SIBLING: 1 - DREVOPS_LINT_CONFIG_ALLOW_FAILURE: 1 - DREVOPS_TEST_BEHAT_TAGS: smoke + DREVOPS_CI_DRUPAL_THEME_CONFIG_LINT_IGNORE_FAILURE: 1 + DREVOPS_CI_BEHAT_PROFILE: smoke <<: *job-build-no-persist # Drupal 10, minimal profile, 'corporate' content profile. @@ -329,8 +378,8 @@ jobs: CIVICTHEME_CONTENT_PROFILE: corporate CIVICTHEME_SUBTHEME_ACTIVATION_SKIP: 1 CIVICTHEME_LIBRARY_INSTALL_SKIP: 1 - DREVOPS_LINT_CONFIG_ALLOW_FAILURE: 1 - DREVOPS_TEST_BEHAT_TAGS: smoke + DREVOPS_CI_DRUPAL_THEME_CONFIG_LINT_IGNORE_FAILURE: 1 + DREVOPS_CI_BEHAT_PROFILE: smoke <<: *job-build-no-persist # Drupal 10, minimal profile, 'highereducation' content profile. @@ -340,8 +389,8 @@ jobs: CIVICTHEME_CONTENT_PROFILE: highereducation CIVICTHEME_SUBTHEME_ACTIVATION_SKIP: 1 CIVICTHEME_LIBRARY_INSTALL_SKIP: 1 - DREVOPS_LINT_CONFIG_ALLOW_FAILURE: 1 - DREVOPS_TEST_BEHAT_TAGS: smoke + DREVOPS_CI_DRUPAL_THEME_CONFIG_LINT_IGNORE_FAILURE: 1 + DREVOPS_CI_BEHAT_PROFILE: smoke <<: *job-build-no-persist # Drupal 10, minimal profile, 'government' content profile. @@ -351,8 +400,8 @@ jobs: CIVICTHEME_CONTENT_PROFILE: government CIVICTHEME_SUBTHEME_ACTIVATION_SKIP: 1 CIVICTHEME_LIBRARY_INSTALL_SKIP: 1 - DREVOPS_LINT_CONFIG_ALLOW_FAILURE: 1 - DREVOPS_TEST_BEHAT_TAGS: smoke + DREVOPS_CI_DRUPAL_THEME_CONFIG_LINT_IGNORE_FAILURE: 1 + DREVOPS_CI_BEHAT_PROFILE: smoke <<: *job-build-no-persist # Isolated theme build. @@ -371,13 +420,8 @@ jobs: deploy: &job_deploy <<: *container_config steps: - # - # Workspace now contains previously built application code artifact. - attach_workspace: at: /workspace - # - # Add SSH key into "runner" container to have "push" access to remote - # repository. - add_ssh_keys: fingerprints: - *deploy_ssh_fingerprint @@ -388,10 +432,10 @@ jobs: DREVOPS_DEPLOY_BRANCH="$CIRCLE_BRANCH" \ DREVOPS_DEPLOY_PR="$(echo $CIRCLE_PULL_REQUEST | cut -d'/' -f 7)" \ DREVOPS_DEPLOY_PR_HEAD=$CIRCLE_SHA1 \ - ahoy deploy + ./scripts/drevops/deploy.sh no_output_timeout: 30m - store_artifacts: - path: *drevops_test_artifact_dir + path: *artifacts # Deploy artifact. deploy_artifact: @@ -419,7 +463,7 @@ jobs: DEPLOY_SSH_FINGERPRINT=$DEPLOY_SSH_FINGERPRINT1 \ DEPLOY_CODE_COMMIT_REMOTE_REPO=git@github.com:salsadigitalauorg/civictheme.git \ DEPLOY_CODE_COMMIT_REMOTE_BRANCH=master \ - DEPLOY_CODE_COMMIT_SRC_DIR="${DREVOPS_EXPORT_CODE_DIR}/docroot/themes/contrib/civictheme" \ + DEPLOY_CODE_COMMIT_SRC_DIR="${DREVOPS_EXPORT_CODE_DIR}/web/themes/contrib/civictheme" \ ./scripts/deploy-code-commit.sh no_output_timeout: 30m - run: @@ -428,7 +472,7 @@ jobs: DEPLOY_SSH_FINGERPRINT=$DEPLOY_SSH_FINGERPRINT2 \ DEPLOY_CODE_COMMIT_REMOTE_REPO=git@github.com:salsadigitalauorg/civictheme_library.git \ DEPLOY_CODE_COMMIT_REMOTE_BRANCH=master \ - DEPLOY_CODE_COMMIT_SRC_DIR="${DREVOPS_EXPORT_CODE_DIR}/docroot/themes/contrib/civictheme/civictheme_library" \ + DEPLOY_CODE_COMMIT_SRC_DIR="${DREVOPS_EXPORT_CODE_DIR}/web/themes/contrib/civictheme/civictheme_library" \ ./scripts/deploy-code-commit.sh no_output_timeout: 30m - run: @@ -437,7 +481,7 @@ jobs: DEPLOY_SSH_FINGERPRINT=$DEPLOY_SSH_FINGERPRINT3 \ DEPLOY_CODE_COMMIT_REMOTE_REPO=git@github.com:salsadigitalauorg/civictheme_govcms.git \ DEPLOY_CODE_COMMIT_REMOTE_BRANCH=master \ - DEPLOY_CODE_COMMIT_SRC_DIR="${DREVOPS_EXPORT_CODE_DIR}/docroot/modules/custom/civictheme_govcms" \ + DEPLOY_CODE_COMMIT_SRC_DIR="${DREVOPS_EXPORT_CODE_DIR}/web/modules/custom/civictheme_govcms" \ ./scripts/deploy-code-commit.sh no_output_timeout: 30m - run: @@ -446,7 +490,7 @@ jobs: DEPLOY_SSH_FINGERPRINT=$DEPLOY_SSH_FINGERPRINT4 \ DEPLOY_CODE_COMMIT_REMOTE_REPO=git@github.com:salsadigitalauorg/civictheme_content.git \ DEPLOY_CODE_COMMIT_REMOTE_BRANCH=master \ - DEPLOY_CODE_COMMIT_SRC_DIR="${DREVOPS_EXPORT_CODE_DIR}/docroot/modules/custom/civictheme_content" \ + DEPLOY_CODE_COMMIT_SRC_DIR="${DREVOPS_EXPORT_CODE_DIR}/web/modules/custom/civictheme_content" \ ./scripts/deploy-code-commit.sh no_output_timeout: 30m - run: @@ -455,11 +499,11 @@ jobs: DEPLOY_SSH_FINGERPRINT=$DEPLOY_SSH_FINGERPRINT5 \ DEPLOY_CODE_COMMIT_REMOTE_REPO=git@github.com:salsadigitalauorg/civictheme_admin.git \ DEPLOY_CODE_COMMIT_REMOTE_BRANCH=master \ - DEPLOY_CODE_COMMIT_SRC_DIR="${DREVOPS_EXPORT_CODE_DIR}/docroot/modules/custom/civictheme_admin" \ + DEPLOY_CODE_COMMIT_SRC_DIR="${DREVOPS_EXPORT_CODE_DIR}/web/modules/custom/civictheme_admin" \ ./scripts/deploy-code-commit.sh no_output_timeout: 30m - store_artifacts: - path: *drevops_test_artifact_dir + path: /tmp/artifacts renovatebot_self_hosted: docker: @@ -554,10 +598,12 @@ workflows: # Allowed branches: # - main, master, develop, ci, cisomething # - deps/* - # - release/123, release/123.456, release/123.456.789, release/123.456.789-rc123 - # - hotfix/123, hotfix/123.456, hotfix/123.456.789 - # - feature/description, feature/123-description, but not feature/9.x-description or feature/7.x-description - only: /main|master|develop|project\/uno|ci.*|deps\/.*|(release\/)?[0-9]+(\.[0-9]+)+(-rc[0-9]+)?|(hotfix\/)?[0-9]+(\.[0-9]+)+(-rc[0-9]+)?|feature\/(?!7.x-|8.x-|9.x-)[a-zA-z0-9\-\.\,]+/ + # - feature/description, feature/123-description + # - release/123.456.789, release/123.456.789-rc.123 (per https://semver.org/) + # - release/2023-04-17, release/2023-04-17.123 (date-based) + # - hotfix/123.456.789, hotfix/123.456.789-rc.1213 (per https://semver.org/) + # - hotfix/2023-04-17, hotfix/2023-04-17.123 (date-based) + only: /^(main|master|develop)$|^feature\/[a-zA-z0-9\-\.\,]+|^ci.*|^deps\/.*|^(release|hotfix)\/[0-9]+(\.[0-9]+){2}(-rc\.[0-9]+)?$|^(release|hotfix)\/[0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?$/ tags: ignore: /.*/ diff --git a/.docker/Dockerfile.cli b/.docker/Dockerfile.cli deleted file mode 100644 index 70267c964..000000000 --- a/.docker/Dockerfile.cli +++ /dev/null @@ -1,120 +0,0 @@ -# CLI container. -# -# All CLI operations performed in this container. -# -# - Installs Composer dependencies -# - Installs CivicTheme Library dependencies and builds assets -# - Installs CivicTheme dependencies and builds assets -# - Creates sub-theme, installs dependencies and builds assets -# -# @see https://hub.docker.com/r/uselagoon/php-7.4-cli-drupal/tags -# @see https://github.com/uselagoon/lagoon-images/tree/main/images/php-cli-drupal -FROM uselagoon/php-8.1-cli-drupal:23.10.0 - -# Add missing variables. -# @todo Remove once https://github.com/uselagoon/lagoon/issues/3121 is resolved. -ARG LAGOON_PR_HEAD_BRANCH="" -ENV LAGOON_PR_HEAD_BRANCH=$LAGOON_PR_HEAD_BRANCH -ARG LAGOON_PR_HEAD_SHA="" -ENV LAGOON_PR_HEAD_SHA=$LAGOON_PR_HEAD_SHA - -# Add PHP Composer variable to specify the name of the composer.json file. -ARG COMPOSER="" -ENV COMPOSER=$COMPOSER - -ARG GITHUB_TOKEN="" -ENV GITHUB_TOKEN=$GITHUB_TOKEN - -# Set default values for environment variables. Any values provided in -# docker-compose.yml or .env file will override these values during build stage. -ENV WEBROOT=docroot \ - COMPOSER_ALLOW_SUPERUSER=1 \ - COMPOSER_CACHE_DIR=/tmp/.composer/cache \ - COMPOSER_AUTH="{\"github-oauth\": {\"github.com\": \"$GITHUB_TOKEN\"}}" \ - MYSQL_HOST=mariadb \ - SIMPLETEST_DB=mysql://drupal:drupal@mariadb/drupal \ - SIMPLETEST_BASE_URL=http://nginx:8080 \ - SYMFONY_DEPRECATIONS_HELPER=disabled - -# Strating from this line, Docker will add result of each command into a -# separate layer. These layers are then cached, and re-used when project is -# rebuilt. -# Note that layers are rebuilt only if files added into image with `ADD` -# have changed since the last build. So adding files that are most like to be -# rarely changed earlier in the build process (closer to the start of this -# file) adds more efficiency when working with stack - layers will be rarely -# rebuilt. - -# Adding more tools. -RUN apk update \ - && apk add pv python3 make gcc g++ diffutils \ - && ln -sf python3 /usr/bin/python \ - && rm -rf /var/cache/apk/* - -# Install updated version of NPM. -RUN npm install -g npm@^8.6 && fix-permissions /home/.npm - -# Adding patches and scripts. -COPY patches /app/patches -COPY scripts /app/scripts - -RUN mkdir -p docroot/themes/contrib/civictheme \ - && mkdir -p docroot/modules/custom/civictheme_govcms \ - && mkdir -p docroot/modules/custom/civictheme_admin \ - && mkdir -p docroot/modules/custom/civictheme_content \ - && mkdir -p docroot/modules/custom/civictheme_dev \ - && mkdir -p docroot/modules/custom/cs_generated_content - -# Copy files required for PHP dependencies resolution. -# Note that composer.lock is not explicitly copied, allowing to run the stack -# without existing lock file (this is not advisable, but allows to build -# using latest versions of packages). composer.lock should be comitted to the -# repository. -# File .env (and other environment files) is copied into image as it may be -# required by composer scripts to get some additions variables. -COPY composer.json composer.* .env* auth* /app/ - -COPY docroot/themes/contrib/civictheme/composer.json /app/docroot/themes/contrib/civictheme/ -COPY docroot/modules/custom/civictheme_govcms/composer.json docroot/modules/custom/civictheme_govcms/ -COPY docroot/modules/custom/civictheme_admin/composer.json docroot/modules/custom/civictheme_admin/ -COPY docroot/modules/custom/civictheme_content/composer.json docroot/modules/custom/civictheme_content/ -COPY docroot/modules/custom/civictheme_dev/composer.json docroot/modules/custom/civictheme_dev/ -COPY docroot/modules/custom/cs_generated_content/composer.json docroot/modules/custom/cs_generated_content/ - -# Install PHP dependencies, but without development dependencies. This is very -# important, because we do not want potential security issues to be exposed to -# production environment. -RUN COMPOSER_MEMORY_LIMIT=-1 composer install -n --no-dev --ansi --prefer-dist --optimize-autoloader - -# Install NodeJS dependencies. -# Note that package-lock.json is not explicitly copied, allowing to run the -# stack without existing lock file (this is not advisable, but allows to build -# using latest versions of packages). package-lock.json should be comitted to -# the repository. -# File Gruntfile.sj is copied into image as it is required to generate -# front-end assets. -COPY docroot/themes/contrib/civictheme/civictheme_library/package.json docroot/themes/contrib/civictheme/civictheme_library/package* /app/docroot/themes/contrib/civictheme/civictheme_library/ -COPY docroot/themes/contrib/civictheme/ docroot/themes/contrib/civictheme/package* /app/docroot/themes/contrib/civictheme/ - -# Install NodeJS dependencies. -# Since Drupal does not use NodeJS for production, it does not matter if we -# install development dependencies here - they are not exposed in any way. -RUN npm --prefix docroot/themes/contrib/civictheme/civictheme_library install --no-audit --no-progress --unsafe-perm -RUN npm --prefix docroot/themes/contrib/civictheme install --no-audit --no-progress --unsafe-perm - -# Copy all files into appllication source directory. Existing files are always -# overridden. -COPY . /app - -# Compile front-end assets. Running this after copying all files as we need -# sources to compile assets. -RUN cd /app/docroot/themes/contrib/civictheme/civictheme_library && npm run build -RUN cd /app/docroot/themes/contrib/civictheme && npm run build - -# Create subtheme. -RUN cd /app/docroot/themes/contrib/civictheme \ - && php civictheme_create_subtheme.php civictheme_demo "CivicTheme Demo" "Demo sub-theme for a CivicTheme theme." - -# Compile subtheme assets. -RUN npm --prefix docroot/themes/custom/civictheme_demo install --no-audit --no-progress --unsafe-perm \ - && cd /app/docroot/themes/custom/civictheme_demo && npm run build diff --git a/.docker/Dockerfile.cli.onlytheme b/.docker/Dockerfile.cli.onlytheme deleted file mode 100644 index 64617049f..000000000 --- a/.docker/Dockerfile.cli.onlytheme +++ /dev/null @@ -1,107 +0,0 @@ -# Alternative CLI container used for testing of only theme installation without -# library or a sub-theme. -# -# Not used in Lagoon. -# -# - Installs Composer dependencies -# - Installs CivicTheme dependencies and builds assets -# -# @see https://hub.docker.com/r/uselagoon/php-7.4-cli-drupal/tags -# @see https://github.com/uselagoon/lagoon-images/tree/main/images/php-cli-drupal -FROM uselagoon/php-8.1-cli-drupal:23.10.0 - -# Add missing variables. -# @todo Remove once https://github.com/uselagoon/lagoon/issues/3121 is resolved. -ARG LAGOON_PR_HEAD_BRANCH="" -ENV LAGOON_PR_HEAD_BRANCH=$LAGOON_PR_HEAD_BRANCH -ARG LAGOON_PR_HEAD_SHA="" -ENV LAGOON_PR_HEAD_SHA=$LAGOON_PR_HEAD_SHA - -ARG GITHUB_TOKEN="" -ENV GITHUB_TOKEN=$GITHUB_TOKEN - -# Add PHP Composer variable to specify the name of the composer.json file. -ARG COMPOSER="" -ENV COMPOSER=$COMPOSER - -# Set default values for environment variables. Any values provided in -# docker-compose.yml or .env file will override these values during build stage. -ENV WEBROOT=docroot \ - COMPOSER_ALLOW_SUPERUSER=1 \ - COMPOSER_CACHE_DIR=/tmp/.composer/cache \ - MYSQL_HOST=mariadb \ - SIMPLETEST_DB=mysql://drupal:drupal@mariadb/drupal \ - SIMPLETEST_BASE_URL=http://nginx:8080 \ - SYMFONY_DEPRECATIONS_HELPER=disabled - -# Strating from this line, Docker will add result of each command into a -# separate layer. These layers are then cached, and re-used when project is -# rebuilt. -# Note that layers are rebuilt only if files added into image with `ADD` -# have changed since the last build. So adding files that are most like to be -# rarely changed earlier in the build process (closer to the start of this -# file) adds more efficiency when working with stack - layers will be rarely -# rebuilt. - -# Adding more tools. -RUN apk update \ - && apk add pv python3 make gcc g++ diffutils \ - && ln -sf python3 /usr/bin/python \ - && rm -rf /var/cache/apk/* - -# Install updated version of NPM. -RUN npm install -g npm@^8.6 && fix-permissions /home/.npm - -# Adding patches and scripts. -COPY patches /app/patches -COPY scripts /app/scripts - -RUN mkdir -p docroot/themes/contrib/civictheme \ - && mkdir -p docroot/modules/custom/civictheme_govcms \ - && mkdir -p docroot/modules/custom/civictheme_admin \ - && mkdir -p docroot/modules/custom/civictheme_content \ - && mkdir -p docroot/modules/custom/civictheme_dev \ - && mkdir -p docroot/modules/custom/cs_generated_content - -# Copy files required for PHP dependencies resolution. -# Note that composer.lock is not explicitly copied, allowing to run the stack -# without existing lock file (this is not advisable, but allows to build -# using latest versions of packages). composer.lock should be comitted to the -# repository. -# File .env (and other environment files) is copied into image as it may be -# required by composer scripts to get some additions variables. -COPY composer.json composer.* .env* auth* /app/ - -COPY docroot/themes/contrib/civictheme/composer.json /app/docroot/themes/contrib/civictheme/ -COPY docroot/modules/custom/civictheme_govcms/composer.json docroot/modules/custom/civictheme_govcms/ -COPY docroot/modules/custom/civictheme_admin/composer.json docroot/modules/custom/civictheme_admin/ -COPY docroot/modules/custom/civictheme_content/composer.json docroot/modules/custom/civictheme_content/ -COPY docroot/modules/custom/civictheme_dev/composer.json docroot/modules/custom/civictheme_dev/ -COPY docroot/modules/custom/cs_generated_content/composer.json docroot/modules/custom/cs_generated_content/ - -# Install PHP dependencies, but without development dependencies. This is very -# important, because we do not want potential security issues to be exposed to -# production environment. -RUN COMPOSER_MEMORY_LIMIT=-1 composer install -n --no-dev --ansi --prefer-dist --optimize-autoloader - -# Install NodeJS dependencies. -# Note that package-lock.json is not explicitly copied, allowing to run the -# stack without existing lock file (this is not advisable, but allows to build -# using latest versions of packages). package-lock.json should be comitted to -# the repository. -# File Gruntfile.sj is copied into image as it is required to generate -# front-end assets. -COPY docroot/themes/contrib/civictheme/ docroot/themes/contrib/civictheme/package* /app/docroot/themes/contrib/civictheme/ - -# Install NodeJS dependencies. -# Since Drupal does not use NodeJS for production, it does not matter if we -# install development dependencies here - they are not exposed in any way. -RUN npm --prefix docroot/themes/contrib/civictheme install --no-audit --no-progress --unsafe-perm - -# Copy all files into appllication source directory. Existing files are always -# overridden. -COPY . /app - -# Compile front-end assets. Running this after copying all files as we need -# sources to compile assets. -RUN cd /app/docroot/themes/contrib/civictheme && npm run build diff --git a/.docker/Dockerfile.cli.sibling b/.docker/Dockerfile.cli.sibling deleted file mode 100644 index 5bb6ca623..000000000 --- a/.docker/Dockerfile.cli.sibling +++ /dev/null @@ -1,108 +0,0 @@ -# Alternative CLI container used for testing of the subtheme installation. -# -# Not used in Lagoon. -# -# - Installs Composer dependencies -# - Installs CivicTheme Library dependencies and builds assets -# - Installs CivicTheme dependencies and builds assets -# - Creates sub-theme as a sibling, installs dependencies and builds assets -# -# @see https://hub.docker.com/r/uselagoon/php-7.4-cli-drupal/tags -# @see https://github.com/uselagoon/lagoon-images/tree/main/images/php-cli-drupal -FROM uselagoon/php-8.1-cli-drupal:23.10.0 - -# Add missing variables. -# @todo Remove once https://github.com/uselagoon/lagoon/issues/3121 is resolved. -ARG LAGOON_PR_HEAD_BRANCH="" -ENV LAGOON_PR_HEAD_BRANCH=$LAGOON_PR_HEAD_BRANCH -ARG LAGOON_PR_HEAD_SHA="" -ENV LAGOON_PR_HEAD_SHA=$LAGOON_PR_HEAD_SHA - -ARG GITHUB_TOKEN="" -ENV GITHUB_TOKEN=$GITHUB_TOKEN - -# Add PHP Composer variable to specify the name of the composer.json file. -ARG COMPOSER="" -ENV COMPOSER=$COMPOSER - -# Set default values for environment variables. Any values provided in -# docker-compose.yml or .env file will override these values during build stage. -ENV WEBROOT=docroot \ - COMPOSER_ALLOW_SUPERUSER=1 \ - COMPOSER_CACHE_DIR=/tmp/.composer/cache \ - MYSQL_HOST=mariadb \ - SIMPLETEST_DB=mysql://drupal:drupal@mariadb/drupal \ - SIMPLETEST_BASE_URL=http://nginx:8080 \ - SYMFONY_DEPRECATIONS_HELPER=disabled - -# Strating from this line, Docker will add result of each command into a -# separate layer. These layers are then cached, and re-used when project is -# rebuilt. -# Note that layers are rebuilt only if files added into image with `ADD` -# have changed since the last build. So adding files that are most like to be -# rarely changed earlier in the build process (closer to the start of this -# file) adds more efficiency when working with stack - layers will be rarely -# rebuilt. - -# Adding more tools. -RUN apk update \ - && apk add pv python3 make gcc g++ diffutils \ - && ln -sf python3 /usr/bin/python \ - && rm -rf /var/cache/apk/* - -# Install updated version of NPM. -RUN npm install -g npm@^8.6 && fix-permissions /home/.npm - -# Adding patches and scripts. -COPY patches /app/patches -COPY scripts /app/scripts - -RUN mkdir -p docroot/themes/contrib/civictheme \ - && mkdir -p docroot/modules/custom/civictheme_govcms \ - && mkdir -p docroot/modules/custom/civictheme_admin \ - && mkdir -p docroot/modules/custom/civictheme_content \ - && mkdir -p docroot/modules/custom/civictheme_dev \ - && mkdir -p docroot/modules/custom/cs_generated_content - -# Copy files required for PHP dependencies resolution. -# Note that composer.lock is not explicitly copied, allowing to run the stack -# without existing lock file (this is not advisable, but allows to build -# using latest versions of packages). composer.lock should be comitted to the -# repository. -# File .env (and other environment files) is copied into image as it may be -# required by composer scripts to get some additions variables. -COPY composer.json composer.* .env* auth* /app/ - -COPY docroot/themes/contrib/civictheme/composer.json /app/docroot/themes/contrib/civictheme/ -COPY docroot/modules/custom/civictheme_govcms/composer.json docroot/modules/custom/civictheme_govcms/ -COPY docroot/modules/custom/civictheme_admin/composer.json docroot/modules/custom/civictheme_admin/ -COPY docroot/modules/custom/civictheme_content/composer.json docroot/modules/custom/civictheme_content/ -COPY docroot/modules/custom/civictheme_dev/composer.json docroot/modules/custom/civictheme_dev/ -COPY docroot/modules/custom/cs_generated_content/composer.json docroot/modules/custom/cs_generated_content/ - -# Install PHP dependencies, but without development dependencies. This is very -# important, because we do not want potential security issues to be exposed to -# production environment. -RUN COMPOSER_MEMORY_LIMIT=-1 composer install -n --no-dev --ansi --prefer-dist --optimize-autoloader - -# Install NodeJS dependencies. -# Note that package-lock.json is not explicitly copied, allowing to run the -# stack without existing lock file (this is not advisable, but allows to build -# using latest versions of packages). package-lock.json should be comitted to -# the repository. -# File Gruntfile.sj is copied into image as it is required to generate -# front-end assets. -COPY docroot/themes/contrib/civictheme/civictheme_library/package.json docroot/themes/contrib/civictheme/civictheme_library/package* /app/docroot/themes/contrib/civictheme/civictheme_library/ -COPY docroot/themes/contrib/civictheme/ docroot/themes/contrib/civictheme/package* /app/docroot/themes/contrib/civictheme/ - -# Copy all files into appllication source directory. Existing files are always -# overridden. -COPY . /app - -# Create a subtheme in the same directory as CivicTheme. -RUN cd /app/docroot/themes/contrib/civictheme \ - && php civictheme_create_subtheme.php civictheme_demo "CivicTheme Demo Sibling" "Demo sub-theme for a CivicTheme theme installed in the same directory." ../civictheme_demo - -# Compile subtheme assets. -RUN npm --prefix docroot/themes/contrib/civictheme_demo install --no-audit --no-progress --unsafe-perm \ - && cd /app/docroot/themes/contrib/civictheme_demo && npm run build diff --git a/.docker/cli.dockerfile b/.docker/cli.dockerfile new file mode 100644 index 000000000..7fef7b7eb --- /dev/null +++ b/.docker/cli.dockerfile @@ -0,0 +1,118 @@ +# CLI container. +# +# All CLI operations performed in this container. +# +# - Installs Composer dependencies +# - Installs CivicTheme Library dependencies and builds assets +# - Installs CivicTheme dependencies and builds assets +# - Creates sub-theme, installs dependencies and builds assets +# +# @see https://hub.docker.com/r/uselagoon/php-8.1-cli-drupal/tags +# @see https://github.com/uselagoon/lagoon-images/tree/main/images/php-cli-drupal +FROM uselagoon/php-8.1-cli-drupal:23.10.0 + +# Add missing variables. +# @todo Remove once https://github.com/uselagoon/lagoon/issues/3121 is resolved. +ARG LAGOON_PR_HEAD_BRANCH="" +ENV LAGOON_PR_HEAD_BRANCH=${LAGOON_PR_HEAD_BRANCH} +ARG LAGOON_PR_HEAD_SHA="" +ENV LAGOON_PR_HEAD_SHA=${LAGOON_PR_HEAD_SHA} + +# Webroot is used for Drush aliases. +ARG WEBROOT=web + +ARG GITHUB_TOKEN="" +ENV GITHUB_TOKEN=${GITHUB_TOKEN} + +# Set default values for environment variables. +# These values will be overridden if set in docker-compose.yml or .env file +# during build stage. +ENV WEBROOT=${WEBROOT} \ + COMPOSER_ALLOW_SUPERUSER=1 \ + COMPOSER_CACHE_DIR=/tmp/.composer/cache \ + SIMPLETEST_DB=mysql://drupal:drupal@mariadb/drupal \ + SIMPLETEST_BASE_URL=http://nginx:8080 \ + SYMFONY_DEPRECATIONS_HELPER=disabled + +# Strating from this line, Docker will add result of each command into a +# separate layer. These layers are then cached and re-used when the project is +# rebuilt. +# Note that layers are only rebuilt if files added into the image with `ADD` +# have changed since the last build. So, adding files that are unlikely to +# change earlier in the build process (closer to the start of this file) +# reduce build time. + +# Adding more tools. +RUN apk update \ + && apk add pv python3 make gcc g++ diffutils ncurses=6.4_p20230506-r0 pv=1.6.20-r1 tzdata=2023c-r1 \ + && ln -sf python3 /usr/bin/python \ + && rm -rf /var/cache/apk/* + +# Install updated version of NPM. +RUN npm install -g npm@^8.6 && fix-permissions /home/.npm + +# Adding patches and scripts. +COPY patches /app/patches +COPY scripts /app/scripts + +RUN mkdir -p web/themes/contrib/civictheme \ + && mkdir -p web/modules/custom/civictheme_govcms \ + && mkdir -p web/modules/custom/civictheme_admin \ + && mkdir -p web/modules/custom/civictheme_content \ + && mkdir -p web/modules/custom/civictheme_dev \ + && mkdir -p web/modules/custom/cs_generated_content + +# Copy files required for PHP dependencies resolution. +# Note that composer.lock is not explicitly copied, allowing to run the stack +# without existing lock file (this is not advisable, but allows to build +# using latest versions of packages). composer.lock should be comitted to the +# repository. +# File .env (and other environment files) is copied into image as it may be +# required by composer scripts to get some additions variables. +COPY composer.json composer.* .env* auth* /app/ + +COPY web/themes/contrib/civictheme/composer.json /app/web/themes/contrib/civictheme/ +COPY web/modules/custom/civictheme_govcms/composer.json web/modules/custom/civictheme_govcms/ +COPY web/modules/custom/civictheme_admin/composer.json web/modules/custom/civictheme_admin/ +COPY web/modules/custom/civictheme_content/composer.json web/modules/custom/civictheme_content/ +COPY web/modules/custom/civictheme_dev/composer.json web/modules/custom/civictheme_dev/ +COPY web/modules/custom/cs_generated_content/composer.json web/modules/custom/cs_generated_content/ + +# Install PHP dependencies without including development dependencies. This is +# crucial as it prevents potential security vulnerabilities from being exposed +# to the production environment. +RUN if [ -n "${GITHUB_TOKEN}" ]; then export COMPOSER_AUTH="{\"github-oauth\": {\"github.com\": \"${GITHUB_TOKEN}\"}}"; fi && \ + COMPOSER_MEMORY_LIMIT=-1 composer install -n --no-dev --ansi --prefer-dist --optimize-autoloader + +# Install NodeJS dependencies. +# Note that package-lock.json is not explicitly copied, allowing to run the +# stack without existing lock file (this is not advisable, but allows to build +# using latest versions of packages). package-lock.json should be comitted to +# the repository. +# File Gruntfile.sj is copied into image as it is required to generate +# front-end assets. +COPY web/themes/contrib/civictheme/civictheme_library/package.json web/themes/contrib/civictheme/civictheme_library/package* /app/web/themes/contrib/civictheme/civictheme_library/ +COPY web/themes/contrib/civictheme/ web/themes/contrib/civictheme/package* /app/web/themes/contrib/civictheme/ + +# Install NodeJS dependencies. +# Since Drupal does not use NodeJS for production, it does not matter if we +# install development dependencies here - they are not exposed in any way. +RUN npm --prefix web/themes/contrib/civictheme/civictheme_library install --no-audit --no-progress --unsafe-perm +RUN npm --prefix web/themes/contrib/civictheme install --no-audit --no-progress --unsafe-perm + +# Copy all files into appllication source directory. Existing files are always +# overridden. +COPY . /app + +# Compile front-end assets. Running this after copying all files as we need +# sources to compile assets. +RUN cd /app/web/themes/contrib/civictheme/civictheme_library && npm run build +RUN cd /app/web/themes/contrib/civictheme && npm run build + +# Create subtheme. +RUN cd /app/web/themes/contrib/civictheme \ + && php civictheme_create_subtheme.php civictheme_demo "CivicTheme Demo" "Demo sub-theme for a CivicTheme theme." + +# Compile subtheme assets. +RUN npm --prefix web/themes/custom/civictheme_demo install --no-audit --no-progress --unsafe-perm \ + && cd /app/web/themes/custom/civictheme_demo && npm run build diff --git a/.docker/cli.onlytheme.dockerfile b/.docker/cli.onlytheme.dockerfile new file mode 100644 index 000000000..c0551721d --- /dev/null +++ b/.docker/cli.onlytheme.dockerfile @@ -0,0 +1,105 @@ +# CLI container. +# +# Not used in Lagoon. +# +# - Installs Composer dependencies +# - Installs CivicTheme dependencies and builds assets +# +# @see https://hub.docker.com/r/uselagoon/php-8.1-cli-drupal/tags +# @see https://github.com/uselagoon/lagoon-images/tree/main/images/php-cli-drupal +FROM uselagoon/php-8.1-cli-drupal:23.10.0 + +# Add missing variables. +# @todo Remove once https://github.com/uselagoon/lagoon/issues/3121 is resolved. +ARG LAGOON_PR_HEAD_BRANCH="" +ENV LAGOON_PR_HEAD_BRANCH=${LAGOON_PR_HEAD_BRANCH} +ARG LAGOON_PR_HEAD_SHA="" +ENV LAGOON_PR_HEAD_SHA=${LAGOON_PR_HEAD_SHA} + +# Webroot is used for Drush aliases. +ARG WEBROOT=web + +ARG GITHUB_TOKEN="" +ENV GITHUB_TOKEN=${GITHUB_TOKEN} + +# Set default values for environment variables. +# These values will be overridden if set in docker-compose.yml or .env file +# during build stage. +ENV WEBROOT=${WEBROOT} \ + COMPOSER_ALLOW_SUPERUSER=1 \ + COMPOSER_CACHE_DIR=/tmp/.composer/cache \ + SIMPLETEST_DB=mysql://drupal:drupal@mariadb/drupal \ + SIMPLETEST_BASE_URL=http://nginx:8080 \ + SYMFONY_DEPRECATIONS_HELPER=disabled + +# Strating from this line, Docker will add result of each command into a +# separate layer. These layers are then cached and re-used when the project is +# rebuilt. +# Note that layers are only rebuilt if files added into the image with `ADD` +# have changed since the last build. So, adding files that are unlikely to +# change earlier in the build process (closer to the start of this file) +# reduce build time. + +# Adding more tools. +RUN apk update \ + && apk add pv python3 make gcc g++ diffutils ncurses=6.4_p20230506-r0 pv=1.6.20-r1 tzdata=2023c-r1 \ + && ln -sf python3 /usr/bin/python \ + && rm -rf /var/cache/apk/* + +# Install updated version of NPM. +RUN npm install -g npm@^8.6 && fix-permissions /home/.npm + +# Adding patches and scripts. +COPY patches /app/patches +COPY scripts /app/scripts + +RUN mkdir -p web/themes/contrib/civictheme \ + && mkdir -p web/modules/custom/civictheme_govcms \ + && mkdir -p web/modules/custom/civictheme_admin \ + && mkdir -p web/modules/custom/civictheme_content \ + && mkdir -p web/modules/custom/civictheme_dev \ + && mkdir -p web/modules/custom/cs_generated_content + +# Copy files required for PHP dependencies resolution. +# Note that composer.lock is not explicitly copied, allowing to run the stack +# without existing lock file (this is not advisable, but allows to build +# using latest versions of packages). composer.lock should be comitted to the +# repository. +# File .env (and other environment files) is copied into image as it may be +# required by composer scripts to get some additions variables. +COPY composer.json composer.* .env* auth* /app/ + +COPY web/themes/contrib/civictheme/composer.json /app/web/themes/contrib/civictheme/ +COPY web/modules/custom/civictheme_govcms/composer.json web/modules/custom/civictheme_govcms/ +COPY web/modules/custom/civictheme_admin/composer.json web/modules/custom/civictheme_admin/ +COPY web/modules/custom/civictheme_content/composer.json web/modules/custom/civictheme_content/ +COPY web/modules/custom/civictheme_dev/composer.json web/modules/custom/civictheme_dev/ +COPY web/modules/custom/cs_generated_content/composer.json web/modules/custom/cs_generated_content/ + +# Install PHP dependencies without including development dependencies. This is +# crucial as it prevents potential security vulnerabilities from being exposed +# to the production environment. +RUN if [ -n "${GITHUB_TOKEN}" ]; then export COMPOSER_AUTH="{\"github-oauth\": {\"github.com\": \"${GITHUB_TOKEN}\"}}"; fi && \ + COMPOSER_MEMORY_LIMIT=-1 composer install -n --no-dev --ansi --prefer-dist --optimize-autoloader + +# Install NodeJS dependencies. +# Note that package-lock.json is not explicitly copied, allowing to run the +# stack without existing lock file (this is not advisable, but allows to build +# using latest versions of packages). package-lock.json should be comitted to +# the repository. +# File Gruntfile.sj is copied into image as it is required to generate +# front-end assets. +COPY web/themes/contrib/civictheme/ web/themes/contrib/civictheme/package* /app/web/themes/contrib/civictheme/ + +# Install NodeJS dependencies. +# Since Drupal does not use NodeJS for production, it does not matter if we +# install development dependencies here - they are not exposed in any way. +RUN npm --prefix web/themes/contrib/civictheme install --no-audit --no-progress --unsafe-perm + +# Copy all files into appllication source directory. Existing files are always +# overridden. +COPY . /app + +# Compile front-end assets. Running this after copying all files as we need +# sources to compile assets. +RUN cd /app/web/themes/contrib/civictheme && npm run build diff --git a/.docker/cli.sibling.dockerfile b/.docker/cli.sibling.dockerfile new file mode 100644 index 000000000..03fd8b9b7 --- /dev/null +++ b/.docker/cli.sibling.dockerfile @@ -0,0 +1,107 @@ +# CLI container. +# +# Not used in Lagoon. +# +# - Installs Composer dependencies +# - Installs CivicTheme Library dependencies and builds assets +# - Installs CivicTheme dependencies and builds assets +# - Creates sub-theme as a sibling, installs dependencies and builds assets +# +# @see https://hub.docker.com/r/uselagoon/php-8.1-cli-drupal/tags +# @see https://github.com/uselagoon/lagoon-images/tree/main/images/php-cli-drupal +FROM uselagoon/php-8.1-cli-drupal:23.10.0 + +# Add missing variables. +# @todo Remove once https://github.com/uselagoon/lagoon/issues/3121 is resolved. +ARG LAGOON_PR_HEAD_BRANCH="" +ENV LAGOON_PR_HEAD_BRANCH=${LAGOON_PR_HEAD_BRANCH} +ARG LAGOON_PR_HEAD_SHA="" +ENV LAGOON_PR_HEAD_SHA=${LAGOON_PR_HEAD_SHA} + +# Webroot is used for Drush aliases. +ARG WEBROOT=web + +ARG GITHUB_TOKEN="" +ENV GITHUB_TOKEN=${GITHUB_TOKEN} + +# Set default values for environment variables. +# These values will be overridden if set in docker-compose.yml or .env file +# during build stage. +ENV WEBROOT=${WEBROOT} \ + COMPOSER_ALLOW_SUPERUSER=1 \ + COMPOSER_CACHE_DIR=/tmp/.composer/cache \ + SIMPLETEST_DB=mysql://drupal:drupal@mariadb/drupal \ + SIMPLETEST_BASE_URL=http://nginx:8080 \ + SYMFONY_DEPRECATIONS_HELPER=disabled + +# Strating from this line, Docker will add result of each command into a +# separate layer. These layers are then cached and re-used when the project is +# rebuilt. +# Note that layers are only rebuilt if files added into the image with `ADD` +# have changed since the last build. So, adding files that are unlikely to +# change earlier in the build process (closer to the start of this file) +# reduce build time. + +# Adding more tools. +RUN apk update \ + && apk add pv python3 make gcc g++ diffutils ncurses=6.4_p20230506-r0 pv=1.6.20-r1 tzdata=2023c-r1 \ + && ln -sf python3 /usr/bin/python \ + && rm -rf /var/cache/apk/* + +# Install updated version of NPM. +RUN npm install -g npm@^8.6 && fix-permissions /home/.npm + +# Adding patches and scripts. +COPY patches /app/patches +COPY scripts /app/scripts + +RUN mkdir -p web/themes/contrib/civictheme \ + && mkdir -p web/modules/custom/civictheme_govcms \ + && mkdir -p web/modules/custom/civictheme_admin \ + && mkdir -p web/modules/custom/civictheme_content \ + && mkdir -p web/modules/custom/civictheme_dev \ + && mkdir -p web/modules/custom/cs_generated_content + +# Copy files required for PHP dependencies resolution. +# Note that composer.lock is not explicitly copied, allowing to run the stack +# without existing lock file (this is not advisable, but allows to build +# using latest versions of packages). composer.lock should be comitted to the +# repository. +# File .env (and other environment files) is copied into image as it may be +# required by composer scripts to get some additions variables. +COPY composer.json composer.* .env* auth* /app/ + +COPY web/themes/contrib/civictheme/composer.json /app/web/themes/contrib/civictheme/ +COPY web/modules/custom/civictheme_govcms/composer.json web/modules/custom/civictheme_govcms/ +COPY web/modules/custom/civictheme_admin/composer.json web/modules/custom/civictheme_admin/ +COPY web/modules/custom/civictheme_content/composer.json web/modules/custom/civictheme_content/ +COPY web/modules/custom/civictheme_dev/composer.json web/modules/custom/civictheme_dev/ +COPY web/modules/custom/cs_generated_content/composer.json web/modules/custom/cs_generated_content/ + +# Install PHP dependencies without including development dependencies. This is +# crucial as it prevents potential security vulnerabilities from being exposed +# to the production environment. +RUN if [ -n "${GITHUB_TOKEN}" ]; then export COMPOSER_AUTH="{\"github-oauth\": {\"github.com\": \"${GITHUB_TOKEN}\"}}"; fi && \ + COMPOSER_MEMORY_LIMIT=-1 composer install -n --no-dev --ansi --prefer-dist --optimize-autoloader + +# Install NodeJS dependencies. +# Note that package-lock.json is not explicitly copied, allowing to run the +# stack without existing lock file (this is not advisable, but allows to build +# using latest versions of packages). package-lock.json should be comitted to +# the repository. +# File Gruntfile.sj is copied into image as it is required to generate +# front-end assets. +COPY web/themes/contrib/civictheme/civictheme_library/package.json web/themes/contrib/civictheme/civictheme_library/package* /app/web/themes/contrib/civictheme/civictheme_library/ +COPY web/themes/contrib/civictheme/ web/themes/contrib/civictheme/package* /app/web/themes/contrib/civictheme/ + +# Copy all files into appllication source directory. Existing files are always +# overridden. +COPY . /app + +# Create a subtheme in the same directory as CivicTheme. +RUN cd /app/web/themes/contrib/civictheme \ + && php civictheme_create_subtheme.php civictheme_demo "CivicTheme Demo Sibling" "Demo sub-theme for a CivicTheme theme installed in the same directory." ../civictheme_demo + +# Compile subtheme assets. +RUN npm --prefix web/themes/contrib/civictheme_demo install --no-audit --no-progress --unsafe-perm \ + && cd /app/web/themes/contrib/civictheme_demo && npm run build diff --git a/.docker/Dockerfile.mariadb b/.docker/mariadb.dockerfile similarity index 74% rename from .docker/Dockerfile.mariadb rename to .docker/mariadb.dockerfile index b0fdb54a3..5a3d48a81 100644 --- a/.docker/Dockerfile.mariadb +++ b/.docker/mariadb.dockerfile @@ -6,9 +6,12 @@ # Use drevops/drevops-mariadb-drupal-data as a starting Docker image for your # Database-in-Docker-image database. # @see https://github.com/drevops/mariadb-drupal-data -ARG IMAGE +# +# The ARG value will be updated with a value passed from docker-compose.yml +ARG IMAGE=uselagoon/mariadb-drupal:23.10.0 -FROM ${IMAGE:-uselagoon/mariadb-drupal:23.10.0} +# hadolint ignore=DL3006 +FROM ${IMAGE} USER root COPY ./.docker/config/mariadb/my.cnf /etc/my.cnf.d/server.cnf diff --git a/.docker/Dockerfile.nginx-drupal b/.docker/nginx-drupal.dockerfile similarity index 68% rename from .docker/Dockerfile.nginx-drupal rename to .docker/nginx-drupal.dockerfile index 9db86e9aa..6b8a8e4c0 100644 --- a/.docker/Dockerfile.nginx-drupal +++ b/.docker/nginx-drupal.dockerfile @@ -2,15 +2,17 @@ # # All web requests are sent to this container. ARG CLI_IMAGE +# hadolint ignore=DL3006 FROM ${CLI_IMAGE:-cli} as cli # @see https://hub.docker.com/r/uselagoon/nginx-drupal/tags?page=1 # @see https://github.com/uselagoon/lagoon-images/tree/main/images/nginx-drupal FROM uselagoon/nginx-drupal:23.10.0 -COPY ./.docker/config/nginx/. /etc/nginx/conf.d/ -RUN fix-permissions /etc/nginx +# Webroot is used for Nginx web configuration. +ARG WEBROOT=web +ENV WEBROOT=${WEBROOT} -ENV WEBROOT=docroot +RUN apk add --no-cache tzdata=2023c-r1 COPY --from=cli /app /app diff --git a/.docker/Dockerfile.php b/.docker/php.dockerfile similarity index 85% rename from .docker/Dockerfile.php rename to .docker/php.dockerfile index 867ea7113..18d608392 100644 --- a/.docker/Dockerfile.php +++ b/.docker/php.dockerfile @@ -3,10 +3,13 @@ # All web requests are sent from Nginx to this container. # This container would be scaled up/down in production. ARG CLI_IMAGE +# hadolint ignore=DL3006 FROM ${CLI_IMAGE:-cli} as cli # @see https://hub.docker.com/r/uselagoon/php-7.4-fpm/tags # @see https://github.com/uselagoon/lagoon-images/tree/main/images/php-fpm FROM uselagoon/php-8.1-fpm:23.10.0 +RUN apk add --no-cache tzdata=2023c-r1 + COPY --from=cli /app /app diff --git a/.dockerignore b/.dockerignore index 1d0f763c6..f4cff7144 100644 --- a/.dockerignore +++ b/.dockerignore @@ -7,19 +7,19 @@ # Ignore everything. * -# Do not ignore docroot. -!docroot +# Do not ignore web. +!web # Do not ignore config. !config # But still ignore Drupal directories generated by Composer. -docroot/core -docroot/modules/contrib -docroot/themes/contrib -!docroot/themes/contrib/civictheme -docroot/profiles/contrib -docroot/libraries +web/core +web/modules/contrib +web/themes/contrib +!web/themes/contrib/civictheme +web/profiles/contrib +web/libraries !drush drush/contrib/ diff --git a/.editorconfig b/.editorconfig index c122dc4ff..2da89fc47 100644 --- a/.editorconfig +++ b/.editorconfig @@ -13,7 +13,7 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true -[composer.{json,lock}] +[*.{json,lock}] indent_size = 4 [*.xml] diff --git a/.env b/.env index b6b22305a..b5fb7fc58 100644 --- a/.env +++ b/.env @@ -1,204 +1,156 @@ ## # Project environment variables. # -# It is used by Ahoy and other scripts to read default values. +# This file is used by Docker and other scripts to set values. # -# It is also a single place to define variables that control how the DrevOps -# works without the need to modify scripts. +# This is a single location where defined variables control how DrevOps operates +# and should be the primary place for modifications. Avoid overriding values in +# scripts or configuration files to simplify future updates and centralize +# changes. # -# The values must be scalar (cannot be another variable). Do not enclose values -# in double quotes unless they contain spaces. +# Values must be scalar and cannot reference another variable. +# Do not enclose values in double quotes unless they include spaces. # -# To apply any changes made to this file, run `ahoy up cli`. +# To apply any changes made to this file, run `docker-compose up cli -d` or +# `ahoy up cli`. # -# To customise variables locally, copy default.env.local to .env.local. +# To customize variables locally, copy `.env.local.default` to `.env.local`. # -# Update stack with `ahoy update`. -# -# @see https://docs.drevops.com/maintenance -# @see https://docs.drevops.com/variables/ +# @see https://docs.drevops.com/workflows/variables ################################################################################ # GENERAL # ################################################################################ # Project name. +# +# Drives internal naming within the codebase. +# Does not affect the names of containers and development URL - those depend on +# the project directory and can be overridden with $COMPOSE_PROJECT_NAME. DREVOPS_PROJECT=civictheme_source -# Local development URL (no trailing slashes). -DREVOPS_LOCALDEV_URL=civictheme-source.docker.amazee.io - -# Path to the root of the project inside of the container. -DREVOPS_APP=/app - -# Dedicated branch to identify production environment. -DREVOPS_PRODUCTION_BRANCH=master - -# Local database host (not used in production). -DREVOPS_MARIADB_HOST=mariadb - -# Local database name (not used in production). -DREVOPS_MARIADB_DATABASE=drupal - -# Local database user (not used in production). -DREVOPS_MARIADB_USER=drupal +# Name of the webroot directory with Drupal codebase. +DREVOPS_WEBROOT=web -# Local database password (not used in production). -DREVOPS_MARIADB_PASSWORD=drupal - -# Local database port (not used in production). -DREVOPS_MARIADB_PORT=3306 +# The timezone for the containers. +DREVOPS_TZ="Australia/Melbourne" ################################################################################ # DRUPAL # ################################################################################ -# Drupal version. -DREVOPS_DRUPAL_VERSION=10 - -# Drupal theme name. -DREVOPS_DRUPAL_THEME=civictheme - # Drupal profile name (used only when installing from profile). -DREVOPS_DRUPAL_PROFILE=minimal +DRUPAL_PROFILE=minimal -# Drupal site name (used only when installing from profile). -DREVOPS_DRUPAL_SITE_NAME="CivicTheme Source" +# Drupal theme name. +DRUPAL_THEME=civictheme -# Drupal site email (used only when installing from profile). -DREVOPS_DRUPAL_SITE_EMAIL="p.civictheme@salsadigital.com.au" +# Shield print message. +DRUPAL_SHIELD_PRINT="Restricted access." -# Sanitization email pattern. Sanitisation is enabled by default in all -# non-production environments. -# @see https://docs.drevops.com/build#sanitization -DREVOPS_DRUPAL_DB_SANITIZE_EMAIL="user_%uid@salsadigital.com.au" - -# Drupal admin email. May need to be reset if database was sanitized. -# DREVOPS_DRUPAL_ADMIN_EMAIL="webmaster@civictheme.salsadigital.com.au" +################################################################################ +# PROVISION # +################################################################################ -# Replace username with email after databasse sanitization. Useful when email -# is used as username. -# DREVOPS_DRUPAL_DB_SANITIZE_REPLACE_USERNAME_WITH_EMAIL=1 +# Variables in this section control how the site is provisioned. +# @see https://docs.drevops.com/workflows/provision -# Set to 1 to install a site from profile instead of database file dump. -DREVOPS_DRUPAL_INSTALL_FROM_PROFILE=1 +# Set to 1 to install a site from profile instead of the database file dump. +DREVOPS_PROVISION_USE_PROFILE=1 -# Flag to always overwrite existing database. Usually set to 0 in deployed -# environments and can be temporary set to 1 for a specific deployment. +# Overwrite existing database if it exists. +# +# Usually set to 0 in deployed environments and can be temporary set to 1 for +# a specific deployment. # Set this to 1 in .env.local to override when developing localy. -DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB=1 +DREVOPS_PROVISION_OVERRIDE_DB=1 # Skip database sanitization. -# DREVOPS_DRUPAL_INSTALL_DB_SANITIZE_SKIP=1 +# +# Database sanitization is enabled by default in all non-production +# environments and is always skipped in the production environment. +DREVOPS_PROVISION_SANITIZE_DB_SKIP=0 -# Put the site into a maintenance mode during site installation phase. -DREVOPS_DRUPAL_INSTALL_USE_MAINTENANCE_MODE=1 +# Sanitization email pattern. Sanitization is enabled by default in all +# non-production environments. +# @see https://docs.drevops.com/workflows/build#sanitization +DREVOPS_PROVISION_SANITIZE_DB_EMAIL="user_%uid@salsa.digital" -# Unblock admin account when logging in. -DREVOPS_DRUPAL_LOGIN_UNBLOCK_ADMIN=1 +# Put the site into a maintenance mode during site provisioning. +DREVOPS_PROVISION_USE_MAINTENANCE_MODE=1 ################################################################################ -# TOOLS # +# DATABASE # ################################################################################ -# Validate composer.lock file. -DREVOPS_COMPOSER_VALIDATE_LOCK=1 - -# PHP Parallel Lint comma-separated list of extensions (no preceding dot). -DREVOPS_LINT_PHPLINT_EXTENSIONS="php, inc, module, theme, install" - -# PHP Parallel Lint comma-separated list of targets. -DREVOPS_LINT_PHPLINT_TARGETS="docroot/modules/custom, docroot/themes/contrib/civictheme, docroot/sites/default/settings.php, tests" - -# PHPCS comma-separated list of targets. -DREVOPS_LINT_PHPCS_TARGETS="docroot/modules/custom, docroot/themes/contrib/civictheme, docroot/sites/default/settings.php, tests" - -# PHPMD comma-separated list of targets. -# PHPMD is very limited on inclusion/exclusion so we are specifying exact PHP files for performance reasons. -DREVOPS_LINT_PHPMD_TARGETS="docroot/themes/contrib/civictheme/includes, docroot/themes/contrib/civictheme/src, docroot/themes/contrib/civictheme/civictheme_starter_kit, docroot/themes/contrib/civictheme/civictheme.api.php, docroot/themes/contrib/civictheme/civictheme.theme, docroot/themes/contrib/civictheme/civictheme_create_subtheme.php, docroot/themes/contrib/civictheme/theme-settings.php, docroot/themes/contrib/civictheme/theme-settings.provision.inc" -# PHPMD report format. -DREVOPS_LINT_PHPMD_FORMAT=text -# PHPMD rules. -DREVOPS_LINT_PHPMD_RULESETS="codesize, unusedcode, cleancode" - -# Allow BE code linting failures. -DREVOPS_LINT_BE_ALLOW_FAILURE=0 - -# Allow FE code linting failures. -DREVOPS_LINT_FE_ALLOW_FAILURE=0 +# Database service runs a single database within a container. +# See settings.php for database credentials defaults. -# Allow custom front-end tests failures. -DREVOPS_TEST_FE_ALLOW_FAILURE=0 +# Database can be imported from a file dump into an empty database started from +# the database default image or can exist in a pre-built Docker image. +# Defaults to importing from a file. +# @see https://docs.drevops.com/workflows/database -# Allow custom Unit tests failures. -DREVOPS_TEST_UNIT_ALLOW_FAILURE=0 - -# Allow custom Kernel tests failures. -DREVOPS_TEST_KERNEL_ALLOW_FAILURE=0 - -# Allow custom Functional tests failures. -DREVOPS_TEST_FUNCTIONAL_ALLOW_FAILURE=0 - -# Allow BDD tests failures. -DREVOPS_TEST_BDD_ALLOW_FAILURE=0 - -################################################################################ -# DATABASE SOURCE # -################################################################################ +# Name of the pre-built Docker image. +# Uncomment to use an image with a DB data loaded into it. +# @see https://github.com/drevops/mariadb-drupal-data to seed your DB image. +# DREVOPS_DB_DOCKER_IMAGE= -# Database dump data directory (file or Docker image archive). +# Database dump directory. DREVOPS_DB_DIR=./.data -# Database dump file name (Docker image archive will use '.tar' extension). +# Database dump file name. DREVOPS_DB_FILE=db.sql +# Lagoon project name. May be different from $DREVOPS_PROJECT. +LAGOON_PROJECT=civictheme-source +################################################################################ +# DEPLOYMENT # +################################################################################ +# Deployment occurs when tests pass in the CI environment. +# @see https://docs.drevops.com/workflows/deployment -# Database dump file sourced from Lagoon. +# The type of deployment. +# +# Combination of comma-separated values to support multiple deployment targets: +# `artifact`,`docker`, `webhook`, `lagoon`. +# +# See https://docs.drevops.com/workflows/deploy +DREVOPS_DEPLOY_TYPES=lagoon -# Lagoon project name. May be different from DREVOPS_PROJECT. -LAGOON_PROJECT=civictheme-source +# Dedicated branch to identify the production environment. +DREVOPS_LAGOON_PRODUCTION_BRANCH=main DREVOPS_DEPLOY_LAGOON_INSTANCE=salsa-hosting DREVOPS_DEPLOY_LAGOON_INSTANCE_GRAPHQL=https://api.salsa.hosting/graphql DREVOPS_DEPLOY_LAGOON_INSTANCE_HOSTNAME=ssh.salsa.hosting DREVOPS_DEPLOY_LAGOON_INSTANCE_PORT=22 -DREVOPS_DEPLOY_LAGOON_LAGOONCLI_VERSION=v0.12.3 DREVOPS_TASK_LAGOON_INSTANCE=salsa-hosting DREVOPS_TASK_LAGOON_INSTANCE_GRAPHQL=https://api.salsa.hosting/graphql DREVOPS_TASK_LAGOON_INSTANCE_HOSTNAME=ssh.salsa.hosting DREVOPS_TASK_LAGOON_INSTANCE_PORT=22 -DREVOPS_TASK_LAGOON_LAGOONCLI_VERSION=v0.12.3 - -DREVOPS_DB_DOWNLOAD_LAGOON_SSH_HOST=ssh.salsa.hosting -DREVOPS_DB_DOWNLOAD_LAGOON_SSH_PORT=22 - -# Use Lagoon Drush aliases to get access to environments from the CLI container. -# DREVOPS_LAGOON_ENABLE_DRUSH_ALIASES=1 ################################################################################ -# DATABASE STORAGE # +# NOTIFICATIONS # ################################################################################ -# Database can be stored in a file and then imported into an empty database -# started from the database default image or in a pre-built Docker image. -# Defaults to storage in a file. -# @see https://docs.drevops.com/database - -# Name of the database docker image to use. Uncomment to use an image with -# a DB data loaded into it. -# @see https://github.com/drevops/mariadb-drupal-data to seed your DB image. -# DREVOPS_DB_DOCKER_IMAGE= +# Notificaions are sent accross multiple channels before and after deployment. +# @see https://docs.drevops.com/workflows/notifications -################################################################################ -# DEPLOYMENT # -################################################################################ +# The channels of the notifications. +# +# Can be a combination of comma-separated values: email,newrelic,github,jira +DREVOPS_NOTIFY_CHANNELS=email -# The type of deployemt. -# @see https://docs.drevops.com/deployment +# Email to send notifications from. +DREVOPS_NOTIFY_EMAIL_FROM="lagoon-deploy+civictheme_source@salsa.digital" -# Combination of comma-separated values to support multiple deployments: -# "artifact","docker", "webhook", "lagoon". -DREVOPS_DEPLOY_TYPE=lagoon +# Email address(es) to send notifications to. +# +# Multiple names can be specified as a comma-separated list of email addresses +# with optional names in the format "email|name". +# Example: "to1@example.com|Jane Doe, to2@example.com|John Doe" +DREVOPS_NOTIFY_EMAIL_RECIPIENTS="p.civictheme+lagoon-deploy.civictheme_source@salsa.digital|CivicTheme group" diff --git a/.env.local.default b/.env.local.default new file mode 100644 index 000000000..0612d6fd9 --- /dev/null +++ b/.env.local.default @@ -0,0 +1,52 @@ +## +# Environment variables for local configuration, typically used for secrets +# and individual customizations. +# +# Copy this file to .env.local and provide appropriate values. +# +# The .env.local file is excluded via .gitignore and will not be committed. +# +# @see https://docs.drevops.com/workflows/variables + +# Suppress Ahoy prompts. +# AHOY_CONFIRM_RESPONSE=y + +# When Ahoy prompts are suppressed (AHOY_CONFIRM_RESPONSE is 1), the command +# will wait for 3 seconds before proceeding. +# Set this variable to "1" to skip the wait. +# AHOY_CONFIRM_WAIT_SKIP=1 + +# Always override DB. +DREVOPS_PROVISION_OVERRIDE_DB=1 + +# Local development URL. +# Defaults to `.docker.amazee.io` +# Override only if you need to use a different URL than the default. +# DREVOPS_LOCALDEV_URL="civictheme_source.docker.amazee.io" + +# Print debug information in DrevOps scripts. +# DREVOPS_DEBUG=1 + +# Print output from Docker build. +# DREVOPS_DOCKER_VERBOSE=1 + +# Print output from Composer install. +# DREVOPS_COMPOSER_VERBOSE=1 + +# Print output from NPM install. +# DREVOPS_NPM_VERBOSE=1 + +# Always override existing downloaded DB dump. +DREVOPS_DB_DOWNLOAD_FORCE=1 + + + +# Database dump file sourced from Lagoon. + +# SSH key file used to access Lagoon environment to download the database. +# Create an SSH key and add it to your account in the Lagoon Dashboard. +DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE=$HOME/.ssh/id_rsa + +# GitHub token used to overcome API rate limits or access private repositories. +# @see https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token +GITHUB_TOKEN= diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ec268bff6..3231b755f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,7 @@ ## Checklist before requesting a review -- [ ] I have formatted the subject to include ticket number as `[CIVIC-123] Verb in past tense with dot at the end.` -- [ ] I have added a link to the JIRA ticket +- [ ] I have formatted the subject to include ticket number as `[CS-123] Verb in past tense with dot at the end.` +- [ ] 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 @@ -10,6 +10,7 @@ - [ ] I have provided screenshots, where applicable ## Changed + 1. ## Screenshots diff --git a/docroot/themes/contrib/civictheme/.github/release-drafter.yml b/.github/release-drafter.yml similarity index 100% rename from docroot/themes/contrib/civictheme/.github/release-drafter.yml rename to .github/release-drafter.yml diff --git a/.github/workflows/auto-author-assign.yml b/.github/workflows/auto-assign-pr-author.yml similarity index 78% rename from .github/workflows/auto-author-assign.yml rename to .github/workflows/auto-assign-pr-author.yml index acd55ab8a..7eb28037a 100644 --- a/.github/workflows/auto-author-assign.yml +++ b/.github/workflows/auto-assign-pr-author.yml @@ -11,4 +11,4 @@ jobs: assign-author: runs-on: ubuntu-latest steps: - - uses: toshimaru/auto-author-assign@v1.4.0 + - uses: toshimaru/auto-author-assign@v2.0.1 diff --git a/.github/workflows/dispatch-webhook-lagoon.yml b/.github/workflows/dispatch-webhook-lagoon.yml index 5171098eb..5d16cb4df 100644 --- a/.github/workflows/dispatch-webhook-lagoon.yml +++ b/.github/workflows/dispatch-webhook-lagoon.yml @@ -24,4 +24,4 @@ jobs: --header "X-GitHub-Delivery: ${RUNNER_TRACKING_ID:7}" \ --header "X-GitHub-Event: pull_request" \ --data-binary @- \ - https://webhookhandler.salsa.hosting/ + "${LAGOON_WEBHOOK_ENDPOINT-https://hooks.lagoon.amazeeio.cloud/}" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..bd1c2ebb6 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,22 @@ +name: Release + +on: + push: + tags: + - '*' + branches: + - develop + +permissions: + contents: write + +jobs: + release-drafter: + permissions: + contents: write + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: release-drafter/release-drafter@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/storybook-tests.yml b/.github/workflows/storybook-tests.yml index e1e9a8cf5..29608344c 100644 --- a/.github/workflows/storybook-tests.yml +++ b/.github/workflows/storybook-tests.yml @@ -11,10 +11,10 @@ jobs: node-version: '18.14' - name: Install dependencies run: npm install && npx playwright install - working-directory: docroot/themes/contrib/civictheme/civictheme_library + working-directory: web/themes/contrib/civictheme/civictheme_library - name: Build Storybook run: npm run build-storybook - working-directory: docroot/themes/contrib/civictheme/civictheme_library + working-directory: web/themes/contrib/civictheme/civictheme_library - name: Run tests run: npm run test - working-directory: docroot/themes/contrib/civictheme/civictheme_library + working-directory: web/themes/contrib/civictheme/civictheme_library diff --git a/.gitignore b/.gitignore index b178420eb..adb31295e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,71 +1,66 @@ # To ignore OS temporary files use global .gitignore # https://help.github.com/articles/ignoring-files/#create-a-global-gitignore -# Ignore Drupal docroot, but preserve custom modules, themes and settings. +# Ignore Drupal web, but preserve custom modules, themes and settings. # To add an override file, explicitly un-ignore it below and add to the # repository (useful for robots.txt and .htaccess file overrides). -docroot/* -!docroot/sites/ -docroot/sites/* -!docroot/modules/ -docroot/modules/* -!docroot/modules/custom/ -!docroot/themes/ -docroot/themes/* -!docroot/themes/custom/ -!docroot/themes/contrib/ -docroot/themes/contrib/* -!docroot/themes/contrib/civictheme -!docroot/profiles/ -docroot/profiles/* -!docroot/profiles/custom/ -!docroot/sites/default/ -docroot/sites/default/* -!docroot/sites/default/settings.php -!docroot/sites/default/services.yml -!docroot/sites/default/default.settings.local.php -!docroot/sites/default/default.services.local.yml -!docroot/sites/default/includes +web/* +!web/sites/ +web/sites/* +!web/modules/ +web/modules/* +!web/modules/custom/ +!web/themes/ +web/themes/* +!web/themes/custom/ +!web/themes/contrib/ +web/themes/contrib/* +!web/themes/contrib/civictheme +!web/profiles/ +web/profiles/* +!web/profiles/custom/ +!web/sites/default/ +web/sites/default/* +!web/sites/default/settings.php +!web/sites/default/services.yml +!web/sites/default/default.settings.local.php +!web/sites/default/default.services.local.yml +!web/sites/default/includes # Preserve default settings files to use them in Functional test. -!docroot/sites/default/default.settings.php -!docroot/sites/default/default.services.yml +!web/sites/default/default.settings.php +!web/sites/default/default.services.yml # Whitelist scaffold files. @see https://github.com/drupal-composer/drupal-scaffold#limitation -!docroot/.editorconfig -!docroot/.eslintignore -!docroot/.gitattributes -!docroot/.htaccess -!docroot/autoload.php -!docroot/index.php -!docroot/robots.txt -!docroot/update.php - +!web/.editorconfig +!web/.eslintignore +!web/.gitattributes +!web/.htaccess +!web/autoload.php +!web/index.php +!web/robots.txt +!web/update.php # Ignore dependencies cache files. -vendor -node_modules +/vendor +/node_modules +web/themes/**/node_modules # Assets. -docroot/themes/**/build -screenshots -test_reports +web/themes/**/build .data +.logs # Ignore local override files. docker-compose.override.yml .env.local +.ahoy.local.yml # Ignore configuration as this site is installed from profile. /config/* # Ignore generated theme. -docroot/themes/custom -.ahoy.local.yml +web/themes/custom # Ignore FE lock files. Do not ignore in distributions as they could be required # by the consumer sites. package-lock.json - -auth.json - -.gitempty diff --git a/.gitignore.deployment b/.gitignore.deployment index 7716aa442..517a91c20 100644 --- a/.gitignore.deployment +++ b/.gitignore.deployment @@ -1,28 +1,32 @@ # Replaces standard .gitignore when building a deployment artifact. -# Ignore everything, but some whitelisted files. +# Ignore all files except those specifically allowed. /* -!docroot -# But still ignore sources. -docroot/themes/contrib/civictheme/fonts -docroot/themes/contrib/civictheme/images -docroot/themes/contrib/civictheme/js -docroot/themes/contrib/civictheme/scss -docroot/themes/contrib/civictheme/Gruntfile.js -docroot/themes/contrib/civictheme/package.json -docroot/themes/contrib/civictheme/package-lock.json -docroot/themes/contrib/civictheme/.eslintrc.json -docroot/themes/contrib/civictheme/node_modules -docroot/sites/default/settings.generated.php -docroot/sites/default/default.settings.php -docroot/sites/default/default.services.yml -docroot/sites/default/default.settings.local.php -docroot/sites/default/default.services.local.yml -docroot/sites/default/files - -!composer.json +# Do not ignore required files. !/config/ -!/hooks/ -!/vendor/ !/scripts/ +!/vendor/ +!composer.json +!.env + +# Do not ignore webroot (manage Drupal scaffold files using the composer.json) +!web +# But ignore content files and test artifacts. +web/sites/default/files +web/sites/simpletest + +# Ignore non-production scaffold files. +web/sites/default/default.services.local.yml +web/sites/default/default.settings.local.php + +# Ignore custom theme asset sources. +web/themes/contrib/civictheme/fonts +web/themes/contrib/civictheme/images +web/themes/contrib/civictheme/js +web/themes/contrib/civictheme/scss +web/themes/contrib/civictheme/Gruntfile.js +web/themes/contrib/civictheme/package.json +web/themes/contrib/civictheme/package-lock.json +web/themes/contrib/civictheme/.eslintrc.json +web/themes/contrib/civictheme/node_modules diff --git a/.lagoon.env.master b/.lagoon.env.main similarity index 100% rename from .lagoon.env.master rename to .lagoon.env.main diff --git a/.lagoon.yml b/.lagoon.yml index cc98f69f0..062b5da24 100644 --- a/.lagoon.yml +++ b/.lagoon.yml @@ -4,138 +4,63 @@ docker-compose-yaml: docker-compose.yml environment_variables: git_sha: 'true' -# Uncomment below to login into container registries if using private images. +# Uncomment to login into container registries if using private images. # container-registries: # dockerhub: -# username: -# # Environment variable $DREVOPS_DOCKER_REGISTRY_TOKEN with Docker registry -# # password is injected into container via LagoonCLI. -# # @see https://docs.lagoon.sh/using-lagoon-advanced/environment-variables/#runtime-environment-variables-lagoon-api -# password: DREVOPS_DOCKER_REGISTRY_TOKEN +# # Environment variables DOCKER_USER and DOCKER_PASS needs to be set via Lagoon CLI. +# username: DOCKER_USER +# password: DOCKER_PASS tasks: post-rollout: - run: name: Show DrevOps variables. - command: | - env -0 | sort -z | tr '\0' '\n' | grep ^DREVOPS_ + command: env -0 | sort -z | tr '\0' '\n' | grep ^DREVOPS_ || true service: cli shell: bash - run: - name: Replace app entrypoint to prevent probes from bootstrapping - command: | - mv /app/docroot/index.php /tmp/index.php - echo "> /app/docroot/index.php - service: nginx-php - container: php - - - run: - name: Set GitHub deployment status + name: Notify about pre-deployment. command: | - if [ -n "${DREVOPS_NOTIFY_GITHUB_TOKEN}" ] && [ -n "$LAGOON_PR_NUMBER" ]; then - [ -n "$LAGOON_PR_NUMBER" ] && GIT_SHA=${LAGOON_PR_HEAD_SHA#origin/} || GIT_SHA=$LAGOON_GIT_SHA - DREVOPS_NOTIFY_DEPLOY_REPOSITORY="salsadigitalauorg/civictheme_source" \ - DREVOPS_NOTIFY_DEPLOY_REF="$GIT_SHA" \ - DREVOPS_NOTIFY_DEPLOY_GITHUB_OPERATION="start" \ - ./scripts/drevops/notify-deployment-github.sh || true - fi + if [ -n "$LAGOON_PR_NUMBER" ]; then export DREVOPS_NOTIFY_REF=$LAGOON_PR_NUMBER;export DREVOPS_NOTIFY_SHA=${LAGOON_PR_HEAD_SHA#origin/};export DREVOPS_NOTIFY_BRANCH=$LAGOON_PR_HEAD_BRANCH;else export DREVOPS_NOTIFY_REF=$LAGOON_GIT_BRANCH;export DREVOPS_NOTIFY_SHA=$LAGOON_GIT_SHA;export DREVOPS_NOTIFY_BRANCH=$LAGOON_GIT_BRANCH;fi + DREVOPS_NOTIFY_PROJECT=$LAGOON_PROJECT \ + DREVOPS_NOTIFY_ENVIRONMENT_URL=$LAGOON_ROUTE \ + DREVOPS_NOTIFY_EVENT=pre_deployment ./scripts/drevops/notify.sh || true service: cli shell: bash - run: - name: Backup DB before deployment in production + name: Provision site command: | - if [ "$LAGOON_ENVIRONMENT_TYPE" = "production" ] || [ "$LAGOON_GIT_BRANCH" = "${DREVOPS_PRODUCTION_BRANCH:-main}" ]; then - echo "==> Running in PRODUCTION environment." - DREVOPS_DB_DIR=/app/docroot/sites/default/files/private/pre_deployment_backups ./scripts/drevops/export-db-file.sh - fi - service: cli - - - run: - name: Install site - command: | - # Read DB dump from the temp location instead of '.data'. - export DREVOPS_DB_DIR=/tmp/data - - # Deployments from UI are not able to bypass the value of - # DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB set by the deploy-lagoon.sh - # during previous deployments (it sets value to '0' to mitigate Lagoon bug - # where environment variables cannot be deleted and have to be set to a value). - # @see https://github.com/uselagoon/lagoon/issues/1922 - # Explicitly set DB overwrite flag to the value from .env file for - # deployments from the profile. - if [ "$DREVOPS_DRUPAL_INSTALL_FROM_PROFILE" = "1" ]; then - export DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB="$(cat .env | grep ^DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB | cut -c45-)" - fi - - if [ "$LAGOON_ENVIRONMENT_TYPE" = "production" ] || [ "$LAGOON_GIT_BRANCH" = "${DREVOPS_PRODUCTION_BRANCH:-main}" ]; then + if [ "$LAGOON_ENVIRONMENT_TYPE" = "production" ] || [ "$LAGOON_GIT_BRANCH" = "${DREVOPS_LAGOON_PRODUCTION_BRANCH:-main}" ]; then echo "==> Running in PRODUCTION environment." # Never unblock admin user in production. - export DREVOPS_DRUPAL_LOGIN_UNBLOCK_ADMIN=0 - # Never sanitize DB. - export DREVOPS_DRUPAL_INSTALL_DB_SANITIZE_SKIP=1 + export DRUPAL_UNBLOCK_ADMIN=0 + # Never sanitize DB in production. + export DREVOPS_PROVISION_SANITIZE_DB_SKIP=1 fi - - # Install site. - ./scripts/drevops/drupal-install-site.sh + ./scripts/drevops/provision.sh service: cli shell: bash - - run: - name: Restore app entrypoint - command: | - rm /app/docroot/index.php - mv /tmp/index.php /app/docroot/index.php - service: nginx-php - container: php - - run: name: Send deployment notifications command: | - [ -n "$LAGOON_PR_NUMBER" ] && GIT_REF=$LAGOON_PR_NUMBER || GIT_REF=$LAGOON_GIT_BRANCH - php ./scripts/drevops/notify-deployment-email.php \ - "CivicTheme Source" \ - "lagoon-deploy+civictheme_source@salsadigital.com.au" \ - "p.civictheme+lagoon-deploy.civictheme_source@salsadigital.com.au|CivicTheme group" \ - "$GIT_REF" \ - "$LAGOON_ROUTES" - - if [ -n "$NEWRELIC_ENABLED" ] && [ -n "$NEWRELIC_LICENSE" ] && [ -n "$DREVOPS_NOTIFY_NEWRELIC_APIKEY" ]; then - [ -n "$LAGOON_PR_NUMBER" ] && GIT_SHA=${LAGOON_PR_HEAD_SHA#origin/} || GIT_SHA=$LAGOON_GIT_SHA - DREVOPS_NOTIFY_NEWRELIC_APP_NAME="$LAGOON_PROJECT-$GIT_SHA" \ - DREVOPS_NOTIFY_DEPLOY_REF="$GIT_SHA" \ - ./scripts/drevops/notify-deployment-newrelic.sh - fi - - if [ -n "${DREVOPS_NOTIFY_GITHUB_TOKEN}" ] && [ -n "$LAGOON_PR_NUMBER" ]; then - [ -n "$LAGOON_PR_NUMBER" ] && GIT_SHA=${LAGOON_PR_HEAD_SHA#origin/} || GIT_SHA=$LAGOON_GIT_SHA - DREVOPS_NOTIFY_DEPLOY_REPOSITORY="salsadigitalauorg/civictheme_source" \ - DREVOPS_NOTIFY_DEPLOY_REF="$GIT_SHA" \ - DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL="$LAGOON_ROUTE" \ - DREVOPS_NOTIFY_DEPLOY_GITHUB_OPERATION="finish" \ - ./scripts/drevops/notify-deployment-github.sh || true - fi - - if [ -n "${DREVOPS_NOTIFY_DEPLOY_JIRA_USER}" ] && [ -n "${DREVOPS_NOTIFY_DEPLOY_JIRA_TOKEN}" ]; then - [ -n "$LAGOON_PR_NUMBER" ] && GIT_BRANCH=$LAGOON_PR_HEAD_BRANCH || GIT_BRANCH=$LAGOON_GIT_BRANCH - DREVOPS_NOTIFY_JIRA_ENDPOINT="${DREVOPS_NOTIFY_JIRA_ENDPOINT:-https://jira.atlassian.com}" \ - DREVOPS_NOTIFY_DEPLOY_BRANCH="$GIT_BRANCH" \ - DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL="$LAGOON_ROUTE" \ - ./scripts/drevops/notify-deployment-jira.sh || true - fi + if [ -n "$LAGOON_PR_NUMBER" ]; then export DREVOPS_NOTIFY_REF=$LAGOON_PR_NUMBER; export DREVOPS_NOTIFY_SHA=${LAGOON_PR_HEAD_SHA#origin/}; export DREVOPS_NOTIFY_BRANCH=$LAGOON_PR_HEAD_BRANCH; else export DREVOPS_NOTIFY_REF=$LAGOON_GIT_BRANCH; export DREVOPS_NOTIFY_SHA=$LAGOON_GIT_SHA; export DREVOPS_NOTIFY_BRANCH=$LAGOON_GIT_BRANCH; fi + DREVOPS_NOTIFY_EVENT=post_deployment \ + DREVOPS_NOTIFY_PROJECT=$LAGOON_PROJECT \ + DREVOPS_NOTIFY_ENVIRONMENT_URL=$LAGOON_ROUTE \ + ./scripts/drevops/notify.sh service: cli shell: bash - environments: # Branch name that represents production environment. - master: + main: cronjobs: - name: drush cron schedule: '*/15 * * * *' command: drush cron --root=/app service: cli - routes: - nginx-php: - default.civictheme.io diff --git a/.twig_cs.php b/.twig_cs.php new file mode 100644 index 000000000..2097644a5 --- /dev/null +++ b/.twig_cs.php @@ -0,0 +1,14 @@ +setName('custom-config') + ->setSeverity('error') + ->setReporter('console') + ->setRuleSet(Twigcs\Ruleset\Official::class) + ->addFinder(Twigcs\Finder\TemplateFinder::create()->in(__DIR__ . '/web/modules/custom')) + ->addFinder(Twigcs\Finder\TemplateFinder::create()->in(__DIR__ . '/web/themes/contrib/civictheme')) + ->addFinder(Twigcs\Finder\TemplateFinder::create()->in(__DIR__ . '/web/themes/custom')); diff --git a/CI.md b/CI.md deleted file mode 100644 index fc48060f3..000000000 --- a/CI.md +++ /dev/null @@ -1,11 +0,0 @@ -# Automated builds (Continuous Integration) - -In software engineering, continuous integration (CI) is the practice of merging all developer working copies to a shared mainline several times a day. -Before feature changes can be merged into a shared mainline, a complete build must run and pass all tests on CI server. - -This project uses [Circle CI](https://circleci.com/) as a CI server: it imports production backups into fully built codebase and runs code linting and tests. When tests pass, a deployment process is triggered for nominated branches (usually, `master` and `develop`). - -Add `[skip ci]` to the commit subject to skip CI build. Useful for documentation changes. - -## SSH -Circle CI supports shell access to the build for 120 minutes after the build is finished when the build is started with SSH support. Use "Rerun job with SSH" button in Circle CI UI to start build with SSH support. diff --git a/README.md b/README.md index a70b7ac51..17f5623c9 100644 --- a/README.md +++ b/README.md @@ -2,23 +2,18 @@ Mono-repo used to maintain CivicTheme and accompanying modules that are automatically published to another repositories on release. [![CircleCI](https://circleci.com/gh/salsadigitalauorg/civictheme_source.svg?style=shield)](https://circleci.com/gh/salsadigitalauorg/civictheme_source) -![Drupal 9](https://img.shields.io/badge/Drupal-9-blue.svg) +![Drupal 10](https://img.shields.io/badge/Drupal-10-blue.svg) -[//]: # (DO NOT REMOVE THE BADGE BELOW. IT IS USED BY DREVOPS TO TRACK INTEGRATION) - -[![DrevOps](https://img.shields.io/badge/DrevOps-9.x-blue.svg)](https://github.com/drevops/drevops/tree/9.x) +[![RenovateBot](https://img.shields.io/badge/RenovateBot-enabled-brightgreen.svg?logo=renovatebot)](https://renovatebot.com) -## Environments -- [PROD](https://default.civictheme.io) -- [DEV](https://defaultdev.civictheme.io) -- [LOCAL](http://civictheme-source.docker.amazee.io/) +[//]: # (DO NOT REMOVE THE BADGE BELOW. IT IS USED BY DREVOPS TO TRACK INTEGRATION) -### Content profiles +[![DrevOps](https://img.shields.io/badge/DrevOps-develop-blue.svg)](https://github.com/drevops/drevops/tree/develop) -- [Corporate](https://nginx-php.content-corporate.civictheme-source.lagoon.salsa.hosting/) -- [Government](https://nginx-php.content-government.civictheme-source.lagoon.salsa.hosting/) -- [Higher Education](https://nginx-php.content-highereducation.civictheme-source.lagoon.salsa.hosting/) +[//]: # (Remove the section below once onboarding is finished) +## Onboarding +Use [Onboarding checklist](docs/onboarding.md) to track the project onboarding progress. ## Local environment setup - Make sure that you have latest versions of all required software installed: @@ -27,36 +22,47 @@ Mono-repo used to maintain CivicTheme and accompanying modules that are automati - [Ahoy](https://github.com/ahoy-cli/ahoy) - Make sure that all local web development services are shut down (Apache/Nginx, Mysql, MAMP etc). - Checkout project repository (in one of the [supported Docker directories](https://docs.docker.com/docker-for-mac/osxfs/#access-control)). -- `pygmy up` -- `ahoy build` -### Apple M1 adjustments -Copy `default.docker-compose.override.yml` to `docker-compose.override.yml`. -## Development +- Authenticate with Lagoon + 1. Create an SSH key and add it to your account in the [Lagoon Dashboard](https://ui-lagoon-master.ch.amazee.io/). + 2. Copy `.env.local.default` to `.env.local`. + 3. Update `$DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE` environment variable in `.env.local` file + with the path to the SSH key. -Please refer to [development documentation](DEVELOPMENT.md). -## Testing -Please refer to [testing documentation](TESTING.md). -## CI +- `ahoy download-db` -Please refer to [CI documentation](CI.md). +- `pygmy up` +- `ahoy build` -## Deployment +### Apple M1 adjustments -Please refer to [deployment documentation](DEPLOYMENT.md). +Copy `docker-compose.override.default.yml` to `docker-compose.override.yml`. -## Releasing +## Project documentation -Please refer to [releasing documentation](RELEASING.md). +- [Development](docs/development.md) +- [FAQs](docs/faqs.md) +- [Testing](docs/testing.md) +- [CI](docs/ci.md) +- [Releasing](docs/releasing.md) +- [Deployment](docs/deployment.md) -## FAQs +## Environments -Please refer to [FAQs](FAQs.md). +- [PROD](https://default.civictheme.io) +- [DEV](https://defaultdev.civictheme.io) +- [LOCAL](http://civictheme-source.docker.amazee.io/) + +### Content profiles + +- [Corporate](https://nginx-php.content-corporate.civictheme-source.lagoon.salsa.hosting/) +- [Government](https://nginx-php.content-government.civictheme-source.lagoon.salsa.hosting/) +- [Higher Education](https://nginx-php.content-highereducation.civictheme-source.lagoon.salsa.hosting/) ## More about CivicTheme diff --git a/behat.yml b/behat.yml index c7f3e944b..b140a969d 100644 --- a/behat.yml +++ b/behat.yml @@ -1,22 +1,26 @@ default: - autoload: [ '%paths.base%/tests/behat/bootstrap' ] + autoload: ['%paths.base%/tests/behat/bootstrap'] gherkin: # Disable caching during development. It is enabled for profiles below. cache: ~ filters: - # By default, run tests shared between D9 and D10 (not specific to only - # D9 or D10), not requiring a Drupal sub-theme and not being skipped. - tags: '~@d9only&&~@d10only&&~@subtheme&&~@skipped' + # Allow skipping tests by tagging them with "@skipped". + tags: '~@skipped' suites: default: - paths: [ '%paths.base%/tests/behat/features' ] + paths: ['%paths.base%/tests/behat/features'] contexts: - FeatureContext - Drupal\DrupalExtension\Context\MinkContext - Drupal\DrupalExtension\Context\MarkupContext - Drupal\DrupalExtension\Context\MessageContext - - Drupal\DrupalExtension\Context\DrushContext - DrevOps\BehatScreenshotExtension\Context\ScreenshotContext + formatters: + progress_fail: true + # Disable JUnit formatter if memory leaks start to occur. + # See @https://github.com/Behat/Behat/pull/1423 + junit: + output_path: '%paths.base%/.logs/test_results/behat' extensions: Drupal\MinkExtension: @@ -33,38 +37,40 @@ default: api_driver: drupal drush_driver: drush drupal: - drupal_root: docroot + drupal_root: web drush: - root: docroot + root: web selectors: message_selector: '.messages' error_message_selector: '.messages.error' success_message_selector: '.messages.status' warning_message_selector: '.messages.warning' - # Allows to capture HTML and JPG screenshots (based on the driver used). + # Capture HTML and JPG screenshots on demand and on failure. DrevOps\BehatScreenshotExtension: - dir: '%paths.base%/tests/behat/screenshots' + dir: '%paths.base%/.logs/screenshots' + purge: false # Change to 'true' (no quotes) to purge screenshots on each run. # Show explicit fail information and continue the test run. DrevOps\BehatFormatProgressFail\FormatExtension: ~ -# Default profile for parallel run with index 0. -default0: +# Profile for parallel testing. +# Runs all tests not tagged with "smoke" or "@p1" and not tagged with "@skipped". +p0: gherkin: + cache: '/tmp/behat_gherkin_cache' filters: - tags: '~@subtheme&&~@skipped&&~@p1' -# Default profile for parallel run with index 1. -default1: - gherkin: - filters: - tags: '~@subtheme&&~@skipped&&@p1' + tags: "@smoke,~@p1&&~@skipped&&~@subtheme" -# Drupal 9 sub-theme profile for parallel run with index 0. -subtheme0: +# Profile for parallel testing. +# Runs all tests tagged with "@smoke" or "@p1" and not tagged with "@skipped". +p1: gherkin: + cache: '/tmp/behat_gherkin_cache' filters: - tags: '~@skipped&&~@p1' -# Drupal 9 sub-theme profile for parallel run with index 1. -subtheme1: + tags: "@smoke,@p1&&~@skipped&&~@subtheme" + +# Profile for smoke ttesting. +smoke: gherkin: + cache: '/tmp/behat_gherkin_cache' filters: - tags: '~@skipped&&@p1' + tags: "@smoke&&~@skipped&&~@subtheme" diff --git a/composer.json b/composer.json index c3f135d0c..b865d033a 100644 --- a/composer.json +++ b/composer.json @@ -1,10 +1,10 @@ { "name": "salsadigitalauorg/civictheme_source", - "description": "Drupal 9 implementation of CivicTheme Source for Salsa Digital", + "description": "Drupal 10 implementation of CivicTheme Source for Salsa Digital", "license": "proprietary", "require": { "php": ">=8.1", - "composer/installers": "^2", + "composer/installers": "^2.1", "cweagans/composer-patches": "^1.7", "drupal/core": "^10", "drupal/core-composer-scaffold": "^10", @@ -20,20 +20,20 @@ "wikimedia/composer-merge-plugin": "^2.0" }, "require-dev": { - "behat/behat": "^3.7", + "behat/behat": "^3.10", "dealerdirect/phpcodesniffer-composer-installer": "^0.7", "drevops/behat-format-progress-fail": "^1", "drevops/behat-screenshot": "^1", "drevops/behat-steps": "^2", - "drupal/coder": "8.3.16", "drupal/core-dev": "^10", "drupal/drupal-extension": "^5@rc", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpcompatibility/php-compatibility": "^9.0", - "phpmd/phpmd": "^2.12", - "phpspec/prophecy-phpunit": "^2", - "pyrech/composer-changelogs": "^1.7", - "slevomat/coding-standard": "7.2.1" + "friendsoftwig/twigcs": "^6.2", + "mglaman/phpstan-drupal": "^1.1", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcompatibility/php-compatibility": "^9.3", + "phpmd/phpmd": "^2.13", + "phpspec/prophecy-phpunit": "^2.0", + "pyrech/composer-changelogs": "^1.8" }, "autoload": { "classmap": [ @@ -42,26 +42,25 @@ }, "autoload-dev": { "classmap": [ - "tests/phpunit/unit" + "tests/phpunit/" ] }, "config": { "platform": { - "php": "8.1" + "php": "8.1.0" }, "process-timeout": 0, "sort-packages": true, "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true, "composer/installers": true, "cweagans/composer-patches": true, + "dealerdirect/phpcodesniffer-composer-installer": true, "drupal/console-extend-plugin": true, "drupal/core-composer-scaffold": true, "drupal/core-project-message": true, "oomphinc/composer-installers-extender": true, - "pyrech/composer-changelogs": true, - "zaporylie/composer-drupal-optimizations": true, "phpstan/extension-installer": true, + "pyrech/composer-changelogs": true, "wikimedia/composer-merge-plugin": true } }, @@ -98,12 +97,10 @@ "DrupalProject\\composer\\ScriptHandler::checkComposerVersion" ], "post-install-cmd": [ - "DrupalProject\\composer\\ScriptHandler::createRequiredFiles", - "Utilities\\composer\\DrupalSettings::create" + "DrupalProject\\composer\\ScriptHandler::createRequiredFiles" ], "post-update-cmd": [ - "DrupalProject\\composer\\ScriptHandler::createRequiredFiles", - "Utilities\\composer\\DrupalSettings::create" + "DrupalProject\\composer\\ScriptHandler::createRequiredFiles" ] }, "minimum-stability": "dev", @@ -120,18 +117,16 @@ }, "drupal-scaffold": { "locations": { - "web-root": "./docroot" + "web-root": "./web" }, "file-mapping": { "[project-root]/.editorconfig": false, "[project-root]/.gitattributes": false, - "[web-root]/.ht.router.php": false, "[web-root]/.htaccess": false, + "[web-root]/.ht.router.php": false, + "[web-root]/example.gitignore": false, "[web-root]/INSTALL.txt": false, "[web-root]/README.txt": false, - "[web-root]/example.gitignore": false, - "[web-root]/sites/default/default.services.yml": false, - "[web-root]/sites/default/default.settings.php": false, "[web-root]/sites/example.settings.local.php": false, "[web-root]/sites/example.sites.php": false, "[web-root]/web.config": false @@ -139,54 +134,61 @@ }, "enable-patching": true, "installer-paths": { - "docroot/core": [ + "web/core": [ "type:drupal-core" ], - "docroot/libraries/{$name}": [ + "web/libraries/{$name}": [ "type:drupal-library", "type:bower-asset", "type:npm-asset" ], - "docroot/modules/contrib/{$name}": [ + "web/modules/contrib/{$name}": [ "type:drupal-module" ], - "docroot/profiles/contrib/{$name}": [ + "web/profiles/contrib/{$name}": [ "type:drupal-profile" ], - "docroot/themes/contrib/{$name}": [ + "web/themes/contrib/{$name}": [ "type:drupal-theme" ], "drush/Commands/contrib/{$name}": [ "type:drupal-drush" + ], + "web/modules/custom/{$name}": [ + "type:drupal-custom-module" + ], + "web/themes/custom/{$name}": [ + "type:drupal-custom-theme" ] }, "installer-types": [ "bower-asset", - "npm-asset" + "npm-asset", + "drupal-library" ], "preserve-paths": [ - "docroot/modules/custom", - "docroot/themes/custom", - "docroot/themes/contrib/civictheme", - "docroot/drush", - "docroot/sites/default/settings.php", - "docroot/sites/default/services.yml", - "docroot/sites/default/default.settings.local.php", - "docroot/sites/default/default.services.local.yml", - "docroot/sites/default/settings.local.php", - "docroot/sites/default/services.local.yml", - "docroot/sites/default/files", - "docroot/robots.txt", - "docroot/.htaccess" + "web/modules/custom", + "web/themes/custom", + "web/themes/contrib/civictheme", + "web/drush", + "web/sites/default/settings.php", + "web/sites/default/services.yml", + "web/sites/default/default.settings.local.php", + "web/sites/default/default.services.local.yml", + "web/sites/default/settings.local.php", + "web/sites/default/services.local.yml", + "web/sites/default/files", + "web/robots.txt", + "web/.htaccess" ], "merge-plugin": { "require": [ - "docroot/themes/contrib/civictheme/composer.json", - "docroot/modules/custom/civictheme_govcms/composer.json", - "docroot/modules/custom/civictheme_admin/composer.json", - "docroot/modules/custom/civictheme_content/composer.json", - "docroot/modules/custom/civictheme_dev/composer.json", - "docroot/modules/custom/cs_generated_content/composer.json" + "web/themes/contrib/civictheme/composer.json", + "web/modules/custom/civictheme_govcms/composer.json", + "web/modules/custom/civictheme_admin/composer.json", + "web/modules/custom/civictheme_content/composer.json", + "web/modules/custom/civictheme_dev/composer.json", + "web/modules/custom/cs_generated_content/composer.json" ], "recurse": true, "replace": false, diff --git a/composer.lock b/composer.lock index 3e32d54fa..33bd66ae7 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2c14ea395008b40c97e038d2d406f909", + "content-hash": "8544cd69d35924eab203a25674e31a20", "packages": [ { "name": "asm89/stack-cors", @@ -17161,30 +17161,30 @@ }, { "name": "drupal/coder", - "version": "8.3.16", + "version": "8.3.22", "source": { "type": "git", "url": "https://github.com/pfrenssen/coder.git", - "reference": "d6f6112e5e84ff4f6baaada223c93dadbd6d3887" + "reference": "ba6e62303d567863275fb086941f50a06dc7d08f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pfrenssen/coder/zipball/d6f6112e5e84ff4f6baaada223c93dadbd6d3887", - "reference": "d6f6112e5e84ff4f6baaada223c93dadbd6d3887", + "url": "https://api.github.com/repos/pfrenssen/coder/zipball/ba6e62303d567863275fb086941f50a06dc7d08f", + "reference": "ba6e62303d567863275fb086941f50a06dc7d08f", "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1 || ^1.0.0", "ext-mbstring": "*", - "php": ">=7.1", + "php": ">=7.2", "sirbrillig/phpcs-variable-analysis": "^2.11.7", - "slevomat/coding-standard": "^7.0 || ^8.0", + "slevomat/coding-standard": "^8.11", "squizlabs/php_codesniffer": "^3.7.1", "symfony/yaml": ">=3.4.0" }, "require-dev": { "phpstan/phpstan": "^1.7.12", - "phpunit/phpunit": "^7.0 || ^8.0" + "phpunit/phpunit": "^8.0" }, "type": "phpcodesniffer-standard", "autoload": { @@ -17208,7 +17208,7 @@ "issues": "https://www.drupal.org/project/issues/coder", "source": "https://www.drupal.org/project/coder" }, - "time": "2022-08-20T17:31:46+00:00" + "time": "2023-10-15T09:55:50+00:00" }, { "name": "drupal/core-dev", @@ -17512,6 +17512,61 @@ }, "time": "2023-10-03T13:15:12+00:00" }, + { + "name": "friendsoftwig/twigcs", + "version": "6.2.0", + "source": { + "type": "git", + "url": "https://github.com/friendsoftwig/twigcs.git", + "reference": "da697cc1bf6bf22feb1d8dbefcbdb1451e6a35f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/friendsoftwig/twigcs/zipball/da697cc1bf6bf22feb1d8dbefcbdb1451e6a35f6", + "reference": "da697cc1bf6bf22feb1d8dbefcbdb1451e6a35f6", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "symfony/console": "^4.4 || ^5.3 || ^6.0", + "symfony/filesystem": "^4.4 || ^5.3 || ^6.0", + "symfony/finder": "^4.4 || ^5.3 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.27", + "symfony/phpunit-bridge": "^6.2.3" + }, + "bin": [ + "bin/twigcs" + ], + "type": "library", + "autoload": { + "psr-4": { + "FriendsOfTwig\\Twigcs\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tristan Maindron", + "email": "tmaindron@gmail.com" + } + ], + "description": "Checkstyle automation for Twig", + "support": { + "issues": "https://github.com/friendsoftwig/twigcs/issues", + "source": "https://github.com/friendsoftwig/twigcs/tree/6.2.0" + }, + "time": "2023-01-13T16:02:00+00:00" + }, { "name": "instaclick/php-webdriver", "version": "1.4.16", @@ -20459,42 +20514,42 @@ }, { "name": "slevomat/coding-standard", - "version": "7.2.1", + "version": "8.14.1", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "aff06ae7a84e4534bf6f821dc982a93a5d477c90" + "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/aff06ae7a84e4534bf6f821dc982a93a5d477c90", - "reference": "aff06ae7a84e4534bf6f821dc982a93a5d477c90", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/fea1fd6f137cc84f9cba0ae30d549615dbc6a926", + "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926", "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", "php": "^7.2 || ^8.0", - "phpstan/phpdoc-parser": "^1.5.1", - "squizlabs/php_codesniffer": "^3.6.2" + "phpstan/phpdoc-parser": "^1.23.1", + "squizlabs/php_codesniffer": "^3.7.1" }, "require-dev": { - "phing/phing": "2.17.3", + "phing/phing": "2.17.4", "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.4.10|1.7.1", - "phpstan/phpstan-deprecation-rules": "1.0.0", - "phpstan/phpstan-phpunit": "1.0.0|1.1.1", - "phpstan/phpstan-strict-rules": "1.2.3", - "phpunit/phpunit": "7.5.20|8.5.21|9.5.20" + "phpstan/phpstan": "1.10.37", + "phpstan/phpstan-deprecation-rules": "1.1.4", + "phpstan/phpstan-phpunit": "1.3.14", + "phpstan/phpstan-strict-rules": "1.5.1", + "phpunit/phpunit": "8.5.21|9.6.8|10.3.5" }, "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-master": "7.x-dev" + "dev-master": "8.x-dev" } }, "autoload": { "psr-4": { - "SlevomatCodingStandard\\": "SlevomatCodingStandard" + "SlevomatCodingStandard\\": "SlevomatCodingStandard/" } }, "notification-url": "https://packagist.org/downloads/", @@ -20502,9 +20557,13 @@ "MIT" ], "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "keywords": [ + "dev", + "phpcs" + ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/7.2.1" + "source": "https://github.com/slevomat/coding-standard/tree/8.14.1" }, "funding": [ { @@ -20516,7 +20575,7 @@ "type": "tidelift" } ], - "time": "2022-05-25T10:58:12+00:00" + "time": "2023-10-08T07:28:08+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -21362,7 +21421,7 @@ }, "platform-dev": [], "platform-overrides": { - "php": "8.1" + "php": "8.1.0" }, "plugin-api-version": "2.6.0" } diff --git a/config/default/.htaccess b/config/default/.htaccess new file mode 100644 index 000000000..d43687965 --- /dev/null +++ b/config/default/.htaccess @@ -0,0 +1,27 @@ +# Deny all requests from Apache 2.4+. + + Require all denied + + +# Deny all requests from Apache 2.0-2.2. + + Deny from all + + +# Turn off all options we don't need. +Options -Indexes -ExecCGI -Includes -MultiViews + +# Set the catch-all handler to prevent scripts from being executed. +SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 + + # Override the handler again if we're run later in the evaluation list. + SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003 + + +# If we know how to do it safely, disable the PHP engine entirely. + + php_flag engine off + + + php_flag engine off + \ No newline at end of file diff --git a/default.ahoy.local.yml b/default.ahoy.local.yml deleted file mode 100644 index 74a36f765..000000000 --- a/default.ahoy.local.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -ahoyapi: v2 -usage: Project specific ahoy commands. - -commands: - help: - cmd: | - echo "==> Custom local commands" - echo "You may add custom local commands to your toolchain. This local Ahoy file will not be committed to the repository" - echo diff --git a/default.env.local b/default.env.local deleted file mode 100644 index 37b50f332..000000000 --- a/default.env.local +++ /dev/null @@ -1,16 +0,0 @@ -## -# Local environment variables usually used for secrets and local adjustments. -# -# Copy this file to .env.local and set relevant values. -# .env.local is excluded from the repository, -# -# @see https://docs.drevops.com/variables/ - -# Print debug information in DrevOps scripts. -# DREVOPS_DEBUG=1 - -# Print debug information from Docker build. -# DREVOPS_DOCKER_VERBOSE=1 - -# Suppress Ahoy prompts. -# DREVOPS_AHOY_CONFIRM_RESPONSE=y diff --git a/default.docker-compose.override.yml b/docker-compose.override.default.yml similarity index 100% rename from default.docker-compose.override.yml rename to docker-compose.override.default.yml diff --git a/docker-compose.yml b/docker-compose.yml index 329b5fc0e..12bc6c5b6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,14 @@ # Docker Compose configuration file. # # - Using a single file to work in local, CI and production environments. -# - Local overrides are possible using docker-composer.override.yml file. +# - Local overrides are possible using docker-compose.override.yml file. # - Environment variables are read from .env file. +# - Containers will be named after the project directory. # - Use inline comments containing '###' to have the line removed in CI. # - Use inline comments starting with '##' to have the line being automatically # uncommented in CI. # See more about DrevOps Docker at https://docs.drevops.com/docker/ - -version: '2.3' +# For YAML support of anchors and references, see http://blog.daemonl.com/2016/02/yaml.html # ------------------------------------------------------------------------------ # Variable aliases. @@ -21,10 +21,10 @@ x-volumes: &default-volumes # All application files mounted into container. - .:/app:${VOLUME_FLAGS:-delegated} ### Local overrides to mount host filesystem. Automatically removed in CI and PROD. # Override mount for files to allow different type of syncing to optimise performance. - - ./docroot/sites/default/files:/app/docroot/sites/default/files:${VOLUME_FLAGS:-delegated} ### Local overrides to mount host filesystem. Automatically removed in CI and PROD. + - ./web/sites/default/files:/app/web/sites/default/files:${VOLUME_FLAGS:-delegated} ### Local overrides to mount host filesystem. Automatically removed in CI and PROD. # Use the same volumes in environments without host mounts support. ##- app:/app # Override for environment without host mounts. Automatically uncommented in CI. - ##- files:/app/docroot/sites/default/files # Override for environment without host mounts. Automatically uncommented in CI. + ##- files:/app/web/sites/default/files # Override for environment without host mounts. Automatically uncommented in CI. # The default user under which the containers should run. x-user: &default-user @@ -34,27 +34,32 @@ x-user: &default-user # Environment variables set in all containers during build and runtime. # Note that these variables are not read from here in Lagoon environment. x-environment: &default-environment - # Project name. Defaults to Docker Compose project name (which defaults to the current directory). - DREVOPS_PROJECT: ${DREVOPS_PROJECT:-example_site} - # Local development URL used in Lagoon images. - LAGOON_LOCALDEV_URL: &default-url ${DREVOPS_LOCALDEV_URL:-example-site.docker.amazee.io} - # Local route used in Lagoon images and Pygmy to route requests. + TZ: ${DREVOPS_TZ:-Australia/Melbourne} + # Local development URL. + DREVOPS_LOCALDEV_URL: &default-url ${COMPOSE_PROJECT_NAME:-example-site}.docker.amazee.io + # Local development route used in Lagoon images and Pygmy to route requests. LAGOON_ROUTE: *default-url - # Enable XDebug with "ahoy debug" or "XDEBUG_ENABLE=true docker-compose up -d". + # Local database host (not used in production). + MARIADB_HOST: mariadb + # Local database name (not used in production). + MARIADB_DATABASE: drupal + # Local database user (not used in production). + MARIADB_USERNAME: drupal + # Local database password (not used in production). + MARIADB_PASSWORD: drupal + # Local database port (not used in production). + MARIADB_PORT: 3306 + # Pass-through 'XDEBUG_ENABLE' to enable XDebug with "ahoy debug" or "XDEBUG_ENABLE=true docker compose up -d". XDEBUG_ENABLE: ${XDEBUG_ENABLE:-} - # Pass-through $CI variable used to identify the CI environment. + # Pass-through 'CI' variable used to identify the CI environment. CI: ${CI:-} - # Uncomment below if emails are not being received by Mailhog locally. + # Forward emails to Mailhog locally. SSMTP_MAILHUB: ${SSMTP_MAILHUB:-host.docker.internal:1025} # Drupal Shield credentials. DRUPAL_SHIELD_USER: ${DRUPAL_SHIELD_USER:-} DRUPAL_SHIELD_PASS: ${DRUPAL_SHIELD_PASS:-} - # Global project name for Lagoon. - LAGOON_PROJECT: ${LAGOON_PROJECT:-example_site} # Lagoon environment type. LAGOON_ENVIRONMENT_TYPE: ${LAGOON_ENVIRONMENT_TYPE:-local} - GITHUB_TOKEN: ${GITHUB_TOKEN:-} - COMPOSER: ${COMPOSER:-} # ------------------------------------------------------------------------------ # Services. @@ -65,11 +70,11 @@ services: cli: build: context: . - dockerfile: .docker/Dockerfile.cli + dockerfile: .docker/cli.dockerfile args: + WEBROOT: "${DREVOPS_WEBROOT:-web}" GITHUB_TOKEN: "${GITHUB_TOKEN:-}" - COMPOSER: "${COMPOSER:-}" - image: &cli-image ${DREVOPS_PROJECT:-example_site}-cli + image: &cli-image ${COMPOSE_PROJECT_NAME:-example_site} <<: *default-volumes user: root environment: @@ -78,18 +83,19 @@ services: volumes_from: ### Local overrides to mount host SSH keys. Automatically removed in CI. - container:amazeeio-ssh-agent ### Local overrides to mount host SSH keys. Automatically removed in CI. ports: - - "35729" # Livereload port in container. Find port on host with `ahoy info` or `docker-compose port cli 35729`. + - "35729" # Livereload port in container. Find port on host with `ahoy info` or `docker compose port cli 35729`. labels: lagoon.type: cli-persistent # See https://docs.lagoon.sh/using-lagoon-advanced/service-types/ lagoon.persistent.name: &lagoon-nginx-name nginx-php # Mount the persistent storage of nginx-php pod into this container. - lagoon.persistent: &lagoon-drupal-files /app/docroot/sites/default/files/ # Location where the persistent storage should be mounted. + lagoon.persistent: &lagoon-persistent-files /app/web/sites/default/files/ # Location where the persistent storage should be mounted. nginx: build: context: . - dockerfile: .docker/Dockerfile.nginx-drupal + dockerfile: .docker/nginx-drupal.dockerfile args: CLI_IMAGE: *cli-image + WEBROOT: "${DREVOPS_WEBROOT:-web}" <<: [*default-volumes, *default-user] environment: <<: *default-environment @@ -101,14 +107,14 @@ services: labels: lagoon.type: nginx-php-persistent # See https://docs.lagoon.sh/using-lagoon-advanced/service-types/ lagoon.name: *lagoon-nginx-name - lagoon.persistent: *lagoon-drupal-files + lagoon.persistent: *lagoon-persistent-files lagoon.persistent.class: slow # PHP FPM container. All web requests are going through this container. php: build: context: . - dockerfile: .docker/Dockerfile.php + dockerfile: .docker/php.dockerfile args: CLI_IMAGE: *cli-image <<: [*default-volumes, *default-user] @@ -119,19 +125,20 @@ services: labels: lagoon.type: nginx-php-persistent # See https://docs.lagoon.sh/using-lagoon-advanced/service-types/ lagoon.name: *lagoon-nginx-name - lagoon.persistent: *lagoon-drupal-files + lagoon.persistent: *lagoon-persistent-files lagoon.persistent.class: slow mariadb: build: context: . - dockerfile: .docker/Dockerfile.mariadb + dockerfile: .docker/mariadb.dockerfile args: IMAGE: "${DREVOPS_DB_DOCKER_IMAGE:-uselagoon/mariadb-drupal:23.10.0}" # Use custom database image (if defined) or fallback to standard database image. + <<: *default-user environment: <<: *default-environment ports: - - "3306" # MariaDB port in container. Find port on host with `ahoy info` or `docker-compose port mariadb 3306`. + - "3306" # MariaDB port in container. Find port on host with `ahoy info` or `docker compose port mariadb 3306`. labels: lagoon.type: mariadb # See https://docs.lagoon.sh/using-lagoon-advanced/service-types/ diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..14737fe33 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,7 @@ +# Project-specific documentation. + +- [Onboarding checklist](onboarding.md) +- [Testing](testing.md) +- [CI](ci.md) +- [Releasing](releasing.md) +- [FAQs](faqs.md) diff --git a/docs/ci.md b/docs/ci.md new file mode 100644 index 000000000..7f6ff82a5 --- /dev/null +++ b/docs/ci.md @@ -0,0 +1,24 @@ +# Continuous Integration + +In software engineering, continuous integration (CI) is the practice of merging +all developer working copies to a shared mainline several times a day. +Before feature changes can be merged into a shared mainline, a complete build +must run and pass all tests on CI server. + +This project uses [Circle CI](https://circleci.com/) as a CI server: it imports +production backups into fully built codebase and runs code linting and tests. +When tests pass, a deployment process is triggered for nominated branches +(usually, `master` and `develop`). + +Refer to https://docs.drevops.com/latest/usage/ci for more information. + +## Skipping CI build + +Add `[skip ci]` to the commit subject to skip CI build. Useful for documentation +changes. + +## SSH + +Circle CI supports shell access to the build for 120 minutes after the build is +finished when the build is started with SSH support. Use "Rerun job with SSH" +button in Circle CI UI to start build with SSH support. diff --git a/DEPLOYMENT.md b/docs/deployment.md similarity index 100% rename from DEPLOYMENT.md rename to docs/deployment.md diff --git a/DEVELOPMENT.md b/docs/development.md similarity index 85% rename from DEVELOPMENT.md rename to docs/development.md index 7937ccae1..395ee60ba 100644 --- a/DEVELOPMENT.md +++ b/docs/development.md @@ -42,8 +42,7 @@ By default, the site: Override the default behavior using these environment variables: -- `DREVOPS_DRUPAL_VERSION=10` - Installs the Drupal 10 version. -- `DREVOPS_DRUPAL_PROFILE=minimal` - Uses the `minimal` profile for installation. +- `DRUPAL_PROFILE=minimal` - Uses the `minimal` profile for installation. For Drupal 10, this becomes the enforced default. - `CIVICTHEME_SUBTHEME_ACTIVATION_SKIP=1` - Omits activation of the demo sub-theme. @@ -59,13 +58,9 @@ without full rebuild). Example: ```bash -# Install Drupal 10 site using `minimal` profile with CivicTheme Demo -# sub-theme and provision demo content. -DREVOPS_DRUPAL_VERSION=10 ahoy install-site - -# Install Drupal 10 site using `minimal` profile with CivicTheme. +# Install Drupal site using `minimal` profile with CivicTheme. # Do not create a sub-theme and do not provision demo content. -DREVOPS_DRUPAL_VERSION=10 CIVICTHEME_SUBTHEME_ACTIVATION_SKIP=1 CIVICTHEME_LIBRARY_INSTALL_SKIP=1 CIVICTHEME_GENERATED_CONTENT_CREATE_SKIP=1 ahoy install-site +CIVICTHEME_SUBTHEME_ACTIVATION_SKIP=1 CIVICTHEME_LIBRARY_INSTALL_SKIP=1 CIVICTHEME_GENERATED_CONTENT_CREATE_SKIP=1 ahoy install-site ``` ## Compiling theme assets @@ -75,15 +70,15 @@ To compile all assets in all themes: `ahoy fe` ```bash # UI kit -cd docroot/themes/contrib/civictheme/civictheme_library +cd web/themes/contrib/civictheme/civictheme_library npm run build # CivicTheme Drupal theme -cd docroot/themes/contrib/civictheme +cd web/themes/contrib/civictheme npm run build # CivicTheme Drupal Demo theme -cd docroot/themes/custom/civictheme_demo +cd web/themes/custom/civictheme_demo npm run build ``` @@ -143,7 +138,7 @@ These steps are captured below: ```bash # Step 1: Install a site with the desired content profile. export CIVICTHEME_CONTENT_PROFILE=default -DREVOPS_DRUPAL_PROFILE=minimal CIVICTHEME_SUBTHEME_ACTIVATION_SKIP=1 CIVICTHEME_GENERATED_CONTENT_CREATE_SKIP=1 ahoy install-site +DRUPAL_PROFILE=minimal CIVICTHEME_SUBTHEME_ACTIVATION_SKIP=1 CIVICTHEME_GENERATED_CONTENT_CREATE_SKIP=1 ahoy install-site # Step 2: Make changes. # ... diff --git a/FAQs.md b/docs/faqs.md similarity index 59% rename from FAQs.md rename to docs/faqs.md index 3b79dd6f9..08aa0865a 100644 --- a/FAQs.md +++ b/docs/faqs.md @@ -1,42 +1,51 @@ # FAQs ## How to know which commands are available? -``` + +```bash ahoy help ``` ## How to pass CLI arguments to commands? -``` + +```bash ahoy mycommand -- myarg1 myarg2 --myoption1 --myoption2=myvalue ``` ## How to clear Drupal cache? -``` -ahoy drush -- cr -``` -## How to login to Drupal site? +```bash +ahoy drush cr ``` + +## How to login to a Drupal site? + +```bash ahoy login ``` ## How to connect to the database? + +If you have [Sequel Ace](https://sequel-ace.com/): + +```bash +ahoy db +``` + +Otherwise: + 1. Run `ahoy info` and grab the DB host port number. 2. Use these connection details: - - Host: `127.0.0.1` - - Username: `drupal` - - Password: `drupal` - - Database: `drupal` - - Port: the port from step 1 -## How to run Livereload? -1. If `settings.local.php` does not exist, copy `default.settings.local.php` to `settings.local.php` -2. Set `$settings['livereload'] = TRUE;` in `settings.local.php` file -3. Clear drupal cache `ahoy drush cr` -4. Run: `ahoy few` +- Host: `127.0.0.1` +- Username: `drupal` +- Password: `drupal` +- Database: `drupal` +- Port: the port from step 1 ## How to use Xdebug? -1. Run `ahoy debug` + +1. Run `ahoy debug`. 2. Enable listening for incoming debug connections in your IDE. 3. If required, provide server URL to your IDE as it appears in the browser. 4. Enable Xdebug flag in the request coming from your web browser (use one of @@ -45,46 +54,71 @@ ahoy login Use the same commands to debug CLI scripts. -Use `ahoy up` to restart the stack without Xdebug enabled. +To disable, run `ahoy up`. ## How to use Xdebug on Behat scripts? + 1. Enable debugging: `ahoy debug` 2. Enter CLI container: `ahoy cli` 3. Run Behat tests: - ``` - vendor/bin/behat path/to/test.feature - ``` + +```bash +vendor/bin/behat path/to/test.feature +``` ## What should I do to switch to a "clean" branch environment? + Provided that your stack is already running: + 1. Switch to your branch 2. `composer install` 3. `ahoy site-install` -Note that you do not need to rebuild the full stack using `ahoy build` every time. -However, sometimes you would want to have an absolutely clean environment - in that -case, use `ahoy build`. +Note that you do not need to rebuild the full stack using `ahoy build` every +time. +However, sometimes you would want to have an absolutely clean environment - in +that case, use `ahoy build`. ## How to just import the database? + Provided that your stack is already running: -`ahoy drush sql-drop -y; ahoy drush sql-cli < .data/db.sql` + +```bash +ahoy drush sql-drop -y; +ahoy drush sql-cli < .data/db.sql +``` ## How to add Drupal modules -`composer require drupal/module_name` +```bash +composer require drupal/module_name +``` -## Adding patches for Drupal modules +## How to add patches for Drupal modules -1. Add `title` and `url` to patch on https://drupal.org to the `patches` array in `extra` section in `composer.json`. +1. Add `title` to patch on https://drupal.org to the `patches` array in `extra` + section in `composer.json`. -``` - "extra": { - "patches": { - "drupal/core": { - "Contextual links should not be added inside another link - https://www.drupal.org/node/2898875": "https://www.drupal.org/files/issues/contextual_links_should-2898875-3.patch" - } +```json +"extra": { + "patches": { + "drupal/core": { + "Contextual links should not be added inside another link": "https://www.drupal.org/files/issues/contextual_links_should-2898875-3.patch" } } +} +``` + +2. Run + +```bash +composer update --lock` ``` -2. `composer update --lock` +## How to run Livereload? + +1. If `settings.local.php` does not exist, copy `default.settings.local.php` + to `settings.local.php` +2. Set `$settings['livereload'] = TRUE;` in `settings.local.php` file +3. Clear drupal cache: `ahoy drush cr` +4. Run: `ahoy few` diff --git a/docs/onboarding.md b/docs/onboarding.md new file mode 100644 index 000000000..46efbac4c --- /dev/null +++ b/docs/onboarding.md @@ -0,0 +1,161 @@ +Onboarding checklist +==================== + +Use this checklist to track the process of migration of the existing site +to DrevOps. This file is intended to be committed into repository until +onboarding process is finished. + +Put a `x` into `[ ]` if this step was executed OR not required - this will +indicate that it was addressed. + +-------------------------------------------------------------------------------- + +## 1. Assessing current site + +- [ ] Setup site on local machine using MAMP to bootstrap the project. +- [ ] Install [hacked](https://www.drupal.org/project/hacked) module and extract + a list of all modules with their versions. Add them below: + ``` + Add a list of extracted modules here. + ``` + +- [ ] Find existing patches or create new patches for all "hacked" modules. List + them below: + ``` + ctools: https:/drupal.org/path/to/file.patch + ``` +- [ ] Assess if there are any libraries used in the project, find their + versions together with download URLs, and list them below: + ``` + ckeditor@4.3.2, https://www.ckeditor.com/archive/ckeditor_4.3.2.zip + ``` + +## 2. Adding DrevOps + +- [ ] Create a new GitHub repository, if required: + - [ ] Commit generic `README.md` file and push to `master` branch. + - [ ] Create new branch `ci`, copy all files from existing repository and + push to remote. +- [ ] Add DrevOps configuration using installer script and follow + instructions in `README.md` file added to your project. You will need to + commit some files and push them to remote. Note: try to rely on the + default configuration provided by DrevOps as much as possible + (otherwise you are assuming maintenance responsibility for this custom + code). +- [ ] Using list of **modules** from "Assessing current site" step, update + provided `composer.json` with all required modules and patches. Ensure that + `composer.lock` is updated and committed. +- [ ] Using list of **libraries** from "Assessing current site" step, update + provided `composer.json` with all required libraries and patches. Make + sure that `composer.lock` is updated and committed. +- [ ] Copy values from existing `settings.php` to provided `settings.php` file. + Do not simply copy this file over! Transfer values one-by-one instead. +- [ ] Update values in `settings.php`: + - [ ] Site salt. + - [ ] Origin URL for [stage_file_proxy](https://www.drupal.org/project/stage_file_proxy) + module. + - [ ] Username and password for [shield](https://www.drupal.org/project/shield) module. +- [ ] Copy values from existing `services.yml` to provided `services.yml` file. + Do not simply copy this file over! Transfer values one-by-one instead. +- [ ] Assess existing `robots.txt` file and compare it with provided one. If + they are different - commit existing `robots.txt` file. +- [ ] Assess existing `.htaccess` file and compare it with provided one. If + they are different - commit existing `.htaccess` file. +- [ ] Update values in `.env` to reflect your project requirements. Note that + in most cases no modification is required. +- [ ] Refactor front-end asset generation to use provided `Gruntfile.js`. +- [ ] Setup database download method depending on your requirements. +- [ ] Run `ahoy build` locally and ensure that the site can be bootstrapped + and accessed in the browser. + +## 3. Setting up CI + +- [ ] Login to CircleCI using your GitHub account and add this project. +- [ ] Depending on your database download method, add required private keys + through UI. You will need to update key fingerprint in + [CI configuration file](.circleci/config.yml). +- [ ] Add deployment variables through UI - see comments in + [CI configuration file](.circleci/config.yml). +- [ ] Get the badge code (you may need to create access token in CI - read UI + messages) and paste into your `README.md` file. +- [ ] Run successful build (all jobs must pass). + +## 4. Setting up integrations + + + +- [ ] Configure Lagoon integration: + - [ ] Submit a request to AmazeeIO to create a project. + - [ ] Add your public key to the project. + - [ ] Ensure that you have access to Lagoon: run `ahoy cli` and `drush sa` - + a list of available environments should be shown (at least one + environment). + - [ ] Ensure that you have access to Lagoon UI. + - [ ] + Setup [Slack notifications](https://docs.lagoon.sh/administering-lagoon/graphql-queries/#adding-notifications-to-the-project) + - [ ] Push to remote and ensure that Lagoon was successfully deployed. + + + +- [ ] Configure Renovate by logging in with your GitHub account and + adding a project through UI. + + +## 5. Cleanup + +- [ ] Cleanup code or set `DREVOPS_CI_LINT_ALLOW_FAILURE=1` in CircleCI to + bypass code linting fails: + - [ ] Cleanup PHP code + - [ ] Cleanup JS code + - [ ] Cleanup SCSS code +- [ ] Move custom functionality into `your_module_core` module's relevant + inclusion files. +- [ ] Refactor modules functions to follow + [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself), + [KISS](https://en.wikipedia.org/wiki/KISS_principle) and + [SRP](https://en.wikipedia.org/wiki/Single_responsibility_principle) + principles. +- [ ] Refactor theme functions to follow + [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself), + [KISS](https://en.wikipedia.org/wiki/KISS_principle) and + [SRP](https://en.wikipedia.org/wiki/Single_responsibility_principle) + principles. + +## 6. Validation + +- [ ] Check that installed modules are the same version as initial modules and + fix discrepancies. +- [ ] Check that deployment documentation has correct information. +- [ ] Perform visual regression testing: + - [ ] Deploy a copy of the existing project database and code to a UAT + environment. + - [ ] Deploy a copy of the new project codebase along with the existing + database to another available environment. + - [ ] Add project to visual regression tool and configure exclusions for + animated parts of the website. + - [ ] Run visual regression and fix discrepancies. + +## 7. Deployment + +- [ ] Submit PR and include the contents of this file. +- [ ] Schedule deployment window with the Client and add the information below: + ``` + Deployment approved by Jane Doe (jane.doe@example.com) on 2019/4/27 at 17:00 + via email to take place on 2019/4/29 at 18:30. + ``` +- [ ] Get PR approval (do not merge yet!). You may need to wait for deployment + window before merging (depends on the type of the deployment integration). +- [ ] Merge PR and ensure that CI passed. +- [ ] Create `develop` branch. +- [ ] Create a new release, push to remote and ensure that CI passed. +- [ ] Deploy new release to production. +- [ ] Notify stakeholders about deployment and ask for spot-checking. +- [ ] Receive confirmation that deployment was successful. +- [ ] Set `develop` branch as default in GitHub. +- [ ] Set branch protection in GitHub for `develop` branch. +- [ ] Set branch protection in GitHub for `master` branch. + +-------------------------------------------------------------------------------- + +Only if all boxes above are checked, remove this file from the repository. + diff --git a/RELEASING.md b/docs/releasing.md similarity index 66% rename from RELEASING.md rename to docs/releasing.md index 121417102..614e1791a 100644 --- a/RELEASING.md +++ b/docs/releasing.md @@ -1,24 +1,38 @@ # Releasing -[git-flow](https://danielkummer.github.io/git-flow-cheatsheet/) is used to manage releases. +[git-flow](https://danielkummer.github.io/git-flow-cheatsheet/) is used to +manage releases. + +Note: after completing the release, commits must be manually pushed +from `master` to `production` branch. + +Refer to https://docs.drevops.com/latest/usage/release for more information. ## Release outcome 1. Release branch exists as `release/X.Y.Z` in GitHub repository. 2. Release tag exists as `X.Y.Z` in GitHub repository. 3. The `HEAD` of the `master` branch has `X.Y.Z` tag. -4. The hash of the `HEAD` of the `master` branch exists in the `develop` branch. This is to ensure that everything pushed to `master` exists in `develop` (in case if `master` had any hot-fixes that not yet have been merged to `develop`). +4. The hash of the `HEAD` of the `master` branch exists in the `develop` branch. + This is to ensure that everything pushed to `master` exists in `develop` (in + case if `master` had any hot-fixes that not yet have been merged + to `develop`). 5. There are no PRs in GitHub related to the release. +6. The hash of the `HEAD` of the `production` branch matches the hash of + the `HEAD` of `master` branch. ## Version Number Release versions are numbered according to [Semantic Versioning](https://semver.org/). -Given a version number X.Y.Z: -* X = Major release version. No leading zeroes. -* Y = Minor Release version. No leading zeroes. -* Z = Hotfix/patch version. No leading zeroes. + +Given a version number `X.Y.Z`: + +* `X` = Major release version. No leading zeroes. +* `Y` = Minor Release version. No leading zeroes. +* `Z` = Hotfix/patch version. No leading zeroes. Examples: + * Correct: `0.1.0`, `1.0.0` , `1.0.1` , `1.0.10` * Incorrect: `0.1` , `1` , `1.0` , `1.0.01` , `1.0.010` @@ -37,3 +51,4 @@ Release log of this repository must contain all the changes that were made to all the packages that are published from this repository. Parts of the release log can then be manually copied to the release logs of published repositories. + diff --git a/TESTING.md b/docs/testing.md similarity index 64% rename from TESTING.md rename to docs/testing.md index e0dc52f4f..8e093f784 100644 --- a/TESTING.md +++ b/docs/testing.md @@ -8,6 +8,7 @@ This repository uses different types of tests: 3. Behat tests to test overall end-to-end Drupal site functionality. ### Behat tests + Behat configuration uses multiple extensions: - [Drupal Behat Extension](https://github.com/jhedstrom/drupalextension) - Drupal integration layer. Allows to work with Drupal API from within step definitions. - [Behat Screenshot Extension](https://github.com/integratedexperts/behat-screenshot) - Behat extension and a step definition to create HTML and image screenshots on demand or test fail. @@ -23,7 +24,7 @@ Add `@skipped` tag to failing tests if you would like to skip them. CivicTheme provides configuration for content types, fields and site settings. These can change with versions of the theme. To ensure that the changes are applied correctly in the consumer site's database, we use -[schema update tests](docroot/themes/contrib/civictheme/tests/src/Functional/Update). +[schema update tests](web/themes/contrib/civictheme/tests/src/Functional/Update). These types of tests require a database of the site with the previous version of the module or theme installed to be available to the test. @@ -44,25 +45,25 @@ To update the database dumps: 2. Update "bare" database dump: ```bash export CIVICTHEME_VERSION= # update to your version - export DREVOPS_DRUPAL_VERSION=10 - export DREVOPS_DRUPAL_VERSION_FULL=10.0.0-rc1 - export DREVOPS_DRUPAL_PROFILE=minimal - DREVOPS_DRUPAL_INSTALL_OPERATIONS_SKIP=1 ahoy build - ahoy cli "DREVOPS_DRUPAL_PROFILE=minimal scripts/custom/drupal-install-site-1-enable-modules.sh" - mkdir -p docroot/themes/contrib/civictheme/tests/fixtures/updates - ahoy cli php docroot/core/scripts/dump-database-d8-mysql.php | gzip > "docroot/themes/contrib/civictheme/tests/fixtures/updates/drupal_${DREVOPS_DRUPAL_VERSION_FULL}.${DREVOPS_DRUPAL_PROFILE}.civictheme_${CIVICTHEME_VERSION}.bare.php.gz" + export DRUPAL_VERSION=10 + export DRUPAL_VERSION_FULL=10.0.0-rc1 + export DRUPAL_PROFILE=minimal + DREVOPS_PROVISION_POST_OPERATIONS_SKIP=1 ahoy build + ahoy cli "DRUPAL_PROFILE=minimal scripts/custom/drupal-install-site-1-enable-modules.sh" + mkdir -p web/themes/contrib/civictheme/tests/fixtures/updates + ahoy cli php web/core/scripts/dump-database-d8-mysql.php | gzip > "web/themes/contrib/civictheme/tests/fixtures/updates/drupal_${DRUPAL_VERSION_FULL}.${DRUPAL_PROFILE}.civictheme_${CIVICTHEME_VERSION}.bare.php.gz" ``` 3. Update "filled" database dump: ```bash export CIVICTHEME_VERSION= # update to your version - export DREVOPS_DRUPAL_VERSION=10 - export DREVOPS_DRUPAL_VERSION_FULL=10.0.0-rc1 - export DREVOPS_DRUPAL_PROFILE=minimal - DREVOPS_DRUPAL_INSTALL_OPERATIONS_SKIP=1 ahoy build - ahoy cli "DREVOPS_DRUPAL_PROFILE=minimal scripts/custom/drupal-install-site-1-enable-modules.sh" - ahoy cli "drush php:eval -v \"require_once '/app/docroot/themes/contrib/civictheme/theme-settings.provision.inc'; civictheme_provision_cli();\"" + export DRUPAL_VERSION=10 + export DRUPAL_VERSION_FULL=10.0.0-rc1 + export DRUPAL_PROFILE=minimal + DREVOPS_PROVISION_POST_OPERATIONS_SKIP=1 ahoy build + ahoy cli "DRUPAL_PROFILE=minimal scripts/custom/drupal-install-site-1-enable-modules.sh" + ahoy cli "drush php:eval -v \"require_once '/app/web/themes/contrib/civictheme/theme-settings.provision.inc'; civictheme_provision_cli();\"" ahoy cli "GENERATED_CONTENT_CREATE=1 drush pm:enable cs_generated_content -y" ahoy cli "GENERATED_CONTENT_DELETE_SKIP=1 drush pm:uninstall cs_generated_content generated_content -y" - mkdir -p docroot/themes/contrib/civictheme/tests/fixtures/updates - ahoy cli php docroot/core/scripts/dump-database-d8-mysql.php | gzip > "docroot/themes/contrib/civictheme/tests/fixtures/updates/drupal_${DREVOPS_DRUPAL_VERSION_FULL}.${DREVOPS_DRUPAL_PROFILE}.civictheme_${CIVICTHEME_VERSION}.filled.php.gz" + mkdir -p web/themes/contrib/civictheme/tests/fixtures/updates + ahoy cli php web/core/scripts/dump-database-d8-mysql.php | gzip > "web/themes/contrib/civictheme/tests/fixtures/updates/drupal_${DRUPAL_VERSION_FULL}.${DRUPAL_PROFILE}.civictheme_${CIVICTHEME_VERSION}.filled.php.gz" ``` diff --git a/drush/sites/lagoon.site.yml b/drush/sites/lagoon.site.yml new file mode 100644 index 000000000..412b309e5 --- /dev/null +++ b/drush/sites/lagoon.site.yml @@ -0,0 +1,8 @@ +'*': + host: ssh.lagoon.amazeeio.cloud + paths: + files: /app/web/sites/default/files + user: ${env-name} + ssh: + options: '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=FATAL -p 32222' + tty: false diff --git a/phpcs.xml b/phpcs.xml index c4333ed7c..89ce44334 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -2,19 +2,23 @@ Custom PHPCS Standard, based on Drupal standards. + web/modules/custom + web/themes/custom + web/themes/contrib/civictheme + web/sites/default/settings.php + web/sites/default/includes + tests + - + - - - + @@ -25,22 +29,20 @@ node_modules/* vendor/* - - *\.min\.js - *\.css - *dist\/*\.js - civictheme_library/* storybook-static/* .storybook/* webpack/* + *\.min\.js + *\.css + *dist\/*\.js civictheme/build/* - docroot\/modules\/custom\/cs_generated_content\/generated_content\/node\/civictheme_page_variations\/.* + web\/modules\/custom\/cs_generated_content\/generated_content\/node\/civictheme_page_variations\/.* @@ -57,6 +59,25 @@ warning + + + *.Test\.php + *.TestCase\.php + *.test + + + + + *.Test\.php + *.TestCase\.php + *.test + + + + + *\/tests\/behat\/bootstrap/*\.php + + diff --git a/phpmd.xml b/phpmd.xml new file mode 100644 index 000000000..daff74c27 --- /dev/null +++ b/phpmd.xml @@ -0,0 +1,28 @@ + + + + */vendor/* + */node_modules/* + + */web/core/* + */web/profiles/contrib/* + */web/modules/contrib/* + */web/sites/* + */scripts/* + */tests/*Test.php + + + + + + + + + + + + diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 000000000..c1aa12bcc --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,54 @@ +## +# Configuration file for PHPStan static code checking, see https://phpstan.org . +# +# Note that drupal-specific rules are automatically included by phpstan/extension-installer +# from vendor/mglaman/phpstan-drupal/extension.neon and vendor/mglaman/phpstan-drupal/rules.neon +# @see https://github.com/mglaman/phpstan-drupal +# +# Paths are passed as CLI arguments. + +parameters: + + level: 7 + + paths: + - web/modules/custom + - web/themes/custom + - web/themes/contrib/civictheme + - web/sites/default/settings.php + - web/sites/default/includes + - tests + + excludePaths: + - vendor/* + - node_modules/* + - ../*/vendor/* + - ../*/node_modules/* + + drupal: + drupal_root: web + + ignoreErrors: + - + # Since tests and data providers do not have to have parameter docblocks, + # it is not possible to specify the type of the parameter, so we ignore + # this error. + message: '#.*no value type specified in iterable type array.#' + paths: + - web/modules/custom/*/tests/* + - web/themes/custom/*/tests/* + - web/themes/contrib/civictheme/*/tests/* + - tests/phpunit/* + - + # Hook implementations do not provide docblocks for parameters, so there + # is no way to provide this information. + message: '#.* with no value type specified in iterable type array#' + paths: + - web/modules/custom/* + - web/themes/custom/* + - web/themes/contrib/civictheme/* + - + # Included settings files are not aware about global variables. + message: '#Variable .* might not be defined.#' + paths: + - web/sites/default/includes diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 000000000..173ce99ba --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + tests/phpunit + web/modules/custom/*/tests/src/Unit + web/themes/custom/*/tests/src/Unit + web/themes/contrib/civictheme/*/tests/src/Unit + + + web/modules/custom/*/tests/src/Kernel + web/themes/custom/*/tests/src/Kernel + web/themes/contrib/civictheme/*/tests/src/Kernel + + + web/modules/custom/*/tests/src/Functional + web/themes/custom/*/tests/src/Functional + web/themes/contrib/civictheme/*/tests/src/Functional + + + + + + + + + + + + + + + web/modules/custom + web/themes/custom + web/themes/contrib/civictheme + web/sites/default/includes + web/sites/default/settings.php + + + + + + + + diff --git a/renovate.json b/renovate.json index d8955694c..5844d5251 100644 --- a/renovate.json +++ b/renovate.json @@ -44,13 +44,26 @@ ] }, { - "groupName": "Docker image updates", + "groupName": "Docker images excluded", + "matchManagers": ["dockerfile", "docker-compose"], + "matchPackageNames": [ + "selenium/standalone-chrome", + "seleniarm/standalone-chromium" + ], + "enabled": false + }, + { + "groupName": "Docker images", "groupSlug": "docker", "schedule": ["before 3am"], - "matchManagers": ["dockerfile", "docker-compose"] + "matchManagers": ["dockerfile", "docker-compose"], + "excludePackageNames": [ + "selenium/standalone-chrome", + "seleniarm/standalone-chromium" + ] }, { - "groupName": "GitHub Actions updates", + "groupName": "GitHub Actions", "groupSlug": "github-actions", "schedule": ["before 3am"], "matchManagers": ["github-actions"] diff --git a/scripts/.aspell.en.pws b/scripts/.aspell.en.pws index eacff57c5..b88391dd7 100644 --- a/scripts/.aspell.en.pws +++ b/scripts/.aspell.en.pws @@ -32,8 +32,8 @@ DevOps DIDI DIF Docksal -docroot -docroot +web +web DREVOPS DrevOps Drupal diff --git a/scripts/composer/DrupalSettings.php b/scripts/composer/DrupalSettings.php deleted file mode 100644 index 6bbe95b26..000000000 --- a/scripts/composer/DrupalSettings.php +++ /dev/null @@ -1,249 +0,0 @@ -locateRoot(getcwd()); - $drupalRoot = $drupalFinder->getDrupalRoot(); - - $standard_settings_file = $drupalRoot . '/sites/' . $site . '/settings.php'; - $generated_settings_file_name = 'settings.generated.php'; - - $defaults = [ - 'mysql_database' => 'drupal', - 'mysql_user' => 'drupal', - 'mysql_password' => 'drupal', - 'mysql_host' => 'localhost', - 'mysql_port' => '', - 'mysql_prefix' => '', - 'settings_path' => $drupalRoot . '/sites/' . $site . '/' . $generated_settings_file_name, - ]; - - $options = $defaultsArg - + self::extractEnvironmentVariables(array_keys($defaults)) - + self::extractCliOptions($event->getArguments(), array_keys($defaults)) - + $defaults; - - if (!$fs->exists($options['settings_path'])) { - $content = self::getDefaultDrupalSettingsContent($options); - $fs->dumpFile($options['settings_path'], $content); - $fs->chmod($options['settings_path'], 0644); - $event->getIO()->write(sprintf('Created file %s with', $options['settings_path'])); - } - else { - $event->getIO()->write(sprintf('Skipping creation of Drupal settings file "%s" - file already exists', $options['settings_path'])); - } - - // Add inclusion of this file to standard settings file if it exists and - // such inclusion has not been added previously. - if ($fs->exists($options['settings_path']) && $fs->exists($standard_settings_file)) { - if (strpos(file_get_contents($standard_settings_file), $generated_settings_file_name) === FALSE) { - $string = <<getIO()->write(sprintf('Added inclusion of generated settings file %s to %s', $generated_settings_file_name, $standard_settings_file)); - } - else { - $event->getIO()->write(sprintf('Skipped inclusion of generated settings file %s to %s - inclusion already present', $generated_settings_file_name, $standard_settings_file)); - } - } - } - - /** - * Delete Drupal settings file. - */ - public static function delete(Event $event, $site = 'default') { - $defaults = [ - 'settings_path' => 'docroot/sites/' . $site . '/settings.generated.php', - ]; - - $options = self::extractEnvironmentVariables(array_keys($defaults)) - + self::extractCliOptions($event->getArguments(), array_keys($defaults)) - + $defaults; - - $fs = new Filesystem(); - if (!$fs->exists($options['settings_path'])) { - $event->getIO()->write('Skipping deletion of Drupal settings file - file does not exists'); - } - else { - $fs->remove($options['settings_path']); - $event->getIO()->write(sprintf('Deleted file %s', $options['settings_path'])); - } - } - - /** - * Create multiple settings files for multi-site installation. - */ - public static function createMultiple(Event $event) { - $fs = new Filesystem(); - $drupalFinder = new DrupalFinder(); - $drupalFinder->locateRoot(getcwd()); - $drupalRoot = $drupalFinder->getDrupalRoot(); - - $sitesFile = $drupalRoot . '/sites/sites.php'; - if (!$fs->exists($sitesFile)) { - $event->getIO()->writeError('' . $sitesFile . ' file does not exist, but required for multi-site installations'); - } - - require_once $sitesFile; - if (!isset($sites)) { - $event->getIO()->writeError('' . $sitesFile . ' file does not contain any records about sites'); - exit(1); - } - - $sites = array_unique(array_values($sites)); - $host = self::extractEnvironmentVariables(['mysql_host']) - + self::extractCliOptions($event->getArguments(), ['mysql_host']); - $host = reset($host); - - if (empty($host)) { - $event->getIO()->writeError('MYSQL_HOST is not set'); - exit(1); - } - - foreach ($sites as $k => $site) { - self::create($event, $site, [ - 'mysql_host' => $host . ($k + 1), - ]); - } - } - - /** - * Return content for default Drupal settings file. - */ - protected static function getDefaultDrupalSettingsContent($options) { - return << - [ - 'default' => - [ - 'database' => getenv('MARIADB_DATABASE') ?: (getenv('DREVOPS_MARIADB_DATABASE') ?: '{$options['mysql_database']}'), - 'username' => getenv('MARIADB_USERNAME') ?: (getenv('DREVOPS_MARIADB_USERNAME') ?: '{$options['mysql_user']}'), - 'password' => getenv('MARIADB_PASSWORD') ?: (getenv('DREVOPS_MARIADB_PASSWORD') ?: '{$options['mysql_password']}'), - 'host' => getenv('MARIADB_HOST') ?: (getenv('DREVOPS_MARIADB_HOST') ?: '{$options['mysql_host']}'), - 'port' => getenv('MARIADB_PORT') ?: (getenv('DREVOPS_MARIADB_PORT') ?: '{$options['mysql_port']}'), - 'driver' => 'mysql', - 'prefix' => '{$options['mysql_prefix']}', - ], - ], -]; -FILE; - } - - /** - * Extract options from environment variables. - * - * @param bool|array $allowed - * Array of allowed options. - * - * @return array - * Array of extracted options. - */ - protected static function extractEnvironmentVariables(array $allowed) { - $options = []; - - $dotenv = Dotenv::createImmutable(__DIR__ . '/../..'); - $dotenv->load(); - - foreach ($allowed as $name) { - $value = getenv(strtoupper($name)); - if ($value !== FALSE) { - $options[$name] = $value; - } - } - - return $options; - } - - /** - * Extract options from CLI arguments. - * - * @param array $arguments - * Array of arguments. - * @param bool|array $allowed - * Array of allowed options. - * - * @return array - * Array of extracted options. - */ - protected static function extractCliOptions(array $arguments, array $allowed) { - $options = []; - - foreach ($arguments as $argument) { - if (strpos($argument, '--') === 0) { - list($name, $value) = explode('=', $argument); - $name = substr($name, strlen('--')); - $options[$name] = $value; - if (array_key_exists($name, $allowed) && !is_null($value)) { - $options[$name] = $value; - } - } - } - - return $options; - } - - /** - * Appends content to an existing file. - * - * Polyfill for older versions of Filesystem shipped with Composer phar. - * - * @param string $filename - * The file to which to append content. - * @param string $content - * The content to append. - * - * @throws \Symfony\Component\Filesystem\Exception\IOException - * If the file is not writable. - */ - protected static function appendToFile($filename, $content) { - $fs = new Filesystem(); - - $dir = \dirname($filename); - - if (!is_dir($dir)) { - $fs->mkdir($dir); - } - - if (!is_writable($dir)) { - throw new IOException(sprintf('Unable to write to the "%s" directory.', $dir), 0, NULL, $dir); - } - - if (FALSE === @file_put_contents($filename, $content, FILE_APPEND)) { - throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, NULL, $filename); - } - } - -} diff --git a/scripts/composer/ScriptHandler.php b/scripts/composer/ScriptHandler.php index 93516e978..474561736 100644 --- a/scripts/composer/ScriptHandler.php +++ b/scripts/composer/ScriptHandler.php @@ -1,88 +1,73 @@ locateRoot(getcwd()); $drupalRoot = $drupalFinder->getDrupalRoot(); - if (!$drupalRoot) { - $event->getIO()->writeError(sprintf('Unable to find Drupal root at "%s"', $drupalRoot)); - exit(1); - } - $dirs = [ 'modules', 'profiles', 'themes', ]; - // Required for unit testing. + // Required for unit testing foreach ($dirs as $dir) { - if (!$fs->exists($drupalRoot . DIRECTORY_SEPARATOR . $dir)) { - $fs->mkdir($drupalRoot . DIRECTORY_SEPARATOR . $dir); - $fs->touch($drupalRoot . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR . '.gitkeep'); + if (!$fs->exists($drupalRoot . '/'. $dir)) { + $fs->mkdir($drupalRoot . '/'. $dir); + $fs->touch($drupalRoot . '/'. $dir . '/.gitkeep'); } } - $sitesDefault = $drupalRoot . DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . 'default'; - if ($fs->exists($sitesDefault)) { - $fs->chmod($sitesDefault, 0777); - } - - // Create settings and services files from default settings, if they do not - // already exist. - $defaultSettingsFile = $sitesDefault . DIRECTORY_SEPARATOR . 'default.settings.php'; - $settingsFile = $sitesDefault . DIRECTORY_SEPARATOR . 'settings.php'; - if (!$fs->exists($settingsFile) && $fs->exists($defaultSettingsFile)) { - $fs->copy($defaultSettingsFile, $settingsFile); - $fs->chmod($settingsFile, 0666); - $event->getIO()->write(sprintf('Created a "%s" file from default settings', $settingsFile)); - } - $defaultServicesFile = $sitesDefault . DIRECTORY_SEPARATOR . 'default.services.yml'; - $servicesFile = $sitesDefault . DIRECTORY_SEPARATOR . 'services.yml'; - if (!$fs->exists($servicesFile) && $fs->exists($defaultServicesFile)) { - $fs->copy($defaultServicesFile, $servicesFile); - $event->getIO()->write(sprintf('Created a "%s" file from default settings', $servicesFile)); - } - - // Add 'config_sync_directory' settings to the settings file. - if ($fs->exists($settingsFile)) { - $configPath = Path::makeRelative($drupalFinder->getComposerRoot() . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'default', $drupalRoot); - if (strpos(file_get_contents($settingsFile), 'config_sync_directory') === FALSE) { - $settings_string = <<getIO()->write('Added config_sync_directory to settings file'); + // Prepare the settings file for installation + if (!$fs->exists($drupalRoot . '/sites/default/settings.php') && $fs->exists($drupalRoot . '/sites/default/default.settings.php')) { + $fs->copy($drupalRoot . '/sites/default/default.settings.php', $drupalRoot . '/sites/default/settings.php'); + require_once $drupalRoot . '/core/includes/bootstrap.inc'; + require_once $drupalRoot . '/core/includes/install.inc'; + new Settings([]); + $settings['settings']['config_sync_directory'] = (object) [ + 'value' => Path::makeRelative($drupalFinder->getComposerRoot() . '/config/sync', $drupalRoot), + 'required' => TRUE, + ]; + + if (class_exists(SettingsEditor::class)) { + SettingsEditor::rewrite($drupalRoot . '/sites/default/settings.php', $settings); } + else { + drupal_rewrite_settings($settings, $drupalRoot . '/sites/default/settings.php'); + } + + $fs->chmod($drupalRoot . '/sites/default/settings.php', 0666); + $event->getIO()->write("Created a sites/default/settings.php file with chmod 0666"); } - // Create the files directory and set permissions. - $filesDirectory = $sitesDefault . DIRECTORY_SEPARATOR . 'files'; - if (!$fs->exists($filesDirectory)) { + // Create the files directory with chmod 0777 + if (!$fs->exists($drupalRoot . '/sites/default/files')) { $oldmask = umask(0); - $fs->mkdir($filesDirectory, 0777); + $fs->mkdir($drupalRoot . '/sites/default/files', 0777); umask($oldmask); - $event->getIO()->write(sprintf('Created a "%s" directory with chmod 0777', $filesDirectory)); + $event->getIO()->write("Created a sites/default/files directory with chmod 0777"); } } @@ -123,35 +108,4 @@ public static function checkComposerVersion(Event $event) { } } - /** - * Appends content to an existing file. - * - * Polyfill for older versions of Filesystem shipped with Composer phar. - * - * @param string $filename - * The file to which to append content. - * @param string $content - * The content to append. - * - * @throws \Symfony\Component\Filesystem\Exception\IOException - * If the file is not writable. - */ - protected static function appendToFile($filename, $content) { - $fs = new Filesystem(); - - $dir = \dirname($filename); - - if (!is_dir($dir)) { - $fs->mkdir($dir); - } - - if (!is_writable($dir)) { - throw new \Exception(sprintf('Unable to write to the "%s" directory.', $dir), 0, NULL, $dir); - } - - if (FALSE === @file_put_contents($filename, $content, FILE_APPEND)) { - throw new \Exception(sprintf('Failed to write file "%s".', $filename), 0, NULL, $filename); - } - } - } diff --git a/scripts/custom/drupal-install-site-1-enable-theme-modules.sh b/scripts/custom/drupal-install-site-1-enable-theme-modules.sh deleted file mode 100755 index 3615d4cb8..000000000 --- a/scripts/custom/drupal-install-site-1-enable-theme-modules.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash -## -# Enable modules. -# -# shellcheck disable=SC2086 - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to the application. -APP="${APP:-/app}" - -# ------------------------------------------------------------------------------ - -# Use local or global Drush, giving priority to a local drush. -drush="$(if [ -f "${APP}/vendor/bin/drush" ]; then echo "${APP}/vendor/bin/drush"; else command -v drush; fi)" - -echo "==> Removing all files." -rm -Rf "${APP}"/docroot/sites/default/files/* >/dev/null || true - -echo " > Enable modules required by CivicTheme." -$drush php:eval "require_once dirname(\Drupal::getContainer()->get('theme_handler')->rebuildThemeData()['civictheme']->getPathname()) . '/theme-settings.provision.inc'; civictheme_enable_modules();" - -echo " > Enable admin theme and set as default." -if [ "${DREVOPS_DRUPAL_PROFILE}" = "govcms" ]; then - # Enable stable9 theme and set as default theme. - # This is required to remove other theme to avoid polluting configuration. - $drush -y theme-enable stable9 - $drush -y config-set system.theme default stable9 - - # Remove other themes. - $drush -y theme-uninstall claro || true - $drush -y theme-uninstall govcms_bartik || true - $drush -y theme-uninstall bartik || true -elif [ "${DREVOPS_DRUPAL_PROFILE}" = "minimal" ]; then - $drush -y theme-enable claro - $drush -y config-set system.theme admin claro - $drush -y config-set node.settings use_admin_theme 1 -fi - -echo " > Enable CivicTheme theme and set as default." -$drush -y theme-enable civictheme -$drush -y config-set system.theme default civictheme -$drush -y config-set media.settings standalone_url true - -$drush -y theme-uninstall stable9 || true diff --git a/scripts/custom/drupal-install-site-2-activate-subtheme.sh b/scripts/custom/drupal-install-site-2-activate-subtheme.sh deleted file mode 100755 index 85bccc7db..000000000 --- a/scripts/custom/drupal-install-site-2-activate-subtheme.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env bash -## -# Optionally install and activate a sub-theme. -# -# shellcheck disable=SC2086 - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to the application. -APP="${APP:-/app}" - -# ------------------------------------------------------------------------------ - -[ "${CIVICTHEME_SUBTHEME_ACTIVATION_SKIP}" = "1" ] && echo "Skipping sub-theme activation" && return - -# Use local or global Drush, giving priority to a local drush. -drush="$(if [ -f "${APP}/vendor/bin/drush" ]; then echo "${APP}/vendor/bin/drush"; else command -v drush; fi)" - -if [ ! -d $APP/docroot/themes/custom/civictheme_demo ]; then - echo " > Creating civictheme_demo subtheme." - pushd $APP/docroot/themes/contrib/civictheme >/dev/null || exit 1 - php civictheme_create_subtheme.php civictheme_demo "CivicTheme Demo" "Demo sub-theme for a CivicTheme theme." - [ ! -d $APP/docroot/themes/custom/civictheme_demo ] && echo "ERROR: Failed to create civictheme_demo sub-theme." && exit 1 -fi - -echo " > Installing civictheme_demo theme." -$drush theme:enable civictheme_demo -y - -echo " > Setting civictheme_demo as a default theme." -$drush config-set system.theme default civictheme_demo -y - -if [ "$CIVICTHEME_SUBTHEME_FE_SKIP" != "1" ] && command -v npm &> /dev/null; then - pushd $APP/docroot/themes/custom/civictheme_demo >/dev/null || exit 1 - - if [ ! -d $APP/docroot/themes/custom/civictheme_demo/node_modules ]; then - echo " > Installing FE dependencies." - npm install - fi - - echo " > Building FE assets." - npm run build - - popd >/dev/null || exit 1 -fi diff --git a/scripts/custom/drupal-install-site-3-enable-modules.sh b/scripts/custom/drupal-install-site-3-enable-modules.sh deleted file mode 100755 index f771c96fa..000000000 --- a/scripts/custom/drupal-install-site-3-enable-modules.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -## -# Enable other modules. -# -# shellcheck disable=SC2086 - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to the application. -APP="${APP:-/app}" - -# ------------------------------------------------------------------------------ - -# Use local or global Drush, giving priority to a local drush. -drush="$(if [ -f "${APP}/vendor/bin/drush" ]; then echo "${APP}/vendor/bin/drush"; else command -v drush; fi)" - -if [ "${DREVOPS_DRUPAL_PROFILE}" = "govcms" ]; then - echo " > Remove GovCMS configs." - $drush -y pm-enable civictheme_govcms - $drush civictheme_govcms:remove-config -else - echo " > Enable Admin module." - $drush -y pm-enable civictheme_admin -fi - -echo " > Enable development module." -$drush -y pm-enable civictheme_dev diff --git a/scripts/custom/drupal-install-site-4-provision-content.sh b/scripts/custom/drupal-install-site-4-provision-content.sh deleted file mode 100755 index 77f31ea2b..000000000 --- a/scripts/custom/drupal-install-site-4-provision-content.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash -## -# Provision content. -# -# shellcheck disable=SC2086 - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to the application. -APP="${APP:-/app}" - -# ------------------------------------------------------------------------------ - -# Use local or global Drush, giving priority to a local drush. -drush="$(if [ -f "${APP}/vendor/bin/drush" ]; then echo "${APP}/vendor/bin/drush"; else command -v drush; fi)" - -if [ -n "${CIVICTHEME_CONTENT_PROFILE}" ]; then - echo " > Provisioning content from \"${CIVICTHEME_CONTENT_PROFILE}\" content profile." - $drush -y pm-enable civictheme_content -else - echo " > Provisioning content from theme defaults." - $drush php:eval -v "require_once '/app/docroot/themes/contrib/civictheme/theme-settings.provision.inc'; civictheme_provision_cli();" -fi - -if [ "${CIVICTHEME_GENERATED_CONTENT_CREATE_SKIP}" != "1" ]; then - echo " > Generate test content." - GENERATED_CONTENT_CREATE=1 $drush -y pm-enable cs_generated_content - - if $drush pm-list --status=enabled | grep -q simple_sitemap; then - echo " > Generate sitemap." - $drush simple-sitemap:generate - fi -else - echo " > Skipped creation of generated content." -fi diff --git a/scripts/custom/provision-10-enable-theme-modules.sh b/scripts/custom/provision-10-enable-theme-modules.sh new file mode 100755 index 000000000..686731981 --- /dev/null +++ b/scripts/custom/provision-10-enable-theme-modules.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +## +# Enable modules. +# +# shellcheck disable=SC2086 + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# ------------------------------------------------------------------------------ + +drush() { ./vendor/bin/drush -y "$@"; } + +echo "[INFO] Enabling theme modules." + +echo " > Removing all files." +rm -Rf /app/web/sites/default/files/* >/dev/null || true + +echo " > Enable modules required by CivicTheme." +drush php:eval "require_once dirname(\Drupal::getContainer()->get('theme_handler')->rebuildThemeData()['civictheme']->getPathname()) . '/theme-settings.provision.inc'; civictheme_enable_modules();" + +echo " > Enable admin theme and set as default." +if [ "${DRUPAL_PROFILE}" = "govcms" ]; then + # Enable stable9 theme and set as default theme. + # This is required to remove other theme to avoid polluting configuration. + drush theme-enable stable9 + drush config-set system.theme default stable9 + + # Remove other themes. + drush theme-uninstall claro || true + drush theme-uninstall govcms_bartik || true + drush theme-uninstall bartik || true +elif [ "${DRUPAL_PROFILE}" = "minimal" ]; then + drush theme-enable claro + drush config-set system.theme admin claro + drush config-set node.settings use_admin_theme 1 +fi + +echo " > Enable CivicTheme theme and set as default." +drush theme-enable civictheme +drush config-set system.theme default civictheme +drush config-set media.settings standalone_url true + +drush theme-uninstall stable9 || true + +echo "[ OK ] Finished enabling theme modules." diff --git a/scripts/custom/provision-20-activate-subtheme.sh b/scripts/custom/provision-20-activate-subtheme.sh new file mode 100755 index 000000000..d59c33942 --- /dev/null +++ b/scripts/custom/provision-20-activate-subtheme.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +## +# Optionally install and activate a sub-theme. +# +# shellcheck disable=SC2086 + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# ------------------------------------------------------------------------------ + +drush() { ./vendor/bin/drush -y "$@"; } + +echo "[INFO] Activating sub-theme." +[ "${CIVICTHEME_SUBTHEME_ACTIVATION_SKIP:-}" = "1" ] && echo "[ OK ] Skipping sub-theme activation" && return + +if [ ! -d /app/web/themes/custom/civictheme_demo ]; then + echo " > Creating civictheme_demo subtheme." + pushd /app/web/themes/contrib/civictheme >/dev/null || exit 1 + php civictheme_create_subtheme.php civictheme_demo "CivicTheme Demo" "Demo sub-theme for a CivicTheme theme." + [ ! -d /app/web/themes/custom/civictheme_demo ] && echo "[ERROR] Failed to create civictheme_demo sub-theme." && exit 1 + popd >/dev/null || exit 1 +fi + +echo " > Installing civictheme_demo theme." +drush theme:enable civictheme_demo + +echo " > Setting civictheme_demo as a default theme." +drush config-set system.theme default civictheme_demo + +if [ "${CIVICTHEME_SUBTHEME_FE_BUILD_SKIP:-}" != "1" ] && command -v npm &> /dev/null; then + pushd /app/web/themes/custom/civictheme_demo >/dev/null || exit 1 + + if [ ! -d /app/web/themes/custom/civictheme_demo/node_modules ]; then + echo " > Installing FE dependencies." + npm install + fi + + echo " > Building FE assets." + npm run build + + popd >/dev/null || exit 1 +fi + +echo "[ OK ] Finished activating sub-theme." diff --git a/scripts/custom/provision-30-enable-modules.sh b/scripts/custom/provision-30-enable-modules.sh new file mode 100755 index 000000000..4c279e29b --- /dev/null +++ b/scripts/custom/provision-30-enable-modules.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +## +# Enable other modules. +# +# shellcheck disable=SC2086 + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# ------------------------------------------------------------------------------ + +drush() { ./vendor/bin/drush -y "$@"; } + +echo "[INFO] Enabling additional modules." + +if [ "${DRUPAL_PROFILE:-}" = "govcms" ]; then + echo " > Remove GovCMS configs." + drush pm-enable civictheme_govcms + drush civictheme_govcms:remove-config +else + echo " > Enable Admin module." + drush pm-enable civictheme_admin +fi + +echo " > Enable development module." +drush pm-enable civictheme_dev + +echo "[ OK ] Finished enabling additional modules." diff --git a/scripts/custom/provision-40-provision-content.sh b/scripts/custom/provision-40-provision-content.sh new file mode 100755 index 000000000..547c00e2d --- /dev/null +++ b/scripts/custom/provision-40-provision-content.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +## +# Provision content. +# +# shellcheck disable=SC2086 + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# ------------------------------------------------------------------------------ + +drush() { ./vendor/bin/drush -y "$@"; } + +echo "[INFO] Finished provisioning content." + +if [ -n "${CIVICTHEME_CONTENT_PROFILE:-}" ]; then + echo " > Provisioning content from \"${CIVICTHEME_CONTENT_PROFILE}\" content profile." + drush pm-enable civictheme_content +else + echo " > Provisioning content from theme defaults." + drush php:eval -v "require_once '/app/web/themes/contrib/civictheme/theme-settings.provision.inc'; civictheme_provision_cli();" +fi + +if [ "${CIVICTHEME_GENERATED_CONTENT_CREATE_SKIP:-}" != "1" ]; then + echo " > Generate test content." + GENERATED_CONTENT_CREATE=1 drush pm-enable cs_generated_content + + if drush pm-list --status=enabled | grep -q simple_sitemap; then + echo " > Generate sitemap." + drush simple-sitemap:generate + fi +else + echo " > Skipped creation of generated content." +fi + +echo "[ OK ] Finished provisioning content." diff --git a/scripts/drevops/README.md b/scripts/drevops/README.md deleted file mode 100644 index e8c77cadf..000000000 --- a/scripts/drevops/README.md +++ /dev/null @@ -1,225 +0,0 @@ -Scripts in this directory used for workflow actions. - -They are expected to be ran inside of containers. - -There is no need to set values within scripts - update values in `.env` file -instead. - -Add your custom per-project scripts into `./scripts/custom` directory. - -## Bash cheatsheet -[//]: # ( Content mostly taken from https://gist.github.com/lee2sman/423ef08fc2318969b3eaaf5d1e14e02e) - -Full cheatsheet: https://devhints.io/bash - -## Shebang -Add this as the first line of your file. - - #!/usr/bin/env bash - -## Comments - - # this symbol makes everything after it on a line a comment - -## Variables - -- No data types. -- No need to declare. Just assign a value to create it. -- Get the value of a variable (whatever is stored in it) by calling it with `$` in front. -- Declare a local variable in a function by stating `local` before creating it. - - local var1 - -Built-in shell variables: - - $0 # Name of the shell script itself. - $1 # Value of the first command line parameter (similarly $2, $3, etc) - $# # In a shell script, the number of the command line parameters. - $* # All of the command line parameters. - $- # Options given to the shell. - $? # Return the exit status of the last command. - $$ # Process id of script (really id of the shell running the script). - -Assign a variable: - - VAR=1 - -Use a variable: - - VAR2=$VAR - VAR2=${VAR} - VAR2="${VAR}" - -Print a variable: - - echo $VAR - echo ${VAR} - echo "${VAR}" - -Default value: - - VAR="${VAR:-default}" - VAR="${VAR:-${ANOTHER_VAR}}" - -> Pro tip: Always use `${VAR}` syntax instead of `$VAR` to differentiate variables -from other constructs. - -## File redirection and Piping - -- Three default files: - - `0` - standard input (`stdin`) - - `1` standard output (`stdout`) - - `2` standard error (`stderr`) -- `> filename` redirects `stdout` to a file `filename`. If file does not exist - - it is created. -- `>> filename` redirects `stdout` to a file `filename`. Appends to the end of - the file if it already exists. -- `|` is the pipe. Piping is used to chain commands, scripts, files and programs - together. - - cat *.txt | sort > result_file.txt # Sorts the output of all the .txt files, saving outcome to result_file.txt. - -## Input -Ask for user input: - - `read num` # Asks for input and puts it in $num. - -## Conditions - - if command; then - echo "output" - echo "another line" - fi - - if command; then - echo "output" - echo "another line" - else - echo "and another line" - fi - - if [ "${VAR}" == "value" ] then - echo "output" - echo "another line" - fi - - if [ "${VAR}" != "value" ] then - echo "output" - echo "another line" - fi - - if [ "${VAR1}" == "value1" ] && [ "${VAR2}" == "value2" ] then - echo "output" - echo "another line" - fi - - if { [ "${VAR1}" == "value1" ] && [ "${VAR2}" == "value2" ] } || [ "${VAR3}" == "value3" ]; then - echo "output" - echo "another line" - fi - -One-liners: - - [ "${VAR1}" == "value1" ] && echo "line" || exit 1 - - { [ "${VAR1}" == "value1" ] && [ "${VAR2}" == "value2" ] } || [ "${VAR3}" == "value3" ] && echo "line" || exit 1 - -String comparisons: - - [ "${VAR1}" == "value1" ] && echo "equal" - - [ "${VAR1}" != "value1" ] && echo "not equal" - - [ "${VAR1}" < "value1" ] && echo "less than (ascii-betically)" - - [ "${VAR1}" > "value1" ] && echo "more than (ascii-betically)" - - [ -z "${VAR1}" ] && echo "string is null" - - [ -z "${VAR1+x}" ] && echo "string is null or not set" - - [ -n "${VAR1}" ] && echo "string is not null" - -## Loops - -For loop: - - for i in 1 2 3 4 5 - do - echo "Welcome $i times" - done - - for i in {1..5} - do - echo "Welcome $i times" - done - - # With increment of 2. - for i in {1..10..2} - do - echo "Welcome $i times" - done - -While loop: - - while [ condition ] - do - command - done - -## Switch - - case "$C" in - "1") - do_this() - ;; - "2" | "3") - do_what_you_are_supposed_to_do() - ;; - *) # fallback default case - do_nothing() - ;; - esac - -## Functions - -Declare a function: - - function myfunc { - echo $1 - } - -Call a function: - - myfunc "Hello" # Will echo Hello when called. - -## Sourcing and exporting - -Export a variable: - - VAR="val1" - export "${VAR}" - - export VAR="val2" - -Call another script (must have execute permission) - - ... - - ./path/to/script.sh - - ... - -Source another script - will be executed in the context of the current script: - - ... - - . ./path/to/script.sh - - ... - -## Useful snippets - -DotEnv in bash: - - t=$(mktemp) && export -p > "$t" && set -a && . ./.env && set +a && . "$t" && rm "$t" && unset t diff --git a/scripts/drevops/build.sh b/scripts/drevops/build.sh index fb44eb7fc..bdc664a72 100755 --- a/scripts/drevops/build.sh +++ b/scripts/drevops/build.sh @@ -3,144 +3,170 @@ # Build project. # # IMPORTANT! This script runs outside the container on the host system. +# # It is used to orchestrate other commands to "build" the project. Similar # approach is used by hosting providers when code is received. For example, # Acquia runs "hooks" (provided in "hooks" directory), Lagoon runs build steps # (specified in .lagoon.yml file) etc. # -# shellcheck disable=SC2046 +# shellcheck disable=SC1090,SC1091,SC2046,SC2016 # Read variables from .env and .env.local files, respecting existing environment # variable values. -# shellcheck disable=SC1090,SC1091 -t=$(mktemp) && export -p > "$t" && set -a && . ./.env && if [ -f ./.env.local ];then . ./.env.local;fi && set +a && . "$t" && rm "$t" && unset t +# shellcheck disable=SC1090,SC1091,SC2015,SC2155,SC2068 +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Print debug information in DrevOps scripts. +# @docs:skip DREVOPS_DEBUG="${DREVOPS_DEBUG:-}" # Print debug information from Docker build. -DREVOPS_DOCKER_VERBOSE="${DREVOPS_DOCKER_VERBOSE:-}" +DREVOPS_DOCKER_VERBOSE="${DREVOPS_DOCKER_VERBOSE:-1}" -echo "==> Building project." +# Print debug information from Composer install. +DREVOPS_COMPOSER_VERBOSE="${DREVOPS_COMPOSER_VERBOSE:-1}" -# Suppress any confirmation dialogs in descendant calls. -export DREVOPS_AHOY_CONFIRM_RESPONSE=y +# Print debug information from NPM install. +DREVOPS_NPM_VERBOSE="${DREVOPS_NPM_VERBOSE:-0}" -## Check all pre-requisites before starting the stack. -export DREVOPS_DOCTOR_CHECK_PREFLIGHT=1 && ./scripts/drevops/doctor.sh +# ------------------------------------------------------------------------------ -# Create stub of local network. -# shellcheck disable=SC2015 -docker network prune -f > /dev/null 2>&1 && docker network inspect amazeeio-network > /dev/null 2>&1 || docker network create amazeeio-network > /dev/null 2>&1 || true +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on -# Validate Docker Compose configuration. -docker-compose config -q +info "Started building project ${DREVOPS_PROJECT}." +echo -# Validate Composer configuration if Composer is installed. -if command -v composer > /dev/null; then - if [ "$DREVOPS_COMPOSER_VALIDATE_LOCK" = "1" ]; then - echo " > Validating composer configuration, including lock file." - composer validate --ansi --strict --no-check-all - else - echo " > Validating composer configuration." - composer validate --ansi --no-check-all --no-check-lock - fi -fi +[ "${DREVOPS_DOCKER_VERBOSE}" = "1" ] && docker_verbose_output="/dev/stdout" || docker_verbose_output="/dev/null" +[ "${DREVOPS_COMPOSER_VERBOSE}" = "1" ] && composer_verbose_output="/dev/stdout" || composer_verbose_output="/dev/null" +[ "${DREVOPS_NPM_VERBOSE}" = "1" ] && npm_verbose_output="/dev/stdout" || npm_verbose_output="/dev/null" -echo "==> Removing project containers and packages available since the previous run." -ahoy clean +# Create an array of Docker Compose CLI options for 'exec' command as a shorthand. +# $DREVOPS_*, $COMPOSE_* and $TERM variables will be passed to containers. +dcopts=(-T) && while IFS='' read -r line; do dcopts+=("${line}"); done < <(env | cut -f1 -d= | grep "TERM\|COMPOSE_\|GITHUB_\|DOCKER_\DRUPAL_\|DREVOPS_" | sed 's/^/-e /') -echo " > Creating GitHub authentication token if provided." -[ -n "$GITHUB_TOKEN" ] && echo "{\"github-oauth\": {\"github.com\": \"$GITHUB_TOKEN\"}}" > ./auth.json +# Check all pre-requisites before starting the stack. +DREVOPS_DOCTOR_CHECK_PREFLIGHT=1 ./scripts/drevops/doctor.sh -echo "==> Building images, recreating and starting containers." +info "Validating Docker Compose configuration." +docker compose config -q && pass "Docker Compose configuration is valid." || { fail "Docker Compose configuration is invalid." && exit 1; } +echo + +if command -v composer >/dev/null; then + info "Validating Composer configuration, including lock file." + composer validate --ansi --strict --no-check-all 1>"${composer_verbose_output}" + pass "Composer configuration is valid. Lock file is up-to-date." + echo +fi + +info "Removing project containers and packages available since the previous run." +if [ -f "docker-compose.yml" ]; then docker compose down --remove-orphans --volumes >/dev/null 2>&1; fi +./scripts/drevops/reset.sh +echo -if [ -n "${DREVOPS_DB_DOCKER_IMAGE}" ]; then - echo "==> Using Docker data image ${DREVOPS_DB_DOCKER_IMAGE}." +info "Building Docker images, recreating and starting containers." +note "This will take some time (use DREVOPS_DOCKER_VERBOSE=0 to disable the progress)." +note "Use 'ahoy provision' to re-provision site without rebuilding containers." + +if [ -n "${DREVOPS_DB_DOCKER_IMAGE:-}" ]; then + note "Using Docker data image ${DREVOPS_DB_DOCKER_IMAGE}." # Always login to the registry to have access to the private images. - ./scripts/drevops/docker-login.sh + ./scripts/drevops/login-docker.sh # Try restoring the image from the archive if it exists. - ./scripts/drevops/docker-restore-image.sh "${DREVOPS_DB_DOCKER_IMAGE}" "${DREVOPS_DB_DIR}/db.tar" + ./scripts/drevops/restore-docker-image.sh "${DREVOPS_DB_DOCKER_IMAGE}" "${DREVOPS_DB_DIR}/db.tar" # If the image does not exist and base image was provided - use the base # image which allows "clean slate" for the database. - if [ ! -f "${DREVOPS_DB_DIR}/db.tar" ] && [ -n "${DREVOPS_DB_DOCKER_IMAGE_BASE}" ]; then - echo "==> Database image was not found. Using base image ${DREVOPS_DB_DOCKER_IMAGE_BASE}." + if [ ! -f "${DREVOPS_DB_DIR}/db.tar" ] && [ -n "${DREVOPS_DB_DOCKER_IMAGE_BASE:-}" ]; then + note "Database Docker image was not found. Using base image ${DREVOPS_DB_DOCKER_IMAGE_BASE}." export DREVOPS_DB_DOCKER_IMAGE="${DREVOPS_DB_DOCKER_IMAGE_BASE}" fi + echo fi -export COMPOSE_HTTP_TIMEOUT=200 -[ "${DREVOPS_DOCKER_VERBOSE}" = "1" ] && build_verbose_output="/dev/stdout" || build_verbose_output="/dev/null" -ahoy up -- --build --force-recreate > "${build_verbose_output}" +info "Building Docker images and starting containers." + +docker compose up -d --build --force-recreate 1>"${docker_verbose_output}" 2>"${docker_verbose_output}" +if docker compose logs | grep -q "\[Error\]"; then fail "Unable to build Docker images and start containers" && docker compose logs && exit 1; fi +pass "Built Docker images and started containers." +echo # Export code built within containers before adding development dependencies. -# Usually this is needed to create a code artifact without development -# dependencies. -if [ -n "${DREVOPS_EXPORT_CODE_DIR}" ] ; then - echo "==> Exporting code before adding development dependencies." +# Usually this is needed to create a code artifact without development dependencies. +if [ -n "${DREVOPS_EXPORT_CODE_DIR:-}" ]; then + info "Exporting built code." mkdir -p "${DREVOPS_EXPORT_CODE_DIR}" - docker-compose exec --env DREVOPS_EXPORT_CODE_DIR="${DREVOPS_EXPORT_CODE_DIR}" -T cli ./scripts/drevops/export-code.sh - # Copy from container to the host. - docker cp -L $(docker-compose ps -q cli):"${DREVOPS_EXPORT_CODE_DIR}"/. "${DREVOPS_EXPORT_CODE_DIR}" + docker compose cp -L cli:"/app/." "${DREVOPS_EXPORT_CODE_DIR}" 2>"${composer_verbose_output}" + pass "Exported built code." + echo fi # Create data directory in the container and copy database dump file into -# container, but only if it exists, while also replacing relative directory path -# with absolute path. Note, that the DREVOPS_DB_DIR path is the same inside and -# outside the container. +# container, but only if it exists. if [ -f "${DREVOPS_DB_DIR}"/"${DREVOPS_DB_FILE}" ]; then - ahoy cli mkdir -p "${DREVOPS_DB_DIR}" - docker cp -L "${DREVOPS_DB_DIR}"/"${DREVOPS_DB_FILE}" $(docker-compose ps -q cli):"${DREVOPS_DB_DIR/.\//${DREVOPS_APP}/}"/"${DREVOPS_DB_FILE}" \ - && echo "==> Copied database file into container." + info "Copying database file into container." + docker compose exec ${dcopts[@]} cli bash -c 'mkdir -p ${DREVOPS_DB_DIR}' + docker compose cp -L "${DREVOPS_DB_DIR}"/"${DREVOPS_DB_FILE}" cli:"/app/${DREVOPS_DB_DIR}"/"${DREVOPS_DB_FILE}" 2>"${composer_verbose_output}" + pass "Copied database file into container." + echo fi -echo "==> Installing development dependencies." +info "Installing development dependencies." # # Although we are building dependencies when Docker images are built, # development dependencies are not installed (as they should not be installed -# for production images), so we are installing theme here. +# for production images), so we are installing them here. # -# Copy development configuration files into container. -docker cp -L behat.yml $(docker-compose ps -q cli):/app/ -docker cp -L phpcs.xml $(docker-compose ps -q cli):/app/ -docker cp -L tests $(docker-compose ps -q cli):/app/ -# Install all composer dependencies, including development ones. -# Note that this will create composer.lock file if it does not exist. -ahoy cli "COMPOSER_MEMORY_LIMIT=-1 composer install -n --ansi --prefer-dist" - -if [ -n "${DREVOPS_DRUPAL_THEME}" ]; then - # Install all npm dependencies and compile FE assets. - # Note that this will create package-lock.json file if it does not exist. - [ -z "${CI}" ] && ahoy fei && ahoy fe -fi +note "Copying development configuration files into container." +docker compose cp -L .twig_cs.php cli:/app/ 2>"${composer_verbose_output}" +docker compose cp -L behat.yml cli:/app/ 2>"${composer_verbose_output}" +docker compose cp -L phpcs.xml cli:/app/ 2>"${composer_verbose_output}" +docker compose cp -L phpmd.xml cli:/app/ 2>"${composer_verbose_output}" +docker compose cp -L phpstan.neon cli:/app/ 2>"${composer_verbose_output}" +docker compose cp -L phpunit.xml cli:/app/ 2>"${composer_verbose_output}" +docker compose cp -L tests cli:/app/ 2>"${composer_verbose_output}" +docker compose cp -L .circleci cli:/app/ 2>"${composer_verbose_output}" + +note "Installing all composer dependencies, including development ones." +docker compose exec ${dcopts[@]} cli bash -c " \ + if [ -n \"${GITHUB_TOKEN:-}\" ]; then export COMPOSER_AUTH='{\"github-oauth\": {\"github.com\": \"${GITHUB_TOKEN:-}\"}}'; fi && \ + COMPOSER_MEMORY_LIMIT=-1 composer install --no-interaction --ansi --prefer-dist --no-progress \ +" 1>"${composer_verbose_output}" 2>"${composer_verbose_output}" + +pass "Installed development dependencies." +echo -# Install site (from existing DB or fresh install). -ahoy install-site - -# Special handling of downloaded DB dump file in CI. -# We need to force importing of the database dump from the file into the -# database image with existing site, but only for the first time this file -# is downloaded (we do not want to import it in another stages where cached -# database image should be used instead of dump file). So we are removing the -# database dump file after import so that it is not imported again on the next -# run. But this only should be applied in CI and only if we are using database -# in image storage. -# This also prevent us from caching both dump file and an exported image, -# which would double the size of the cache. -if [ -n "${CI}" ] && [ -n "${DREVOPS_DB_DOCKER_IMAGE}" ] && [ -f "${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" ]; then - echo "==> Removing DB dump file in CI."; - rm "${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" || true; +# Install all npm dependencies and compile FE assets. +# Note that this will create package-lock.json file if it does not exist. +# We are not re-running compilation in CI as it is not used - these assets +# are already compiled as a part of the Docker build. +if [ -n "${DRUPAL_THEME:-}" ] && [ -z "${CI:-}" ]; then + info "Installing front-end dependencies." + docker compose exec ${dcopts[@]} cli bash -c 'npm --prefix ${DREVOPS_WEBROOT}/themes/contrib/${DRUPAL_THEME}/civictheme_library install' >"${npm_verbose_output}" + docker compose exec ${dcopts[@]} cli bash -c 'npm --prefix ${DREVOPS_WEBROOT}/themes/contrib/${DRUPAL_THEME} install' >"${npm_verbose_output}" + pass "Installed front-end dependencies." + + docker compose exec ${dcopts[@]} cli bash -c 'cd ${DREVOPS_WEBROOT}/themes/contrib/${DRUPAL_THEME}/civictheme_library && npm run build' >"${npm_verbose_output}" + docker compose exec ${dcopts[@]} cli bash -c 'cd ${DREVOPS_WEBROOT}/themes/contrib/${DRUPAL_THEME} && npm run build' >"${npm_verbose_output}" + pass "Compiled front-end dependencies." + + echo fi +# Provision site. +# Pass environment variables to the container from the environment. +docker compose exec ${dcopts[@]} cli bash -c "./scripts/drevops/provision.sh" +echo + # Check that the site is available. -ahoy doctor +./scripts/drevops/doctor.sh echo -echo "==> Build complete. 🚀🚀🚀 " +info "Finished building project ${DREVOPS_PROJECT} ($((SECONDS / 60))m $((SECONDS % 60))s)." echo - -# Show project information and a one-time login link. -DREVOPS_DRUPAL_SHOW_LOGIN_LINK=1 ahoy info diff --git a/scripts/drevops/clean.sh b/scripts/drevops/clean.sh deleted file mode 100755 index 95424adb2..000000000 --- a/scripts/drevops/clean.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -## -# Clean project build files. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -rm -rf \ - ./vendor \ - ./docroot/core \ - ./docroot/profiles/contrib \ - ./docroot/modules/contrib \ - ./docroot/themes/custom/civictheme_demo \ - ./docroot/themes/custom/*/build \ - ./docroot/themes/custom/*/scss/_components.scss \ - ./docroot/sites/default/settings.generated.php - -# shellcheck disable=SC2038 -find . -type d -name node_modules | xargs rm -Rf diff --git a/scripts/drevops/copy-db-acquia.sh b/scripts/drevops/copy-db-acquia.sh deleted file mode 100755 index df7ce1974..000000000 --- a/scripts/drevops/copy-db-acquia.sh +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/bin/env bash -## -# Copy a database from one Acquia site environment to another. -# @see https://cloudapi-docs.acquia.com/#/Environments/postEnvironmentsDatabases - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -#------------------------------------------------------------------------------- -# REQUIRED VARIABLES -#------------------------------------------------------------------------------- - -# Application name. Used to discover UUID. -AC_API_APP_NAME="${AC_API_APP_NAME:-}" -# Source environment name to copy from. -AC_API_DB_SRC_ENV="${AC_API_DB_SRC_ENV:-}" -# Destination environment name to copy to. -AC_API_DB_DST_ENV="${AC_API_DB_DST_ENV:-}" -# Database name to copy. -AC_API_DB_NAME="${AC_API_DB_NAME:-}" - -#------------------------------------------------------------------------------- -# OPTIONAL VARIABLES -#------------------------------------------------------------------------------- - -# Both user key and secret are read from environment variables or .env.local -# file. They should be provided through environment variables only in -# environments that do not have .env.local file created (usually, non-local -# environments). -AC_API_KEY="${AC_API_KEY:-}" -AC_API_SECRET="${AC_API_SECRET:-}" - -# Location of the file with credentials. -AC_CREDENTIALS_FILE=${AC_CREDENTIALS_FILE:-.env.local} - -# Number of status retrieval retries. If this limit reached and task has not -# yet finished, the task is considered failed. -AC_API_STATUS_RETRIES="${AC_API_STATUS_RETRIES:-600}" -# Interval in seconds to check task status. -AC_API_STATUS_INTERVAL="${AC_API_STATUS_INTERVAL:-10}" - -#------------------------------------------------------------------------------- -# DO NOT CHANGE ANYTHING BELOW THIS LINE -#------------------------------------------------------------------------------- - -# -# Function to extract last value from JSON object passed via STDIN. -# -extract_json_last_value() { - local key=$1 - php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$last=array_pop(\$data); isset(\$last[\"${key}\"]) ? print trim(json_encode(\$last[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" -} - -# -# Function to extract keyed value from JSON object passed via STDIN. -# -extract_json_value() { - local key=$1 - php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" -} - -# Pre-flight checks. -command -v curl > /dev/null || ( echo "ERROR: curl command is not available." && exit 1 ) - -# Try to read credentials from the credentials file. -if [ -z "${AC_API_KEY}" ] && [ -f "${AC_CREDENTIALS_FILE}" ]; then - # shellcheck disable=SC1090 - t=$(mktemp) && export -p > "$t" && set -a && . "${AC_CREDENTIALS_FILE}" && set +a && . "$t" && rm "$t" && unset t -fi - -# Check that all required variables are present. -[ -z "${AC_API_APP_NAME}" ] && echo "ERROR: Missing value for AC_API_APP_NAME." && exit 1 -[ -z "${AC_API_DB_SRC_ENV}" ] && echo "ERROR: Missing value for AC_API_DB_SRC_ENV." && exit 1 -[ -z "${AC_API_DB_DST_ENV}" ] && echo "ERROR: Missing value for AC_API_DB_DST_ENV." && exit 1 -[ -z "${AC_API_DB_NAME}" ] && echo "ERROR: Missing value for AC_API_DB_NAME." && exit 1 -[ -z "${AC_API_KEY}" ] && echo "ERROR: Missing value for AC_API_KEY." && exit 1 -[ -z "${AC_API_SECRET}" ] && echo "ERROR: Missing value for AC_API_SECRET." && exit 1 - -echo "==> Retrieving authentication token." -TOKEN_JSON=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${AC_API_KEY}" --data-urlencode "client_secret=${AC_API_SECRET}" --data-urlencode "grant_type=client_credentials") -TOKEN=$(echo "${TOKEN_JSON}" | extract_json_value "access_token") -[ -z "${TOKEN}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 - -echo "==> Retrieving ${AC_API_APP_NAME} application UUID." -APP_UUID_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "https://cloud.acquia.com/api/applications?filter=name%3D${AC_API_APP_NAME/ /%20}") -APP_UUID=$(echo "${APP_UUID_JSON}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "uuid") -[ -z "${APP_UUID}" ] && echo "ERROR: Unable to retrieve an environment UUID." && exit 1 - -echo "==> Retrieving source environment id." -ENVS_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "https://cloud.acquia.com/api/applications/${APP_UUID}/environments?filter=name%3D${AC_API_DB_SRC_ENV}") -SRC_ENV_ID=$(echo "${ENVS_JSON}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${SRC_ENV_ID}" ] && echo "ERROR: Unable to retrieve source environment ID." && exit 1 - -echo "==> Retrieving destination environment id." -ENVS_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "https://cloud.acquia.com/api/applications/${APP_UUID}/environments?filter=name%3D${AC_API_DB_DST_ENV}") -DST_ENV_ID=$(echo "${ENVS_JSON}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${DST_ENV_ID}" ] && echo "ERROR: Unable to retrieve destination environment ID." && exit 1 - -echo "==> Copying DB from ${AC_API_DB_SRC_ENV} to ${AC_API_DB_DST_ENV} environment." -TASK_STATUS_JSON=$(curl -X POST -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d "{\"source\":\"${SRC_ENV_ID}\", \"name\":\"${AC_API_DB_NAME}\"}" "https://cloud.acquia.com/api/environments/${DST_ENV_ID}/databases") -NOTIFICATION_URL=$(echo "${TASK_STATUS_JSON}" | extract_json_value "_links" | extract_json_value "notification" | extract_json_value "href") - -echo -n "==> Checking task status: " -TASK_COMPLETED=0 -# shellcheck disable=SC2034 -for i in $(seq 1 "${AC_API_STATUS_RETRIES}"); -do - echo -n "." - sleep "${AC_API_STATUS_INTERVAL}" - TASK_STATUS_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "${NOTIFICATION_URL}") - TASK_STATE=$(echo "$TASK_STATUS_JSON" | extract_json_value "status") - [ "$TASK_STATE" == "completed" ] && TASK_COMPLETED=1 && break - - echo "==> Retrieving authentication token." - TOKEN_JSON=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${AC_API_KEY}" --data-urlencode "client_secret=${AC_API_SECRET}" --data-urlencode "grant_type=client_credentials") - TOKEN=$(echo "${TOKEN_JSON}" | extract_json_value "access_token") - [ -z "${TOKEN}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 -done -echo - -if [ "${TASK_COMPLETED}" == "0" ] ; then - echo "==> Unable to copy DB from $AC_API_DB_SRC_ENV to $AC_API_DB_DST_ENV environment." - exit 1 -fi - -echo "==> Successfully copied DB from $AC_API_DB_SRC_ENV to $AC_API_DB_DST_ENV environment." - -SELF_ELAPSED_TIME=$((SECONDS)) -echo "==> Build duration: $((SELF_ELAPSED_TIME/60)) min $((SELF_ELAPSED_TIME%60)) sec." diff --git a/scripts/drevops/copy-files-acquia.sh b/scripts/drevops/copy-files-acquia.sh deleted file mode 100755 index 235200ef6..000000000 --- a/scripts/drevops/copy-files-acquia.sh +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env bash -## -# Copy a database from one Acquia site environment to another. -# @see https://cloudapi-docs.acquia.com/#/Environments/postEnvironmentsDatabases - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -#------------------------------------------------------------------------------- -# REQUIRED VARIABLES -#------------------------------------------------------------------------------- - -# Application name. Used to discover UUID. -AC_API_APP_NAME="${AC_API_APP_NAME:-}" -# Source environment name to copy from. -AC_API_FILES_SRC_ENV="${AC_API_FILES_SRC_ENV:-}" -# Destination environment name to copy to. -AC_API_FILES_DST_ENV="${AC_API_FILES_DST_ENV:-}" - -#------------------------------------------------------------------------------- -# OPTIONAL VARIABLES -#------------------------------------------------------------------------------- - -# Both user key and secret are read from environment variables or .env.local -# file. They should be provided through environment variables only in -# environments that do not have .env.local file created (usually, non-local -# environments). -AC_API_KEY="${AC_API_KEY:-}" -AC_API_SECRET="${AC_API_SECRET:-}" - -# Location of the file with credentials. -AC_CREDENTIALS_FILE=${AC_CREDENTIALS_FILE:-.env.local} - -# Number of status retrieval retries. If this limit reached and task has not -# yet finished, the task is considered failed. -AC_API_STATUS_RETRIES="${AC_API_STATUS_RETRIES:-300}" -# Interval in seconds to check task status. -AC_API_STATUS_INTERVAL="${AC_API_STATUS_INTERVAL:-10}" - -#------------------------------------------------------------------------------- -# DO NOT CHANGE ANYTHING BELOW THIS LINE -#------------------------------------------------------------------------------- - -# -# Function to extract last value from JSON object passed via STDIN. -# -extract_json_last_value() { - local key=$1 - php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$last=array_pop(\$data); isset(\$last[\"${key}\"]) ? print trim(json_encode(\$last[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" -} - -# -# Function to extract keyed value from JSON object passed via STDIN. -# -extract_json_value() { - local key=$1 - php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" -} - -# Pre-flight checks. -command -v curl > /dev/null || ( echo "ERROR: curl command is not available." && exit 1 ) - -# Try to read credentials from the credentials file. -if [ -z "${AC_API_KEY}" ] && [ -f "${AC_CREDENTIALS_FILE}" ]; then - # shellcheck disable=SC1090 - t=$(mktemp) && export -p > "$t" && set -a && . "${AC_CREDENTIALS_FILE}" && set +a && . "$t" && rm "$t" && unset t -fi - -# Check that all required variables are present. -[ -z "${AC_API_APP_NAME}" ] && echo "ERROR: Missing value for AC_API_APP_NAME." && exit 1 -[ -z "${AC_API_FILES_SRC_ENV}" ] && echo "ERROR: Missing value for AC_API_FILES_SRC_ENV." && exit 1 -[ -z "${AC_API_FILES_DST_ENV}" ] && echo "ERROR: Missing value for AC_API_FILES_DST_ENV." && exit 1 -[ -z "${AC_API_KEY}" ] && echo "ERROR: Missing value for AC_API_KEY." && exit 1 -[ -z "${AC_API_SECRET}" ] && echo "ERROR: Missing value for AC_API_SECRET." && exit 1 - -echo "==> Retrieving authentication token." -TOKEN_JSON=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${AC_API_KEY}" --data-urlencode "client_secret=${AC_API_SECRET}" --data-urlencode "grant_type=client_credentials") -TOKEN=$(echo "${TOKEN_JSON}" | extract_json_value "access_token") -[ -z "${TOKEN}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 - -echo "==> Retrieving ${AC_API_APP_NAME} application UUID." -APP_UUID_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "https://cloud.acquia.com/api/applications?filter=name%3D${AC_API_APP_NAME/ /%20}") -APP_UUID=$(echo "${APP_UUID_JSON}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "uuid") -[ -z "${APP_UUID}" ] && echo "ERROR: Unable to retrieve an environment UUID." && exit 1 - -echo "==> Retrieving source environment id." -ENVS_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "https://cloud.acquia.com/api/applications/${APP_UUID}/environments?filter=name%3D${AC_API_FILES_SRC_ENV}") -SRC_ENV_ID=$(echo "${ENVS_JSON}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${SRC_ENV_ID}" ] && echo "ERROR: Unable to retrieve source environment ID." && exit 1 - -echo "==> Retrieving destination environment id." -ENVS_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "https://cloud.acquia.com/api/applications/${APP_UUID}/environments?filter=name%3D${AC_API_FILES_DST_ENV}") -DST_ENV_ID=$(echo "${ENVS_JSON}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${DST_ENV_ID}" ] && echo "ERROR: Unable to retrieve destination environment ID." && exit 1 - -echo "==> Copying files from ${AC_API_FILES_SRC_ENV} to ${AC_API_FILES_DST_ENV} environment." -TASK_STATUS_JSON=$(curl -X POST -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d "{\"source\":\"${SRC_ENV_ID}\"}" "https://cloud.acquia.com/api/environments/${DST_ENV_ID}/files") -NOTIFICATION_URL=$(echo "${TASK_STATUS_JSON}" | extract_json_value "_links" | extract_json_value "notification" | extract_json_value "href") - -echo -n "==> Checking task status: " -TASK_COMPLETED=0 -# shellcheck disable=SC2034 -for i in $(seq 1 "${AC_API_STATUS_RETRIES}"); -do - echo -n "." - sleep "${AC_API_STATUS_INTERVAL}" - TASK_STATUS_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "${NOTIFICATION_URL}") - TASK_STATE=$(echo "$TASK_STATUS_JSON" | extract_json_value "status") - [ "$TASK_STATE" == "completed" ] && TASK_COMPLETED=1 && break - - echo "==> Retrieving authentication token." - TOKEN_JSON=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${AC_API_KEY}" --data-urlencode "client_secret=${AC_API_SECRET}" --data-urlencode "grant_type=client_credentials") - TOKEN=$(echo "${TOKEN_JSON}" | extract_json_value "access_token") - [ -z "${TOKEN}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 -done -echo - -if [ "${TASK_COMPLETED}" == "0" ] ; then - echo "==> Unable to copy files from $AC_API_FILES_SRC_ENV to $AC_API_FILES_DST_ENV environment." - exit 1 -fi - -echo "==> Successfully copied files from $AC_API_FILES_SRC_ENV to $AC_API_FILES_DST_ENV environment." - -SELF_ELAPSED_TIME=$((SECONDS)) -echo "==> Build duration: $((SELF_ELAPSED_TIME/60)) min $((SELF_ELAPSED_TIME%60)) sec." diff --git a/scripts/drevops/deploy-artifact.sh b/scripts/drevops/deploy-artifact.sh index 37040c740..fad42465d 100755 --- a/scripts/drevops/deploy-artifact.sh +++ b/scripts/drevops/deploy-artifact.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash ## -# Deploy via pushing code artifact to remote git repository. +# Deploy code via pushing an artifact to a remote git repository. # # @see https://github.com/drevops/git-artifact # @@ -8,19 +8,25 @@ # an artifact in CI and then commit only required files to the destination # repository. # -# The list of files to ignore during deployment is controlled by a file -# .gitignore.deployment, which has .gitignore syntax. During artifact building -# process preparation, this file effectively replaces existing .gitignore -# and all files that are ignored get removed. +# During deployment, the `.gitignore.deployment` file determines which files +# to exclude, using the `.gitignore` syntax. When preparing the artifact build, +# this file supersedes the existing `.gitignore`, and any specified files are +# excluded. +# +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091 -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Remote repository to push code to. DREVOPS_DEPLOY_ARTIFACT_GIT_REMOTE="${DREVOPS_DEPLOY_ARTIFACT_GIT_REMOTE:-}" # Email address of the user who will be committing to a remote repository. -DREVOPS_DEPLOY_ARTIFACT_GIT_USER_NAME="${DREVOPS_DEPLOY_ARTIFACT_GIT_USER_NAME:-"Deployer Robot"}" +DREVOPS_DEPLOY_ARTIFACT_GIT_USER_NAME="${DREVOPS_DEPLOY_ARTIFACT_GIT_USER_NAME:-"Deployment Robot"}" # Name of the user who will be committing to a remote repository. DREVOPS_DEPLOY_ARTIFACT_GIT_USER_EMAIL="${DREVOPS_DEPLOY_ARTIFACT_GIT_USER_EMAIL:-}" @@ -32,26 +38,33 @@ DREVOPS_DEPLOY_ARTIFACT_SRC="${DREVOPS_DEPLOY_ARTIFACT_SRC:-}" # the current directory. DREVOPS_DEPLOY_ARTIFACT_ROOT="${DREVOPS_DEPLOY_ARTIFACT_ROOT:-$(pwd)}" -# SSH key fingerprint used to connect to remote. -DREVOPS_DEPLOY_ARTIFACT_SSH_FINGERPRINT="${DREVOPS_DEPLOY_ARTIFACT_SSH_FINGERPRINT:-}" - -# Default SSH file used if custom fingerprint is not provided. -DREVOPS_DEPLOY_ARTIFACT_SSH_FILE="${DREVOPS_DEPLOY_ARTIFACT_SSH_FILE:-${HOME}/.ssh/id_rsa}" +# Remote repository branch. Can be a specific branch or a token. +# @see https://github.com/drevops/git-artifact#token-support +DREVOPS_DEPLOY_ARTIFACT_DST_BRANCH="${DREVOPS_DEPLOY_ARTIFACT_DST_BRANCH:-[branch]}" # Deployment report file name. DREVOPS_DEPLOY_ARTIFACT_REPORT_FILE="${DREVOPS_DEPLOY_ARTIFACT_REPORT_FILE:-${DREVOPS_DEPLOY_ARTIFACT_ROOT}/deployment_report.txt}" -# Remote repository branch. Can be a specific branch or a token. -# @see https://github.com/drevops/git-artifact#token-support -DREVOPS_DEPLOY_ARTIFACT_GIT_BRANCH="${DREVOPS_DEPLOY_ARTIFACT_GIT_BRANCH:-[branch]}" +# SSH key fingerprint used to connect to remote. +DREVOPS_DEPLOY_SSH_FINGERPRINT="${DREVOPS_DEPLOY_SSH_FINGERPRINT:-}" + +# Default SSH file used if custom fingerprint is not provided. +DREVOPS_DEPLOY_SSH_FILE="${DREVOPS_DEPLOY_SSH_FILE:-${HOME}/.ssh/id_rsa}" # ------------------------------------------------------------------------------ -echo "==> Started ARTIFACT deployment." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started ARTIFACT deployment." # Check all required values. [ -z "${DREVOPS_DEPLOY_ARTIFACT_GIT_REMOTE}" ] && echo "Missing required value for DREVOPS_DEPLOY_ARTIFACT_GIT_REMOTE." && exit 1 -[ -z "${DREVOPS_DEPLOY_ARTIFACT_GIT_BRANCH}" ] && echo "Missing required value for DREVOPS_DEPLOY_ARTIFACT_GIT_BRANCH." && exit 1 +[ -z "${DREVOPS_DEPLOY_ARTIFACT_DST_BRANCH}" ] && echo "Missing required value for DREVOPS_DEPLOY_ARTIFACT_DST_BRANCH." && exit 1 [ -z "${DREVOPS_DEPLOY_ARTIFACT_SRC}" ] && echo "Missing required value for DREVOPS_DEPLOY_ARTIFACT_SRC." && exit 1 [ -z "${DREVOPS_DEPLOY_ARTIFACT_ROOT}" ] && echo "Missing required value for DREVOPS_DEPLOY_ARTIFACT_ROOT." && exit 1 [ -z "${DREVOPS_DEPLOY_ARTIFACT_REPORT_FILE}" ] && echo "Missing required value for DREVOPS_DEPLOY_ARTIFACT_REPORT_FILE." && exit 1 @@ -59,31 +72,31 @@ echo "==> Started ARTIFACT deployment." [ -z "${DREVOPS_DEPLOY_ARTIFACT_GIT_USER_EMAIL}" ] && echo "Missing required value for DREVOPS_DEPLOY_ARTIFACT_GIT_USER_EMAIL." && exit 1 # Configure global git settings, if they do not exist. -[ "$(git config --global user.name)" = "" ] && echo "==> Configuring global git user name." && git config --global user.name "${DREVOPS_DEPLOY_ARTIFACT_GIT_USER_NAME}" -[ "$(git config --global user.email)" = "" ] && echo "==> Configuring global git user email." && git config --global user.email "${DREVOPS_DEPLOY_ARTIFACT_GIT_USER_EMAIL}" +[ "$(git config --global user.name)" = "" ] && note "Configuring global git user name." && git config --global user.name "${DREVOPS_DEPLOY_ARTIFACT_GIT_USER_NAME}" +[ "$(git config --global user.email)" = "" ] && note "Configuring global git user email." && git config --global user.email "${DREVOPS_DEPLOY_ARTIFACT_GIT_USER_EMAIL}" # Use custom deploy key if fingerprint is provided. -if [ -n "${DREVOPS_DEPLOY_ARTIFACT_SSH_FINGERPRINT}" ]; then - echo " > Custom deployment key is provided." - DREVOPS_DEPLOY_ARTIFACT_SSH_FILE="${DREVOPS_DEPLOY_ARTIFACT_SSH_FINGERPRINT//:}" - DREVOPS_DEPLOY_ARTIFACT_SSH_FILE="${HOME}/.ssh/id_rsa_${DREVOPS_DEPLOY_ARTIFACT_SSH_FILE//\"}" +if [ -n "${DREVOPS_DEPLOY_SSH_FINGERPRINT:-}" ]; then + note "Custom deployment key is provided." + DREVOPS_DEPLOY_SSH_FILE="${DREVOPS_DEPLOY_SSH_FINGERPRINT//:/}" + DREVOPS_DEPLOY_SSH_FILE="${HOME}/.ssh/id_rsa_${DREVOPS_DEPLOY_SSH_FILE//\"/}" fi -[ ! -f "${DREVOPS_DEPLOY_ARTIFACT_SSH_FILE}" ] && echo "ERROR: SSH key file ${DREVOPS_DEPLOY_ARTIFACT_SSH_FILE} does not exist." && exit 1 +[ ! -f "${DREVOPS_DEPLOY_SSH_FILE:-}" ] && fail "SSH key file ${DREVOPS_DEPLOY_SSH_FILE} does not exist." && exit 1 -if ssh-add -l | grep -q "${DREVOPS_DEPLOY_ARTIFACT_SSH_FILE}"; then - echo " > SSH agent has ${DREVOPS_DEPLOY_ARTIFACT_SSH_FILE} key loaded." +if ssh-add -l | grep -q "${DREVOPS_DEPLOY_SSH_FILE}"; then + note "SSH agent has ${DREVOPS_DEPLOY_SSH_FILE} key loaded." else - echo " > SSH agent does not have default key loaded. Trying to load." + note "SSH agent does not have default key loaded. Trying to load." # Remove all other keys and add SSH key from provided fingerprint into SSH agent. - ssh-add -D > /dev/null - ssh-add "${DREVOPS_DEPLOY_ARTIFACT_SSH_FILE}" + ssh-add -D >/dev/null + ssh-add "${DREVOPS_DEPLOY_SSH_FILE}" fi # Disable strict host key checking in CI. -[ -n "${CI}" ] && mkdir -p "${HOME}/.ssh/" && echo -e "\nHost *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null\n" >> "${HOME}/.ssh/config" +[ -n "${CI:-}" ] && mkdir -p "${HOME}/.ssh/" && echo -e "\nHost *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null\n" >>"${HOME}/.ssh/config" -echo " > Installing artifact builder." +note "Installing artifact builder." composer global require --dev -n --ansi --prefer-source --ignore-platform-reqs drevops/git-artifact:^0.5 # Copying git repo files meta file to the deploy code repo as it may not exist @@ -92,15 +105,15 @@ cp -a "${DREVOPS_DEPLOY_ARTIFACT_ROOT}"/.git "${DREVOPS_DEPLOY_ARTIFACT_SRC}" || # Copying deployment .gitignore as it may not exist in deploy code source files. cp -a "${DREVOPS_DEPLOY_ARTIFACT_ROOT}"/.gitignore.deployment "${DREVOPS_DEPLOY_ARTIFACT_SRC}" || true -echo " > Running artifact builder." +note "Running artifact builder." # Add --debug to debug any deployment issues. "${HOME}/.composer/vendor/bin/robo" --ansi \ --load-from "${HOME}/.composer/vendor/drevops/git-artifact/RoboFile.php" artifact "${DREVOPS_DEPLOY_ARTIFACT_GIT_REMOTE}" \ --root="${DREVOPS_DEPLOY_ARTIFACT_ROOT}" \ --src="${DREVOPS_DEPLOY_ARTIFACT_SRC}" \ - --branch="${DREVOPS_DEPLOY_ARTIFACT_GIT_BRANCH}" \ + --branch="${DREVOPS_DEPLOY_ARTIFACT_DST_BRANCH}" \ --gitignore="${DREVOPS_DEPLOY_ARTIFACT_SRC}"/.gitignore.deployment \ --report="${DREVOPS_DEPLOY_ARTIFACT_REPORT_FILE}" \ --push -echo "==> Finished ARTIFACT deployment." +pass "Finished ARTIFACT deployment." diff --git a/scripts/drevops/deploy-docker.sh b/scripts/drevops/deploy-docker.sh index 892946706..edce19a37 100755 --- a/scripts/drevops/deploy-docker.sh +++ b/scripts/drevops/deploy-docker.sh @@ -2,76 +2,88 @@ ## # Deploy via pushing Docker images to Docker registry. # -# This will push multiple docker images by tagging provided services in the -# DREVOPS_DEPLOY_DOCKER_MAP variable. +# Push multiple docker images by tagging services provided in the +# $DREVOPS_DEPLOY_DOCKER_MAP variable. # +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Comma-separated map of docker services and images to use for deployment in # format "service1=org/image1,service2=org/image2". DREVOPS_DEPLOY_DOCKER_MAP="${DREVOPS_DEPLOY_DOCKER_MAP:-}" -# The username of the docker registry to deploy Docker image to. -DREVOPS_DEPLOY_DOCKER_REGISTRY_USERNAME="${DREVOPS_DEPLOY_DOCKER_REGISTRY_USERNAME:-}}" +# The username for the docker registry. +DOCKER_USER="${DOCKER_USER:-}" -# The token of the docker registry to deploy Docker image to. -DREVOPS_DEPLOY_DOCKER_REGISTRY_TOKEN="${DREVOPS_DEPLOY_DOCKER_REGISTRY_TOKEN:-}" +# The password for the docker registry. +DOCKER_PASS="${DOCKER_PASS:-}" -# The registry of the docker registry to deploy Docker image to. -DREVOPS_DEPLOY_DOCKER_REGISTRY="${DREVOPS_DEPLOY_DOCKER_REGISTRY:-docker.io}" +# Docker registry name. Provide port, if required as :. +DOCKER_REGISTRY="${DOCKER_REGISTRY:-docker.io}" -# The tag of the image to push to. Defaults to 'latest'. -DREVOPS_DEPLOY_DOCKER_IMAGE_TAG="${DREVOPS_DEPLOY_DOCKER_IMAGE_TAG:-latest}" +# The tag of the image to push to. +DREVOPS_DOCKER_IMAGE_TAG="${DREVOPS_DOCKER_IMAGE_TAG:-latest}" # ------------------------------------------------------------------------------ -echo "==> Started DOCKER deployment." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started DOCKER deployment." # Only deploy if the map was provided, but do not fail if it has not as this # may be called as a part of another task. -# @todo: Handle this better - empty DREVOPS_DEPLOY_DOCKER_MAP should use defaults. +# @todo: Handle this better - empty $DREVOPS_DEPLOY_DOCKER_MAP should use defaults. [ -z "${DREVOPS_DEPLOY_DOCKER_MAP}" ] && echo "Services map is not specified in DREVOPS_DEPLOY_DOCKER_MAP variable. Docker deployment will not continue." && exit 0 services=() images=() # Parse and validate map. -IFS=',' read -r -a values <<< "${DREVOPS_DEPLOY_DOCKER_MAP}" +IFS=',' read -r -a values <<<"${DREVOPS_DEPLOY_DOCKER_MAP}" for value in "${values[@]}"; do - IFS='=' read -r -a parts <<< "${value}" - [ "${#parts[@]}" -ne 2 ] && echo "ERROR: invalid key/value pair \"${value}\" provided." && exit 1 + IFS='=' read -r -a parts <<<"${value}" + [ "${#parts[@]}" -ne 2 ] && fail "invalid key/value pair \"${value}\" provided." && exit 1 services+=("${parts[0]}") images+=("${parts[1]}") done # Login to the registry. -export DREVOPS_DOCKER_REGISTRY_USERNAME="${DREVOPS_DEPLOY_DOCKER_REGISTRY_USERNAME}" -export DREVOPS_DOCKER_REGISTRY_TOKEN="${DREVOPS_DEPLOY_DOCKER_REGISTRY_TOKEN}" -export DREVOPS_DOCKER_REGISTRY="${DREVOPS_DEPLOY_DOCKER_REGISTRY}" -./scripts/drevops/docker-login.sh +export DOCKER_USER="${DOCKER_USER}" +export DOCKER_PASS="${DOCKER_PASS}" +export DOCKER_REGISTRY="${DOCKER_REGISTRY}" +./scripts/drevops/login-docker.sh for key in "${!services[@]}"; do - service="${services[$key]}" - image="${images[$key]}" + service="${services[${key}]}" + image="${images[${key}]}" - echo " > Processing service ${service}." + note "Processing service ${service}." # Check if the service is running.) - cid=$(docker-compose ps -q "${service}") + cid=$(docker compose ps -q "${service}") - [ -z "${cid}" ] && echo "ERROR: Service \"${service}\" is not running." && exit 1 - echo " > Found \"${service}\" service container with id \"${cid}\"." + [ -z "${cid}" ] && fail "Service \"${service}\" is not running." && exit 1 + note "Found \"${service}\" service container with id \"${cid}\"." - [ -n "${image##*:*}" ] && image="${image}:${DREVOPS_DEPLOY_DOCKER_IMAGE_TAG}" - new_image="${DREVOPS_DEPLOY_DOCKER_REGISTRY}/${image}" + [ -n "${image##*:*}" ] && image="${image}:${DREVOPS_DOCKER_IMAGE_TAG}" + new_image="${DOCKER_REGISTRY}/${image}" - echo " > Committing Docker image with name \"${new_image}\"." + note "Committing Docker image with name \"${new_image}\"." iid=$(docker commit "${cid}" "${new_image}") iid="${iid#sha256:}" - echo " > Committed Docker image with id \"${iid}\"." + note "Committed Docker image with id \"${iid}\"." - echo " > Pushing Socker image to the registry." + note "Pushing Docker image to the registry." docker push "${new_image}" done -echo "==> Finished DOCKER deployment." +pass "Finished DOCKER deployment." diff --git a/scripts/drevops/deploy-lagoon.sh b/scripts/drevops/deploy-lagoon.sh index b278b5641..cc69e7068 100755 --- a/scripts/drevops/deploy-lagoon.sh +++ b/scripts/drevops/deploy-lagoon.sh @@ -3,28 +3,38 @@ # Deploy via Lagoon CLI. # # @see https://github.com/amazeeio/lagoon-cli +# +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x -# Deploy action. +# Deployment action. +# # Values can be one of: deploy, deploy_override_db, destroy. -DREVOPS_DEPLOY_LAGOON_ACTION="${DREVOPS_DEPLOY_LAGOON_ACTION:-create}" +# - deploy: Deploy code and preserve database in the environment. +# - deploy_override_db: Deploy code and override database in the environment. +# - destroy: Destroy the environment (if the provider supports it). +DREVOPS_DEPLOY_ACTION="${DREVOPS_DEPLOY_ACTION:-create}" # The Lagoon project to perform deployment for. -DREVOPS_DEPLOY_LAGOON_PROJECT="${DREVOPS_DEPLOY_LAGOON_PROJECT:-}" +LAGOON_PROJECT="${LAGOON_PROJECT:-}" # The Lagoon branch to deploy. -DREVOPS_DEPLOY_LAGOON_BRANCH="${DREVOPS_DEPLOY_LAGOON_BRANCH:-}" +DREVOPS_DEPLOY_BRANCH="${DREVOPS_DEPLOY_BRANCH:-}" # The PR number to deploy. -DREVOPS_DEPLOY_LAGOON_PR="${DREVOPS_DEPLOY_LAGOON_PR:-}" +DREVOPS_DEPLOY_PR="${DREVOPS_DEPLOY_PR:-}" # The PR head branch to deploy. -DREVOPS_DEPLOY_LAGOON_PR_HEAD="${DREVOPS_DEPLOY_LAGOON_PR_HEAD:-}" +DREVOPS_DEPLOY_PR_HEAD="${DREVOPS_DEPLOY_PR_HEAD:-}" # The PR base branch (the branch the PR is raised against). Defaults to 'develop'. -DREVOPS_DEPLOY_LAGOON_PR_BASE_BRANCH="${DREVOPS_DEPLOY_LAGOON_PR_BASE_BRANCH:-develop}" +DREVOPS_DEPLOY_PR_BASE_BRANCH="${DREVOPS_DEPLOY_PR_BASE_BRANCH:-develop}" # The Lagoon instance name to interact with. DREVOPS_DEPLOY_LAGOON_INSTANCE="${DREVOPS_DEPLOY_LAGOON_INSTANCE:-amazeeio}" @@ -44,10 +54,10 @@ DREVOPS_DEPLOY_LAGOON_INSTANCE_PORT="${DREVOPS_DEPLOY_LAGOON_INSTANCE_PORT:-3222 # In most cases, the default SSH key does not work (because it is a read-only # key used by CircleCI to checkout code from git), so you should add another # deployment key. -DREVOPS_DEPLOY_LAGOON_SSH_FINGERPRINT="${DREVOPS_DEPLOY_LAGOON_SSH_FINGERPRINT:-}" +DREVOPS_DEPLOY_SSH_FINGERPRINT="${DREVOPS_DEPLOY_SSH_FINGERPRINT:-}" # Default SSH file used if custom fingerprint is not provided. -DREVOPS_DEPLOY_LAGOON_SSH_FILE="${DREVOPS_DEPLOY_LAGOON_SSH_FILE:-${HOME}/.ssh/id_rsa}" +DREVOPS_DEPLOY_SSH_FILE="${DREVOPS_DEPLOY_SSH_FILE:-${HOME}/.ssh/id_rsa}" # Location of the Lagoon CLI binary. DREVOPS_DEPLOY_LAGOON_LAGOONCLI_BIN_PATH="${DREVOPS_DEPLOY_LAGOON_LAGOONCLI_BIN_PATH:-/tmp}" @@ -60,167 +70,174 @@ DREVOPS_DEPLOY_LAGOON_LAGOONCLI_VERSION="${DREVOPS_DEPLOY_LAGOON_LAGOONCLI_VERSI # ------------------------------------------------------------------------------ -echo "==> Started LAGOON deployment." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started LAGOON deployment." ## Check all required values. -[ -z "${DREVOPS_DEPLOY_LAGOON_PROJECT}" ] && echo "Missing required value for DREVOPS_DEPLOY_LAGOON_PROJECT." && exit 1 -{ [ -z "${DREVOPS_DEPLOY_LAGOON_BRANCH}" ] && [ -z "${DREVOPS_DEPLOY_LAGOON_PR}" ]; } && echo "Missing required value for DREVOPS_DEPLOY_LAGOON_BRANCH or DREVOPS_DEPLOY_LAGOON_PR." && exit 1 +[ -z "${LAGOON_PROJECT}" ] && fail "Missing required value for LAGOON_PROJECT." && exit 1 +{ [ -z "${DREVOPS_DEPLOY_BRANCH}" ] && [ -z "${DREVOPS_DEPLOY_PR}" ]; } && fail "Missing required value for DREVOPS_DEPLOY_BRANCH or DREVOPS_DEPLOY_PR." && exit 1 # Use custom deploy key if fingerprint is provided. -if [ -n "${DREVOPS_DEPLOY_LAGOON_SSH_FINGERPRINT}" ]; then - echo "==> Custom deployment key is provided." - DREVOPS_DEPLOY_LAGOON_SSH_FILE="${DREVOPS_DEPLOY_LAGOON_SSH_FINGERPRINT//:}" - DREVOPS_DEPLOY_LAGOON_SSH_FILE="${HOME}/.ssh/id_rsa_${DREVOPS_DEPLOY_LAGOON_SSH_FILE//\"}" +if [ -n "${DREVOPS_DEPLOY_SSH_FINGERPRINT}" ]; then + note "Custom deployment key is provided." + DREVOPS_DEPLOY_SSH_FILE="${DREVOPS_DEPLOY_SSH_FINGERPRINT//:/}" + DREVOPS_DEPLOY_SSH_FILE="${HOME}/.ssh/id_rsa_${DREVOPS_DEPLOY_SSH_FILE//\"/}" fi -[ ! -f "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" ] && echo "ERROR: SSH key file ${DREVOPS_DEPLOY_LAGOON_SSH_FILE} does not exist." && exit 1 +[ ! -f "${DREVOPS_DEPLOY_SSH_FILE}" ] && fail "SSH key file ${DREVOPS_DEPLOY_SSH_FILE} does not exist." && exit 1 -if ssh-add -l | grep -q "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}"; then - echo "==> SSH agent has ${DREVOPS_DEPLOY_LAGOON_SSH_FILE} key loaded." +if ssh-add -l | grep -q "${DREVOPS_DEPLOY_SSH_FILE}"; then + note "SSH agent has ${DREVOPS_DEPLOY_SSH_FILE} key loaded." else - echo "==> SSH agent does not have default key loaded. Trying to load." + note "SSH agent does not have default key loaded. Trying to load." # Remove all other keys and add SSH key from provided fingerprint into SSH agent. - ssh-add -D > /dev/null - ssh-add "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" + ssh-add -D >/dev/null + ssh-add "${DREVOPS_DEPLOY_SSH_FILE}" fi # Disable strict host key checking in CI. -[ -n "${CI}" ] && mkdir -p "${HOME}/.ssh/" && echo -e "\nHost *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null\n" >> "${HOME}/.ssh/config" +[ -n "${CI:-}" ] && mkdir -p "${HOME}/.ssh/" && echo -e "\nHost *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null\n" >>"${HOME}/.ssh/config" if ! command -v lagoon >/dev/null || [ -n "${DREVOPS_DEPLOY_LAGOON_LAGOONCLI_FORCE_INSTALL}" ]; then - echo "==> Installing Lagoon CLI." + note "Installing Lagoon CLI." lagooncli_download_url="https://api.github.com/repos/uselagoon/lagoon-cli/releases/latest" if [ "${DREVOPS_DEPLOY_LAGOON_LAGOONCLI_VERSION}" != "latest" ]; then lagooncli_download_url="https://api.github.com/repos/uselagoon/lagoon-cli/releases/tags/${DREVOPS_DEPLOY_LAGOON_LAGOONCLI_VERSION}" fi - curl -sL "${lagooncli_download_url}" \ - | grep "browser_download_url" \ - | grep -i "$(uname -s)-amd64\"$" \ - | cut -d '"' -f 4 \ - | xargs curl -L -o "${DREVOPS_DEPLOY_LAGOON_LAGOONCLI_BIN_PATH}/lagoon" + curl -sL "${lagooncli_download_url}" | + grep "browser_download_url" | + grep -i "$(uname -s)-amd64\"$" | + cut -d '"' -f 4 | + xargs curl -L -o "${DREVOPS_DEPLOY_LAGOON_LAGOONCLI_BIN_PATH}/lagoon" chmod +x "${DREVOPS_DEPLOY_LAGOON_LAGOONCLI_BIN_PATH}/lagoon" export PATH="${PATH}:${DREVOPS_DEPLOY_LAGOON_LAGOONCLI_BIN_PATH}" fi -echo "==> Configuring Lagoon instance." +note "Configuring Lagoon instance." lagoon config add --force -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" -g "${DREVOPS_DEPLOY_LAGOON_INSTANCE_GRAPHQL}" -H "${DREVOPS_DEPLOY_LAGOON_INSTANCE_HOSTNAME}" -P "${DREVOPS_DEPLOY_LAGOON_INSTANCE_PORT}" # ACTION: 'destroy' # Explicitly specifying "destroy" action as a failsafe. -if [ "${DREVOPS_DEPLOY_LAGOON_ACTION}" = "destroy" ]; then - echo " > Destroying environment: project ${DREVOPS_DEPLOY_LAGOON_PROJECT}, branch: ${DREVOPS_DEPLOY_LAGOON_BRANCH}." - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete environment -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_LAGOON_BRANCH}" || true +if [ "${DREVOPS_DEPLOY_ACTION}" = "destroy" ]; then + note "Destroying environment: project ${LAGOON_PROJECT}, branch: ${DREVOPS_DEPLOY_BRANCH}." + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete environment -p "${LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_BRANCH}" || true # ACTION: 'deploy' OR 'deploy_override_db' else # Deploy PR. - if [ -n "${DREVOPS_DEPLOY_LAGOON_PR}" ]; then - deploy_pr_full="pr-${DREVOPS_DEPLOY_LAGOON_PR}" + if [ -n "${DREVOPS_DEPLOY_PR:-}" ]; then + deploy_pr_full="pr-${DREVOPS_DEPLOY_PR}" # Discover all available environments to check if this is a fresh deployment # or a re-deployment of the existing environment. - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" list environments -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" --output-json --pretty >/tmp/lagoon-envs.json - names="$(jq -r '.data[] | select(.deploytype | contains("pullrequest")) | .name' /tmp/lagoon-envs.json 2>&1 /dev/null || echo '')" + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" list environments -p "${LAGOON_PROJECT}" --output-json --pretty >/tmp/lagoon-envs.json + names="$(jq -r '.data[] | select(.deploytype | contains("pullrequest")) | .name' /tmp/lagoon-envs.json /dev/null 2>&1 || echo '')" is_redeploy=0 - for name in $names; do + for name in ${names}; do if [ "${deploy_pr_full}" = "${name}" ]; then - echo " > Found already deployed environment for PR \"${DREVOPS_DEPLOY_LAGOON_PR}\"." - is_redeploy=1; - break; + note "Found already deployed environment for PR \"${DREVOPS_DEPLOY_PR}\"." + is_redeploy=1 + break fi done # Re-deployment of the existing environment. - if [ "${is_redeploy}" = "1" ]; then + if [ "${is_redeploy:-}" = "1" ]; then # Explicitly set DB overwrite flag to 0 due to a bug in Lagoon. # @see https://github.com/uselagoon/lagoon/issues/1922 - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB || true - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB -V 0 -S global || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_PROVISION_OVERRIDE_DB || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_PROVISION_OVERRIDE_DB -V 0 -S global || true # Override DB during re-deployment. - if [ "${DREVOPS_DEPLOY_LAGOON_ACTION}" = "deploy_override_db" ]; then - echo " > Add a DB import override flag for the current deployment." + if [ "${DREVOPS_DEPLOY_ACTION}" = "deploy_override_db" ]; then + note "Add a DB import override flag for the current deployment." # To update variable value, we need to remove it and add again. - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB || true - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB -V 1 -S global || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_PROVISION_OVERRIDE_DB || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_PROVISION_OVERRIDE_DB -V 1 -S global || true fi - echo " > Redeploying environment: project ${DREVOPS_DEPLOY_LAGOON_PROJECT}, PR: ${DREVOPS_DEPLOY_LAGOON_PR}." - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" deploy pullrequest -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -n "${DREVOPS_DEPLOY_LAGOON_PR}" --baseBranchName "${DREVOPS_DEPLOY_LAGOON_PR_BASE_BRANCH}" -R "origin/${DREVOPS_DEPLOY_LAGOON_PR_BASE_BRANCH}" -H "${DREVOPS_DEPLOY_LAGOON_BRANCH}" -M "${DREVOPS_DEPLOY_LAGOON_PR_HEAD}" -t "${deploy_pr_full}" + note "Redeploying environment: project ${LAGOON_PROJECT}, PR: ${DREVOPS_DEPLOY_PR}." + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" deploy pullrequest -p "${LAGOON_PROJECT}" -n "${DREVOPS_DEPLOY_PR}" --baseBranchName "${DREVOPS_DEPLOY_PR_BASE_BRANCH}" -R "origin/${DREVOPS_DEPLOY_PR_BASE_BRANCH}" -H "${DREVOPS_DEPLOY_BRANCH}" -M "${DREVOPS_DEPLOY_PR_HEAD}" -t "${deploy_pr_full}" - if [ "${DREVOPS_DEPLOY_LAGOON_ACTION}" = "deploy_override_db" ]; then - echo " > Waiting for deployment to be queued." + if [ "${DREVOPS_DEPLOY_ACTION:-}" = "deploy_override_db" ]; then + note "Waiting for deployment to be queued." sleep 10 - echo " > Remove a DB import override flag for the current deployment." + note "Remove a DB import override flag for the current deployment." # Note that a variable will be read by Lagoon during queuing of the build. - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB || true - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB -V 0 -S global || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_PROVISION_OVERRIDE_DB || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${LAGOON_PROJECT}" -e "${deploy_pr_full}" -N DREVOPS_PROVISION_OVERRIDE_DB -V 0 -S global || true fi # Deployment of the fresh environment. else # If PR deployments are not configured in Lagoon - it will filter it out and will not deploy. - echo " > Deploying environment: project ${DREVOPS_DEPLOY_LAGOON_PROJECT}, PR: ${DREVOPS_DEPLOY_LAGOON_PR}." - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" deploy pullrequest -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -n "${DREVOPS_DEPLOY_LAGOON_PR}" --baseBranchName "${DREVOPS_DEPLOY_LAGOON_PR_BASE_BRANCH}" -R "origin/${DREVOPS_DEPLOY_LAGOON_PR_BASE_BRANCH}" -H "${DREVOPS_DEPLOY_LAGOON_BRANCH}" -M "${DREVOPS_DEPLOY_LAGOON_PR_HEAD}" -t "${deploy_pr_full}" + note "Deploying environment: project ${LAGOON_PROJECT}, PR: ${DREVOPS_DEPLOY_PR}." + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" deploy pullrequest -p "${LAGOON_PROJECT}" -n "${DREVOPS_DEPLOY_PR}" --baseBranchName "${DREVOPS_DEPLOY_PR_BASE_BRANCH}" -R "origin/${DREVOPS_DEPLOY_PR_BASE_BRANCH}" -H "${DREVOPS_DEPLOY_BRANCH}" -M "${DREVOPS_DEPLOY_PR_HEAD}" -t "${deploy_pr_full}" fi # Deploy branch. else # Discover all available environments to check if this is a fresh deployment # or a re-deployment of the existing environment. - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" list environments -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" --output-json --pretty >/tmp/lagoon-envs.json - names="$(jq -r '.data[] | select(.deploytype | contains("branch")) | .name' /tmp/lagoon-envs.json 2>&1 /dev/null || echo '')" + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" list environments -p "${LAGOON_PROJECT}" --output-json --pretty >/tmp/lagoon-envs.json + names="$(jq -r '.data[] | select(.deploytype | contains("branch")) | .name' /tmp/lagoon-envs.json /dev/null 2>&1 || echo '')" is_redeploy=0 - for name in $names; do - if [ "${DREVOPS_DEPLOY_LAGOON_BRANCH}" = "${name}" ]; then - echo " > Found already deployed environment for branch \"${DREVOPS_DEPLOY_LAGOON_BRANCH}\"." - is_redeploy=1; - break; + for name in ${names}; do + if [ "${DREVOPS_DEPLOY_BRANCH:-}" = "${name}" ]; then + note "Found already deployed environment for branch \"${DREVOPS_DEPLOY_BRANCH}\"." + is_redeploy=1 + break fi done # Re-deployment of the existing environment. - if [ "${is_redeploy}" = "1" ]; then + if [ "${is_redeploy:-}" = "1" ]; then # Explicitly set DB overwrite flag to 0 due to a bug in Lagoon. # @see https://github.com/uselagoon/lagoon/issues/1922 - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_LAGOON_BRANCH}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB || true - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_LAGOON_BRANCH}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB -V 0 -S global || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_BRANCH}" -N DREVOPS_PROVISION_OVERRIDE_DB || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_BRANCH}" -N DREVOPS_PROVISION_OVERRIDE_DB -V 0 -S global || true # Override DB during re-deployment. - if [ "${DREVOPS_DEPLOY_LAGOON_ACTION}" = "deploy_override_db" ]; then - echo " > Add a DB import override flag for the current deployment." + if [ "${DREVOPS_DEPLOY_ACTION:-}" = "deploy_override_db" ]; then + note "Add a DB import override flag for the current deployment." # To update variable value, we need to remove it and add again. - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_LAGOON_BRANCH}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB || true - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_LAGOON_BRANCH}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB -V 1 -S global || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_BRANCH}" -N DREVOPS_PROVISION_OVERRIDE_DB || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_BRANCH}" -N DREVOPS_PROVISION_OVERRIDE_DB -V 1 -S global || true fi - echo " > Redeploying environment: project ${DREVOPS_DEPLOY_LAGOON_PROJECT}, branch: ${DREVOPS_DEPLOY_LAGOON_BRANCH}." - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" deploy latest -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_LAGOON_BRANCH}" || true + note "Redeploying environment: project ${LAGOON_PROJECT}, branch: ${DREVOPS_DEPLOY_BRANCH}." + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" deploy latest -p "${LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_BRANCH}" || true - if [ "${DREVOPS_DEPLOY_LAGOON_ACTION}" = "deploy_override_db" ]; then - echo " > Waiting for deployment to be queued." + if [ "${DREVOPS_DEPLOY_ACTION:-}" = "deploy_override_db" ]; then + note "Waiting for deployment to be queued." sleep 10 - echo " > Remove a DB import override flag for the current deployment." + note "Remove a DB import override flag for the current deployment." # Note that a variable will be read by Lagoon during queuing of the build. - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_LAGOON_BRANCH}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB || true - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_LAGOON_BRANCH}" -N DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB -V 0 -S global || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" delete variable -p "${LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_BRANCH}" -N DREVOPS_PROVISION_OVERRIDE_DB || true + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" add variable -p "${LAGOON_PROJECT}" -e "${DREVOPS_DEPLOY_BRANCH}" -N DREVOPS_PROVISION_OVERRIDE_DB -V 0 -S global || true fi # Deployment of the fresh environment. else # If current branch deployments does not match a regex in Lagoon - it will filter it out and will not deploy. - echo " > Deploying environment: project ${DREVOPS_DEPLOY_LAGOON_PROJECT}, branch: ${DREVOPS_DEPLOY_LAGOON_BRANCH}." - lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_LAGOON_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" deploy branch -p "${DREVOPS_DEPLOY_LAGOON_PROJECT}" -b "${DREVOPS_DEPLOY_LAGOON_BRANCH}" + note "Deploying environment: project ${LAGOON_PROJECT}, branch: ${DREVOPS_DEPLOY_BRANCH}." + lagoon --force --skip-update-check -i "${DREVOPS_DEPLOY_SSH_FILE}" -l "${DREVOPS_DEPLOY_LAGOON_INSTANCE}" deploy branch -p "${LAGOON_PROJECT}" -b "${DREVOPS_DEPLOY_BRANCH}" fi fi fi -echo "==> Finished LAGOON deployment." +pass "Finished LAGOON deployment." diff --git a/scripts/drevops/deploy-webhook.sh b/scripts/drevops/deploy-webhook.sh index 3dfde8948..80cd772e7 100755 --- a/scripts/drevops/deploy-webhook.sh +++ b/scripts/drevops/deploy-webhook.sh @@ -2,9 +2,14 @@ ## # Deploy by calling a webhook. # +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # The URL of the webhook to call. # Note that any tokens should be added to the value of this variable outside @@ -19,20 +24,27 @@ DREVOPS_DEPLOY_WEBHOOK_RESPONSE_STATUS=${DREVOPS_DEPLOY_WEBHOOK_RESPONSE_STATUS: # ------------------------------------------------------------------------------ -echo "==> Started WEBHOOK deployment." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started WEBHOOK deployment." # Check all required values. -[ -z "${DREVOPS_DEPLOY_WEBHOOK_URL}" ] && echo "Missing required value for DREVOPS_DEPLOY_WEBHOOK_URL." && exit 1 -[ -z "${DREVOPS_DEPLOY_WEBHOOK_METHOD}" ] && echo "Missing required value for DREVOPS_DEPLOY_WEBHOOK_METHOD." && exit 1 -[ -z "${DREVOPS_DEPLOY_WEBHOOK_RESPONSE_STATUS}" ] && echo "Missing required value for DREVOPS_DEPLOY_WEBHOOK_RESPONSE_STATUS." && exit 1 +[ -z "${DREVOPS_DEPLOY_WEBHOOK_URL}" ] && fail "Missing required value for DREVOPS_DEPLOY_WEBHOOK_URL." && exit 1 +[ -z "${DREVOPS_DEPLOY_WEBHOOK_METHOD}" ] && fail "Missing required value for DREVOPS_DEPLOY_WEBHOOK_METHOD." && exit 1 +[ -z "${DREVOPS_DEPLOY_WEBHOOK_RESPONSE_STATUS}" ] && fail "Missing required value for DREVOPS_DEPLOY_WEBHOOK_RESPONSE_STATUS." && exit 1 if curl -X "${DREVOPS_DEPLOY_WEBHOOK_METHOD}" -L -s -o /dev/null -w "%{http_code}" "${DREVOPS_DEPLOY_WEBHOOK_URL}" | grep -q "${DREVOPS_DEPLOY_WEBHOOK_RESPONSE_STATUS}"; then # Note that we do not output ${DREVOPS_DEPLOY_WEBHOOK_URL} as it may contain # secrets that would be printed to the terminal. - echo " > Successfully called webhook." + note "Webhook call completed." else - echo "ERROR: Webhook deployment failed." + fail "Unable to complete webhook deployment." exit 1 fi -echo "==> Finished WEBHOOK deployment." +pass "Finished WEBHOOK deployment." diff --git a/scripts/drevops/deploy.sh b/scripts/drevops/deploy.sh index 4dcccb735..63f4e5d5e 100755 --- a/scripts/drevops/deploy.sh +++ b/scripts/drevops/deploy.sh @@ -5,113 +5,125 @@ # Deployment may include pushing code, pushing created docker image, notifying # remote hosting service via webhook call etc. # -# This is a router script to call relevant deployment scripts based on type. +# Multiple deployments can be configured by providing a comma-separated list of +# deployment types in $DREVOPS_DEPLOY_TYPES variable. # -# For required variables based on the deployment type, -# see ./scripts/drevops/deployment-[type].sh file. +# This is a router script to call relevant scripts based on type. +# +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x -# The type of deployment. Can be a combination of comma-separated values (to -# support multiple deployments): code, docker, webhook, lagoon. -DREVOPS_DEPLOY_TYPE="${DREVOPS_DEPLOY_TYPE:-${1}}" +# The types of deployment. +# +# Can be a combination of comma-separated values (to support multiple +# deployments): code, docker, webhook, lagoon. +DREVOPS_DEPLOY_TYPES="${DREVOPS_DEPLOY_TYPES:-}" + +# Deployment mode. +# +# Values can be one of: branch, tag. +DREVOPS_DEPLOY_MODE="${DREVOPS_DEPLOY_MODE:-branch}" # Deployment action. +# # Values can be one of: deploy, deploy_override_db, destroy. -DREVOPS_DEPLOY_ACTION="${DREVOPS_DEPLOY_ACTION:-deploy}" +# - deploy: Deploy code and preserve database in the environment. +# - deploy_override_db: Deploy code and override database in the environment. +# - destroy: Destroy the environment (if the provider supports it). +DREVOPS_DEPLOY_ACTION="${DREVOPS_DEPLOY_ACTION:-}" -# Deployment pull request number without "pr-" prefix. +# Deployment branch name. DREVOPS_DEPLOY_BRANCH="${DREVOPS_DEPLOY_BRANCH:-}" # Deployment pull request number without "pr-" prefix. DREVOPS_DEPLOY_PR="${DREVOPS_DEPLOY_PR:-}" -# Flag to proceed with deployment. Set to 1 once the deployment configuration -# is configured in CI and is ready. +# Flag to proceed with deployment. +# Usually set to 1 once the deployment configuration is configured in CI and +# is ready for use. DREVOPS_DEPLOY_PROCEED="${DREVOPS_DEPLOY_PROCEED:-}" # Flag to allow skipping of a deployment using additional flags. -# Different to DREVOPS_DEPLOY_PROCEED in a way that DREVOPS_DEPLOY_PROCEED is a failsafe -# to prevent any deployments, while DREVOPS_DEPLOY_SKIP allows to selectively skip -# certain deployments using 'DREVOPS_DEPLOY_SKIP_PR_' and -# 'DREVOPS_DEPLOY_SKIP_BRANCH_' variables. -DREVOPS_DEPLOY_SKIP="${DREVOPS_DEPLOY_SKIP:-}" +# +# Different to $DREVOPS_DEPLOY_PROCEED in a way that $DREVOPS_DEPLOY_PROCEED is +# a failsafe to prevent any deployments, while $DREVOPS_DEPLOY_SKIP allows to +# selectively skip certain deployments using `$DREVOPS_DEPLOY_SKIP_PR_' +# and `$DREVOPS_DEPLOY_SKIP_BRANCH_` variables. +DREVOPS_DEPLOY_ALLOW_SKIP="${DREVOPS_DEPLOY_ALLOW_SKIP:-}" # ------------------------------------------------------------------------------ -[ -z "${DREVOPS_DEPLOY_TYPE}" ] && echo "Missing required value for DREVOPS_DEPLOY_TYPE. Must be a combination of comma-separated values (to support multiple deployments): code, docker, webhook, lagoon." && exit 1 +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started deployment." + +[ -z "${DREVOPS_DEPLOY_TYPES}" ] && fail "Missing required value for DREVOPS_DEPLOY_TYPES. Must be a combination of comma-separated values (to support multiple deployments): code, docker, webhook, lagoon." && exit 1 if [ "${DREVOPS_DEPLOY_PROCEED}" != "1" ]; then - echo "Skipping deployment ${DREVOPS_DEPLOY_TYPE}." && exit 0 + echo "DREVOPS_DEPLOY_PROCEED is not set to 1." && pass "Skipping deployment ${DREVOPS_DEPLOY_TYPES}." && exit 0 fi -if [ "${DREVOPS_DEPLOY_SKIP}" = "1" ]; then - echo " > Found flag to skip a deployment." +if [ "${DREVOPS_DEPLOY_ALLOW_SKIP:-}" = "1" ]; then + note "Found flag to skip a deployment." if [ -n "${DREVOPS_DEPLOY_PR}" ]; then - # Allow skipping deployment by providing 'DREVOPS_DEPLOY_SKIP_PR_' - # variable with value set to "1", where is a PR number name with + # Allow skipping deployment by providing `$DREVOPS_DEPLOY_SKIP_PR_` + # variable with value set to "1", where `` is a PR number name with # spaces, hyphens and forward slashes replaced with underscores and then # capitalised. # # Example: - # For 'pr-123' branch, the variable name is DREVOPS_DEPLOY_SKIP_PR_123 + # For PR named 'pr-123', the variable name is $DREVOPS_DEPLOY_SKIP_PR_123 pr_skip_var="DREVOPS_DEPLOY_SKIP_PR_${DREVOPS_DEPLOY_PR}" if [ -n "${!pr_skip_var}" ]; then - echo " > Found skip variable $pr_skip_var for PR ${DREVOPS_DEPLOY_PR}." - echo "Skipping deployment ${DREVOPS_DEPLOY_TYPE}." && exit 0 + note "Found skip variable ${pr_skip_var} for PR ${DREVOPS_DEPLOY_PR}." + pass "Skipping deployment ${DREVOPS_DEPLOY_TYPES}." && exit 0 fi fi - if [ -n "${DREVOPS_DEPLOY_BRANCH}" ]; then + if [ -n "${DREVOPS_DEPLOY_BRANCH:-}" ]; then # Allow skipping deployment by providing 'DREVOPS_DEPLOY_SKIP_BRANCH_' # variable with value set to "1", where is a branch name with # spaces, hyphens and forward slashes replaced with underscores and then # capitalised. # # Example: - # For 'main' branch, the variable name is DREVOPS_DEPLOY_SKIP_BRANCH_MAIN + # For 'main' branch, the variable name is $DREVOPS_DEPLOY_SKIP_BRANCH_MAIN # For 'feature/my complex feature-123 update' branch, the variable name - # is DREVOPS_DEPLOY_SKIP_BRANCH_MY_COMPLEX_FEATURE_123_UPDATE + # is $DREVOPS_DEPLOY_SKIP_BRANCH_MY_COMPLEX_FEATURE_123_UPDATE safe_branch_name="$(echo "${DREVOPS_DEPLOY_BRANCH}" | tr -d '\n' | tr '[:space:]' '_' | tr '-' '_' | tr '/' '_' | tr -cd '[:alnum:]_' | tr '[:lower:]' '[:upper:]')" branch_skip_var="DREVOPS_DEPLOY_SKIP_BRANCH_${safe_branch_name}" - if [ -n "${!branch_skip_var}" ]; then - echo " > Found skip variable $branch_skip_var for branch ${DREVOPS_DEPLOY_BRANCH}." - echo "Skipping deployment ${DREVOPS_DEPLOY_TYPE}." && exit 0 + if [ -n "${!branch_skip_var:-}" ]; then + note "Found skip variable ${branch_skip_var} for branch ${DREVOPS_DEPLOY_BRANCH}." + pass "Skipping deployment ${DREVOPS_DEPLOY_TYPES}." && exit 0 fi fi fi -if [ -z "${DREVOPS_DEPLOY_TYPE##*artifact*}" ]; then - echo "==> Started 'artifact' deployment." - export DREVOPS_DEPLOY_ARTIFACT_SSH_FINGERPRINT="${DREVOPS_DEPLOY_SSH_FINGERPRINT:-${DREVOPS_DEPLOY_ARTIFACT_SSH_FINGERPRINT}}" - export DREVOPS_DEPLOY_ARTIFACT_SSH_FILE="${DREVOPS_DEPLOY_SSH_FILE:-${DREVOPS_DEPLOY_ARTIFACT_SSH_FILE}}" +if [ -z "${DREVOPS_DEPLOY_TYPES##*artifact*}" ]; then + [ "${DREVOPS_DEPLOY_MODE}" = "tag" ] && export DREVOPS_DEPLOY_ARTIFACT_DST_BRANCH="deployment/[tags:-]" ./scripts/drevops/deploy-artifact.sh fi -if [ -z "${DREVOPS_DEPLOY_TYPE##*webhook*}" ]; then - echo "==> Started 'webhook' deployment." +if [ -z "${DREVOPS_DEPLOY_TYPES##*webhook*}" ]; then ./scripts/drevops/deploy-webhook.sh fi -if [ -z "${DREVOPS_DEPLOY_TYPE##*docker*}" ]; then - echo "==> Started 'docker' deployment." - export DREVOPS_DEPLOY_DOCKER_REGISTRY_USERNAME="${DREVOPS_DOCKER_REGISTRY_USERNAME:-${DREVOPS_DEPLOY_DOCKER_REGISTRY_USERNAME}}" - export DREVOPS_DEPLOY_DOCKER_REGISTRY_TOKEN="${DREVOPS_DOCKER_REGISTRY_TOKEN:-${DREVOPS_DEPLOY_DOCKER_REGISTRY_TOKEN}}" - export DREVOPS_DEPLOY_DOCKER_REGISTRY="${DREVOPS_DOCKER_REGISTRY:-${DREVOPS_DEPLOY_DOCKER_REGISTRY}}" +if [ -z "${DREVOPS_DEPLOY_TYPES##*docker*}" ]; then ./scripts/drevops/deploy-docker.sh fi -if [ -z "${DREVOPS_DEPLOY_TYPE##*lagoon*}" ]; then - echo "==> Started 'lagoon' deployment." - export DREVOPS_DEPLOY_LAGOON_SSH_FINGERPRINT="${DREVOPS_DEPLOY_SSH_FINGERPRINT:-${DREVOPS_DEPLOY_LAGOON_SSH_FINGERPRINT}}" - export DREVOPS_DEPLOY_LAGOON_SSH_FILE="${DREVOPS_DEPLOY_SSH_FILE:-${DREVOPS_DEPLOY_LAGOON_SSH_FILE}}" - export DREVOPS_DEPLOY_LAGOON_PROJECT="${LAGOON_PROJECT:-${DREVOPS_DEPLOY_LAGOON_PROJECT}}" - export DREVOPS_DEPLOY_LAGOON_ACTION="${DREVOPS_DEPLOY_ACTION:-${DREVOPS_DEPLOY_LAGOON_ACTION}}" - export DREVOPS_DEPLOY_LAGOON_BRANCH="${DREVOPS_DEPLOY_BRANCH:-${DREVOPS_DEPLOY_LAGOON_BRANCH}}" - export DREVOPS_DEPLOY_LAGOON_PR="${DREVOPS_DEPLOY_PR:-${DREVOPS_DEPLOY_LAGOON_PR}}" - export DREVOPS_DEPLOY_LAGOON_PR_HEAD="${DREVOPS_DEPLOY_PR_HEAD:-${DREVOPS_DEPLOY_LAGOON_PR_HEAD}}" - export DREVOPS_DEPLOY_LAGOON_PR_BASE_BRANCH="${DREVOPS_DEPLOY_PR_BASE_BRANCH:-${DREVOPS_DEPLOY_LAGOON_PR_BASE_BRANCH}}" +if [ -z "${DREVOPS_DEPLOY_TYPES##*lagoon*}" ]; then ./scripts/drevops/deploy-lagoon.sh fi diff --git a/scripts/drevops/docker-login.sh b/scripts/drevops/docker-login.sh deleted file mode 100755 index 6dca1dca8..000000000 --- a/scripts/drevops/docker-login.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -## -# Login to Docker container registry. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# The username of the docker registry. -DREVOPS_DOCKER_REGISTRY_USERNAME="${DREVOPS_DOCKER_REGISTRY_USERNAME:-}" - -# The token of the docker registry. -DREVOPS_DOCKER_REGISTRY_TOKEN="${DREVOPS_DOCKER_REGISTRY_TOKEN:-}" - -# Docker registry name. Provide port, if required as :. -DREVOPS_DOCKER_REGISTRY="${DREVOPS_DOCKER_REGISTRY:-docker.io}" - -# ------------------------------------------------------------------------------ - -# Check all required values. -[ -z "${DREVOPS_DOCKER_REGISTRY}" ] && echo "Missing required value for DREVOPS_DOCKER_REGISTRY." && exit 1 - -if [ -f "$HOME/.docker/config.json" ] && grep -q "${DREVOPS_DOCKER_REGISTRY}" "$HOME/.docker/config.json"; then - echo " > Already logged in to registry \"${DREVOPS_DOCKER_REGISTRY}\"." -elif [ -n "${DREVOPS_DOCKER_REGISTRY_USERNAME}" ] && [ -n "${DREVOPS_DOCKER_REGISTRY_TOKEN}" ]; then - echo " > Logging in to registry \"${DREVOPS_DOCKER_REGISTRY}\"." - echo "${DREVOPS_DOCKER_REGISTRY_TOKEN}" | docker login --username "${DREVOPS_DOCKER_REGISTRY_USERNAME}" --password-stdin "${DREVOPS_DOCKER_REGISTRY}" -else - echo " > Skipping login into Docker registry as either DREVOPS_DOCKER_REGISTRY_USERNAME or DREVOPS_DOCKER_REGISTRY_TOKEN was not provided." -fi diff --git a/scripts/drevops/docker-restore-image.sh b/scripts/drevops/docker-restore-image.sh deleted file mode 100755 index 8309c9d4d..000000000 --- a/scripts/drevops/docker-restore-image.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash -## -# Restore Docker image from archive. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Docker image archive file name. -DREVOPS_DOCKER_RESTORE_IMAGE="${1:-}" - -# Docker image archive file to restore passed as a second argument to this script. -DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE="${2:-}" - -#------------------------------------------------------------------------------- - -echo "==> Started Docker image restore" - -[ -z "${DREVOPS_DOCKER_RESTORE_IMAGE}" ] && echo "ERROR: image name is not specified. Provide Docker image name as a first argument to this script in a format /." && exit 1 -[ -z "${DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE}" ] && echo "ERROR: image archive file name is not specified. Provide Docker image archive file name as a second argument to this script." && exit 1 - -docker image inspect "${DREVOPS_DOCKER_RESTORE_IMAGE}" >/dev/null 2>&1 \ - && echo " > Found ${DREVOPS_DOCKER_RESTORE_IMAGE} image on host." \ - || echo " > Not found ${DREVOPS_DOCKER_RESTORE_IMAGE} image on host." - -if [ -f "${DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE}" ]; then - echo " > Found archived database Docker image file ${DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE}. Expanding..." - # Always use archived image, even if such image already exists on the host. - docker load -q --input "${DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE}" - # Check that image was expanded and now exists on the host or notify - # that it will be downloaded from the registry. - docker image inspect "${DREVOPS_DOCKER_RESTORE_IMAGE}" >/dev/null 2>&1 \ - && echo " > Found expanded ${DREVOPS_DOCKER_RESTORE_IMAGE} image on host." \ - || echo " > Not found expanded ${DREVOPS_DOCKER_RESTORE_IMAGE} image on host. The image will be pulled from the registry." -else - echo " > Not found archived database Docker image file ${DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE}." -fi - -echo "==> Finished Docker image restore" diff --git a/scripts/drevops/doctor.sh b/scripts/drevops/doctor.sh index 0b8dfec32..1141bd1c9 100755 --- a/scripts/drevops/doctor.sh +++ b/scripts/drevops/doctor.sh @@ -1,10 +1,18 @@ #!/usr/bin/env bash # -# Check DrevOps project requirements. +# Check DrevOps project requirements or print info. # +# doctor.sh - check project requirements. +# doctor.sh info - show system information. +# +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Check minimal Doctor requirements. DREVOPS_DOCTOR_CHECK_MINIMAL="${DREVOPS_DOCTOR_CHECK_MINIMAL:-0}" @@ -51,137 +59,161 @@ DREVOPS_DOCTOR_CHECK_WEBSERVER="${DREVOPS_DOCTOR_CHECK_WEBSERVER:-1}" # Check Doctor requirements for application bootstrap status. DREVOPS_DOCTOR_CHECK_BOOTSTRAP="${DREVOPS_DOCTOR_CHECK_BOOTSTRAP:-1}" -# Local development URL. -DREVOPS_DOCTOR_LOCALDEV_URL="${DREVOPS_DOCTOR_LOCALDEV_URL:-${DREVOPS_LOCALDEV_URL}}" - # Default SSH key file. DREVOPS_DOCTOR_SSH_KEY_FILE="${DREVOPS_DOCTOR_SSH_KEY_FILE:-${HOME}/.ssh/id_rsa}" #------------------------------------------------------------------------------- +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +warn() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[33m[WARN] %s\033[0m\n" "${1}" || printf "[WARN] %s\n" "${1}"; } +# @formatter:on + # # Main entry point. # main() { - [ "$1" = "info" ] && system_info && exit + [ "${1:-}" = "info" ] && system_info && exit - cecho blue "🔎 Checking project requirements" + info "Checking project requirements" if [ "${DREVOPS_DOCTOR_CHECK_TOOLS}" = "1" ]; then - [ "$(command_exists docker)" = "1" ] && error "Please install Docker (https://www.docker.com/get-started)." && exit 1 - [ "$(command_exists docker-compose)" = "1" ] && error "Please install docker-compose (https://docs.docker.com/compose/install/)." && exit 1 - [ "$(command_exists pygmy)" = "1" ] && error "Please install Pygmy (https://pygmy.readthedocs.io/)." && exit 1 - [ "$(command_exists ahoy)" = "1" ] && error "Please install Ahoy (https://ahoy-cli.readthedocs.io/)." && exit 1 - success "All required tools are present." + [ "$(command_exists docker)" = "1" ] && fail "Please install Docker (https://www.docker.com/get-started)." && exit 1 + [ "$(command_exists docker compose)" = "1" ] && fail "Please install docker compose (https://docs.docker.com/compose/install/)." && exit 1 + [ "$(command_exists pygmy)" = "1" ] && fail "Please install Pygmy (https://pygmy.readthedocs.io/)." && exit 1 + [ "$(command_exists ahoy)" = "1" ] && fail "Please install Ahoy (https://ahoy-cli.readthedocs.io/)." && exit 1 + pass "All required tools are present." fi if [ "${DREVOPS_DOCTOR_CHECK_PORT}" = "1" ] && [ "${OSTYPE}" != "linux-gnu" ]; then - if ! lsof -i :80 | grep LISTEN | grep -q om.docke; then - error "Port 80 is occupied by a service other than Docker. Stop this service and run 'pygmy up'." + if lsof -i :80 | grep -v 'CLOSED' | grep 'LISTEN' | grep -vq 'om.docke'; then + fail "Port 80 is occupied by a service other than Docker. Stop this service and run 'pygmy up'." + exit 1 fi - success "Port 80 is available." + pass "Port 80 is available." fi if [ "${DREVOPS_DOCTOR_CHECK_PYGMY}" = "1" ]; then - if ! pygmy status > /dev/null 2>&1; then - error "pygmy is not running. Run 'pygmy up' to start pygmy." - exit 1 - fi - success "Pygmy is running." + pygmy_status="$(pygmy status | tr -d '\000')" + + pygmy_services=() + pygmy_services+=("amazeeio-ssh-agent") + pygmy_services+=("amazeeio-mailhog") + pygmy_services+=("amazeeio-haproxy") + pygmy_services+=("amazeeio-dnsmasq") + + for pygmy_service in "${pygmy_services[@]}"; do + if ! echo "${pygmy_status}" | grep -q "${pygmy_service}: Running"; then + fail "Pygmy service ${pygmy_service} is not running. Run 'pygmy up' or 'pygmy restart' to fix." + exit 1 + fi + done + pass "Pygmy is running." fi # Check that the stack is running. if [ "${DREVOPS_DOCTOR_CHECK_CONTAINERS}" = "1" ]; then docker_services=(cli php nginx mariadb) for docker_service in "${docker_services[@]}"; do - # shellcheck disable=SC2143 - if [ -z "$(docker-compose ps -q "${docker_service}")" ] || [ -z "$(docker ps -q --no-trunc | grep "$(docker-compose ps -q "${docker_service}")")" ]; then - error "${docker_service} container is not running." - error "$(docker-compose logs)" - error "Run 'ahoy up'." + if ! docker compose ps --status=running --services | grep -q "${docker_service}"; then + fail "${docker_service} container is not running." + echo " Run 'ahoy up'." + echo " Run 'ahoy logs ${docker_service}' to see error logs." exit 1 fi done - success "All containers are running" + pass "All containers are running" fi if [ "${DREVOPS_DOCTOR_CHECK_SSH}" = "1" ]; then # SSH key injection is required to access Lagoon services from within - # containers. For example, to connect to production environment to run - # drush script. + # containers. For example, to connect to a production environment to run + # a drush script. # Pygmy makes this possible in the following way: - # 1. Pygmy starts `amazeeio/ssh-agent` container with a volume `/tmp/amazeeio_ssh-agent` + # 1. Pygmy starts the `amazeeio/ssh-agent` container with a volume `/tmp/amazeeio_ssh-agent` # 2. Pygmy adds a default SSH key from the host into this volume. - # 3. `docker-compose.yml` should have volume inclusion specified for CLI container: + # 3. `docker-compose.yml` should have volume inclusion specified for the CLI container: # ``` # volumes_from: # - container:amazeeio-ssh-agent # ``` - # 4. When CLI container starts, the volume is mounted and an entrypoint script - # adds SHH key into agent. - # @see https://github.com/uselagoon/lagoon-images/blob/main/images/php-cli/10-ssh-agent.sh + # 4. When the CLI container starts, the volume is mounted and an entrypoint + # script loads the SSH key into an agent. + # @see https://github.com/uselagoon/lagoon-images/blob/main/images/php-cli/entrypoints/10-ssh-agent.sh # - # Running `ssh-add -L` within CLI container should show that the SSH key - # is correctly loaded. + # Running `ssh-add -L` within the CLI container should show that the SSH key + # was correctly loaded. # - # As rule of a thumb, one must restart the CLI container after restarting - # Pygmy ONLY if SSH key was not loaded in pygmy before the stack starts. - # No need to restart CLI container if key was added, but pygmy was - # restarted - the volume mount will retain and the key will still be - # available in CLI container. + # As a rule of thumb, one must restart the CLI container after restarting + # Pygmy ONLY if the SSH key was not loaded in Pygmy before the stack starts. + # No need to restart the CLI container if the key was added, but Pygmy was + # restarted - the volume mount will be retained, and the key will still be + # available in the CLI container. + + ssh_key_added_to_pygmy=0 + ssh_key_volume_mounted=0 - ssh_key_added=1 # Check that the key is injected into pygmy ssh-agent container. if ! pygmy status 2>&1 | grep -q "${DREVOPS_DOCTOR_SSH_KEY_FILE}"; then - warning "SSH key is not added to pygmy. Run 'pygmy restart' and then 'ahoy up -- --build'." - ssh_key_added=0 + warn "SSH key is not added to pygmy." + note "The SSH key will not be available in CLI container. Run 'pygmy restart' and then 'ahoy up'" + else + ssh_key_added_to_pygmy=1 fi # Check that the volume is mounted into CLI container. - if ! docker exec -i "$(docker-compose ps -q cli)" bash -c "grep \"^/dev\" /etc/mtab | grep -q /tmp/amazeeio_ssh-agent"; then - warning "SSH key is added to Pygmy, but the volume is not mounted into container. Make sure that your your \"docker-compose.yml\" has the following lines:" - warning "volumes_from:" - warning " - container:amazeeio-ssh-agent" - warning "After adding these lines, run 'ahoy up -- --build'." - ssh_key_added=0 + if ! docker compose exec -T cli bash -c 'grep "^/dev" /etc/mtab | grep -q /tmp/amazeeio_ssh-agent'; then + warn "SSH key volume is not mounted into CLI container." + note 'Make sure that your "docker-compose.yml" has the following lines for CLI service:' + note " volumes_from:" + note " - container:amazeeio-ssh-agent" + note "After adding these lines, run 'ahoy up'." + else + ssh_key_volume_mounted=1 fi - # Check that ssh key is available in the container. - if [ "${ssh_key_added}" = "1" ] && ! docker exec -i "$(docker-compose ps -q cli)" bash -c "ssh-add -L | grep -q 'ssh-rsa'" ; then - warning "SSH key was not added into container. Run 'pygmy restart'." - ssh_key_added=0 + # Check that ssh key is available in the container, but only if the above checks passed. + if [ "${ssh_key_added_to_pygmy}" = "1" ] && [ "${ssh_key_volume_mounted}" = "1" ]; then + if ! docker compose exec -T cli bash -c "ssh-add -L | grep -q 'ssh-rsa'"; then + fail "SSH key was not added into container. Run 'pygmy restart'." + else + pass "SSH key is available within CLI container." + fi fi - - [ "${ssh_key_added}" = "1" ] && success "SSH key is available within CLI container." fi - if [ -n "${DREVOPS_DOCTOR_LOCALDEV_URL}" ]; then - if [ "${DREVOPS_DOCTOR_CHECK_WEBSERVER}" = "1" ]; then + if [ "${DREVOPS_DOCTOR_CHECK_WEBSERVER}" = "1" ]; then + local_dev_url="$(docker compose exec -T cli bash -c 'echo ${DREVOPS_LOCALDEV_URL}')" + if [ -n "${local_dev_url}" ]; then # Depending on the type of installation, the homepage may return 200 or 403. - if ! curl -L -s -o /dev/null -w "%{http_code}" "${DREVOPS_DOCTOR_LOCALDEV_URL}" | grep -q '200\|403'; then - error "Web server is not accessible at http://${DREVOPS_DOCTOR_LOCALDEV_URL}." + if ! curl -L -s -o /dev/null -w "%{http_code}" "${local_dev_url}" | grep -q '200\|403'; then + fail "Web server is not accessible at http://${local_dev_url}." exit 1 fi - success "Web server is running and accessible at http://${DREVOPS_DOCTOR_LOCALDEV_URL}." - fi - - if [ "${DREVOPS_DOCTOR_CHECK_BOOTSTRAP}" = "1" ]; then - if ! curl -L -s -N "${DREVOPS_DOCTOR_LOCALDEV_URL}" | grep -q -i "charset="; then - error "Website is running, but cannot be bootstrapped. Try pulling latest container images with 'ahoy pull'." - exit 1 + pass "Web server is running and accessible at http://${local_dev_url}." + + if [ "${DREVOPS_DOCTOR_CHECK_BOOTSTRAP}" = "1" ]; then + if ! curl -L -s -N "${local_dev_url}" | grep -q -i "charset="; then + fail "Website is running, but cannot be bootstrapped. Try pulling latest container images with 'ahoy pull'." + exit 1 + fi + pass "Bootstrapped website at http://${local_dev_url}." fi - success "Successfully bootstrapped website at http://${DREVOPS_DOCTOR_LOCALDEV_URL}." fi fi - cecho blue "👌 All required checks have passed." + pass "All required checks have passed." + echo } system_info() { - status "System information report" + echo "System information report" echo - heading "- Operating system -" + echo "OPERATING SYSTEM" if [ "$(uname)" = "Darwin" ]; then sw_vers else @@ -189,23 +221,27 @@ system_info() { fi echo - heading "- Docker -" + echo "DOCKER" echo "Path to binary: $(which docker)" docker -v docker info echo - heading "- Docker Compose -" + echo "DOCKER COMPOSE V2" + docker compose version || true + echo + + echo "DOCKER-COMPOSE V1" echo "Path to binary: $(which docker-compose)" - docker-compose version + docker-compose version || true echo - heading "- Pygmy -" + echo "PYGMY" echo "Path to binary: $(which pygmy)" pygmy version echo - heading "- Ahoy -" + echo "AHOY" echo "Path to binary: $(which ahoy)" ahoy --version echo @@ -215,83 +251,17 @@ system_info() { # Check that command exists. # command_exists() { - local cmd=$1 + local cmd=${1} command -v "${cmd}" | grep -ohq "${cmd}" local res=$? # Try homebrew lookup, if brew is available. - if command -v "brew" | grep -ohq "brew" && [ "$res" = "1" ] ; then - brew --prefix "${cmd}" > /dev/null + if command -v "brew" | grep -ohq "brew" && [ "${res}" = "1" ]; then + brew --prefix "${cmd}" >/dev/null res=$? fi echo ${res} } -# -# Status echo. -# -status() { - cecho blue "✚ $1"; -} - -# -# Warning echo. -# -warning() { - cecho yellow " ⚠ $1"; -} - -# -# Success echo. -# -success() { - cecho green " ✓ $1"; -} - -# -# Error echo. -# -error() { - cecho red " ✘ $1"; - exit 1 -} - -# -# Heading echo. -# -heading() { - cecho yellow "$1"; -} - -# -# Colored echo. -# -cecho() { - local prefix="\033[" - local input_color=$1 - local message="$2" - - local color="" - case "$input_color" in - black | bk) color="${prefix}0;30m";; - red | r) color="${prefix}1;31m";; - green | g) color="${prefix}1;32m";; - yellow | y) color="${prefix}1;33m";; - blue | b) color="${prefix}1;34m";; - purple | p) color="${prefix}1;35m";; - cyan | c) color="${prefix}1;36m";; - gray | gr) color="${prefix}0;37m";; - *) message="$1" - esac - - # Format message with color codes, but only if an output supports colors and - # a correct color was provided. - if [ -t 1 ]; then - [ -n "$color" ] && message="${color}${message}${prefix}0m" - fi - - echo -e "$message" -} - main "$@" diff --git a/scripts/drevops/download-db-acquia.sh b/scripts/drevops/download-db-acquia.sh index b1c0dc159..22af67b4d 100755 --- a/scripts/drevops/download-db-acquia.sh +++ b/scripts/drevops/download-db-acquia.sh @@ -15,18 +15,24 @@ # # @see https://docs.acquia.com/acquia-cloud/develop/api/auth/#cloud-generate-api-token # @see https://cloudapi-docs.acquia.com/#/Environments/getEnvironmentsDatabaseDownloadBackup +# +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Acquia Cloud API key. -DREVOPS_DB_DOWNLOAD_ACQUIA_KEY="${DREVOPS_DB_DOWNLOAD_ACQUIA_KEY:-${DREVOPS_ACQUIA_KEY}}" +DREVOPS_ACQUIA_KEY="${DREVOPS_ACQUIA_KEY:-}" # Acquia Cloud API secret. -DREVOPS_DB_DOWNLOAD_ACQUIA_SECRET="${DREVOPS_DB_DOWNLOAD_ACQUIA_SECRET:-${DREVOPS_ACQUIA_SECRET}}" +DREVOPS_ACQUIA_SECRET="${DREVOPS_ACQUIA_SECRET:-}" # Application name. Used to discover UUID. -DREVOPS_DB_DOWNLOAD_ACQUIA_APP_NAME="${DREVOPS_DB_DOWNLOAD_ACQUIA_APP_NAME:-${DREVOPS_ACQUIA_APP_NAME}}" +DREVOPS_ACQUIA_APP_NAME="${DREVOPS_ACQUIA_APP_NAME:-}" # Source environment name used to download the database dump from. DREVOPS_DB_DOWNLOAD_ACQUIA_ENV="${DREVOPS_DB_DOWNLOAD_ACQUIA_ENV:-}" @@ -35,20 +41,27 @@ DREVOPS_DB_DOWNLOAD_ACQUIA_ENV="${DREVOPS_DB_DOWNLOAD_ACQUIA_ENV:-}" DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME="${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME:-}" # Directory where DB dumps are stored. -DREVOPS_DB_DOWNLOAD_ACQUIA_DIR="${DREVOPS_DB_DOWNLOAD_ACQUIA_DIR:-${DREVOPS_DB_DIR}}" +DREVOPS_DB_DIR="${DREVOPS_DB_DIR:-./.data}" # Database dump file name. -DREVOPS_DB_DOWNLOAD_ACQUIA_FILE="${DREVOPS_DB_DOWNLOAD_ACQUIA_FILE:-${DREVOPS_DB_FILE}}" +DREVOPS_DB_FILE="${DREVOPS_DB_FILE:-db.sql}" #------------------------------------------------------------------------------- -echo "==> Started database dump download from Acquia." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started database dump download from Acquia." # # Extract last value from JSON object passed via STDIN. # extract_json_last_value() { - local key=$1 + local key=${1} php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$last=array_pop(\$data); isset(\$last[\"${key}\"]) ? print trim(json_encode(\$last[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" } @@ -56,81 +69,81 @@ extract_json_last_value() { # Extract keyed value from JSON object passed via STDIN. # extract_json_value() { - local key=$1 + local key=${1} php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" } # Pre-flight checks. -command -v curl > /dev/null || ( echo "ERROR: curl command is not available." && exit 1 ) +command -v curl >/dev/null || (fail "curl command is not available." && exit 1) # Check that all required variables are present. -[ -z "${DREVOPS_DB_DOWNLOAD_ACQUIA_KEY}" ] && echo "ERROR: Missing value for DREVOPS_DB_DOWNLOAD_ACQUIA_KEY." && exit 1 -[ -z "${DREVOPS_DB_DOWNLOAD_ACQUIA_SECRET}" ] && echo "ERROR: Missing value for DREVOPS_DB_DOWNLOAD_ACQUIA_SECRET." && exit 1 -[ -z "${DREVOPS_DB_DOWNLOAD_ACQUIA_APP_NAME}" ] && echo "ERROR: Missing value for DREVOPS_DB_DOWNLOAD_ACQUIA_APP_NAME." && exit 1 -[ -z "${DREVOPS_DB_DOWNLOAD_ACQUIA_ENV}" ] && echo "ERROR: Missing value for DREVOPS_DB_DOWNLOAD_ACQUIA_ENV." && exit 1 -[ -z "${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}" ] && echo "ERROR: Missing value for DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME." && exit 1 -[ -z "${DREVOPS_DB_DOWNLOAD_ACQUIA_DIR}" ] && echo "ERROR: Missing value for DREVOPS_DB_DOWNLOAD_ACQUIA_DIR." && exit 1 -[ -z "${DREVOPS_DB_DOWNLOAD_ACQUIA_FILE}" ] && echo "ERROR: Missing value for DREVOPS_DB_DOWNLOAD_ACQUIA_FILE." && exit 1 - -echo " > Retrieving authentication token." -token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_DB_DOWNLOAD_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_DB_DOWNLOAD_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") +[ -z "${DREVOPS_ACQUIA_KEY}" ] && fail "Missing value for DREVOPS_ACQUIA_KEY." && exit 1 +[ -z "${DREVOPS_ACQUIA_SECRET}" ] && fail "Missing value for DREVOPS_ACQUIA_SECRET." && exit 1 +[ -z "${DREVOPS_ACQUIA_APP_NAME}" ] && fail "Missing value for DREVOPS_ACQUIA_APP_NAME." && exit 1 +[ -z "${DREVOPS_DB_DOWNLOAD_ACQUIA_ENV}" ] && fail "Missing value for DREVOPS_DB_DOWNLOAD_ACQUIA_ENV." && exit 1 +[ -z "${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}" ] && fail "Missing value for DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME." && exit 1 + +mkdir -p "${DREVOPS_DB_DIR}" + +note "Retrieving authentication token." +token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") token=$(echo "${token_json}" | extract_json_value "access_token") -[ -z "${token}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 +[ -z "${token}" ] && fail "Unable to retrieve a token." && exit 1 -echo " > Retrieving ${DREVOPS_DB_DOWNLOAD_ACQUIA_APP_NAME} application UUID." -app_uuid_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/applications?filter=name%3D${DREVOPS_DB_DOWNLOAD_ACQUIA_APP_NAME/ /%20}") +note "Retrieving ${DREVOPS_ACQUIA_APP_NAME} application UUID." +app_uuid_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/applications?filter=name%3D${DREVOPS_ACQUIA_APP_NAME/ /%20}") app_uuid=$(echo "${app_uuid_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "uuid") -[ -z "${app_uuid}" ] && echo "ERROR: Unable to retrieve an environment UUID." && exit 1 +[ -z "${app_uuid}" ] && fail "Unable to retrieve an environment UUID." && exit 1 -echo " > Retrieving ${DREVOPS_DB_DOWNLOAD_ACQUIA_ENV} environment ID." -envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_DB_DOWNLOAD_ACQUIA_ENV}") +note "Retrieving ${DREVOPS_DB_DOWNLOAD_ACQUIA_ENV} environment ID." +envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_DB_DOWNLOAD_ACQUIA_ENV}") env_id=$(echo "${envs_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${env_id}" ] && echo "ERROR: Unable to retrieve an environment ID." && exit 1 +[ -z "${env_id}" ] && fail "Unable to retrieve an environment ID." && exit 1 -echo " > Discovering latest backup ID for DB ${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}." -backups_json=$(curl --progress-bar -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/environments/${env_id}/databases/${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}/backups?sort=created") +note "Discovering latest backup ID for DB ${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}." +backups_json=$(curl --progress-bar -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/environments/${env_id}/databases/${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}/backups?sort=created") # Acquia response has all backups sorted chronologically by created date. backup_id=$(echo "${backups_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${backup_id}" ] && echo "ERROR: Unable to discover backup ID." && exit 1 +[ -z "${backup_id}" ] && fail "Unable to discover backup ID." && exit 1 # Insert backup id as a suffix. -file_extension="${DREVOPS_DB_DOWNLOAD_ACQUIA_FILE##*.}" +file_extension="${DREVOPS_DB_FILE##*.}" file_prefix="${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}_backup_" -file_name="${DREVOPS_DB_DOWNLOAD_ACQUIA_DIR}/${file_prefix}${backup_id}.${file_extension}" +file_name="${DREVOPS_DB_DIR}/${file_prefix}${backup_id}.${file_extension}" file_name_discovered="${file_name}" file_name_compressed="${file_name}.gz" -if [ -f "${file_name_discovered}" ] ; then - echo " > Found existing cached DB file \"${file_name_discovered}\" for DB \"${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}\"." +if [ -f "${file_name_discovered}" ]; then + note "Found existing cached DB file \"${file_name_discovered}\" for DB \"${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}\"." else # If the gzipped version exists, then we don't need to re-download it. - if [ ! -f "${file_name_compressed}" ] ; then - echo " > Using latest backup ID ${backup_id} for DB ${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}." + if [ ! -f "${file_name_compressed}" ]; then + note "Using the latest backup ID ${backup_id} for DB ${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}." - [ ! -d "${DREVOPS_DB_DOWNLOAD_ACQUIA_DIR}" ] && echo " > Creating dump directory ${DREVOPS_DB_DOWNLOAD_ACQUIA_DIR}" && mkdir -p "${DREVOPS_DB_DOWNLOAD_ACQUIA_DIR}" + [ ! -d "${DREVOPS_DB_DIR:-}" ] && note "Creating dump directory ${DREVOPS_DB_DIR}" && mkdir -p "${DREVOPS_DB_DIR}" - echo " > Discovering backup URL." - backup_json=$(curl --progress-bar -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/environments/${env_id}/databases/${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}/backups/${backup_id}/actions/download") + note "Discovering backup URL." + backup_json=$(curl --progress-bar -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/environments/${env_id}/databases/${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}/backups/${backup_id}/actions/download") backup_url=$(echo "${backup_json}" | extract_json_value "url") - [ -z "${backup_url}" ] && echo "ERROR: Unable to discover backup URL." && exit 1 + [ -z "${backup_url}" ] && fail "Unable to discover backup URL." && exit 1 - echo " > Downloading DB dump into file ${file_name_compressed}." - curl --progress-bar -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "${backup_url}" -o "${file_name_compressed}" + note "Downloading DB dump into file ${file_name_compressed}." + curl --progress-bar -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "${backup_url}" -o "${file_name_compressed}" # shellcheck disable=SC2181 - [ $? -ne 0 ] && echo "ERROR: Unable to download database ${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}." && exit 1 + [ $? -ne 0 ] && fail "Unable to download database ${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}." && exit 1 else - echo "==> Found existing cached gzipped DB file ${file_name_compressed} for DB ${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}." + pass "Found existing cached gzipped DB file ${file_name_compressed} for DB ${DREVOPS_DB_DOWNLOAD_ACQUIA_DB_NAME}." fi - echo " > Expanding DB file ${file_name_compressed} into ${file_name}." - gunzip -c "${file_name_compressed}" > "${file_name}" + note "Expanding DB file ${file_name_compressed} into ${file_name}." + gunzip -c "${file_name_compressed}" >"${file_name}" decompress_result=$? rm "${file_name_compressed}" - [ ! -f "${file_name}" ] || [ "${decompress_result}" != 0 ] && echo "ERROR: Unable to process DB dump file \"${file_name}\"." && rm -f "${file_name_compressed}" && rm -f "${file_name}" && exit 1 + [ ! -f "${file_name}" ] || [ "${decompress_result}" != 0 ] && fail "Unable to process DB dump file \"${file_name}\"." && rm -f "${file_name_compressed}" && rm -f "${file_name}" && exit 1 fi -echo " > Renaming file \"${file_name}\" to \"${DREVOPS_DB_DOWNLOAD_ACQUIA_DIR}/${DREVOPS_DB_DOWNLOAD_ACQUIA_FILE}\"." -mv "${file_name}" "${DREVOPS_DB_DOWNLOAD_ACQUIA_DIR}/${DREVOPS_DB_DOWNLOAD_ACQUIA_FILE}" +note "Renaming file \"${file_name}\" to \"${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}\"." +mv "${file_name}" "${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" -echo "==> Finished database dump download from Acquia." +pass "Finished database dump download from Acquia." diff --git a/scripts/drevops/download-db-curl.sh b/scripts/drevops/download-db-curl.sh index f67902f97..2d7a68001 100755 --- a/scripts/drevops/download-db-curl.sh +++ b/scripts/drevops/download-db-curl.sh @@ -2,9 +2,14 @@ ## # Download DB dump via CURL. # +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # URL of the remote database. If HTTP authentication required, it must be # included in the variable. @@ -18,7 +23,20 @@ DREVOPS_DB_FILE="${DREVOPS_DB_FILE:-db.sql}" #------------------------------------------------------------------------------- +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started database dump download from CURL." + # Check all required values. [ -z "${DREVOPS_DB_DOWNLOAD_CURL_URL}" ] && echo "Missing required value for DREVOPS_DB_DOWNLOAD_CURL_URL." && exit 1 +mkdir -p "${DREVOPS_DB_DIR}" + curl -L "${DREVOPS_DB_DOWNLOAD_CURL_URL}" -o "${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" + +pass "Finished database dump download from CURL." diff --git a/scripts/drevops/download-db-docker-registry.sh b/scripts/drevops/download-db-docker-registry.sh new file mode 100755 index 000000000..0091f2083 --- /dev/null +++ b/scripts/drevops/download-db-docker-registry.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +## +# Download DB dump from docker image. +# +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# The Docker image containing database passed in a form of `/`. +DREVOPS_DB_DOCKER_IMAGE="${DREVOPS_DB_DOCKER_IMAGE:-}" + +# The username of the docker registry to download the database from. +DOCKER_USER="${DOCKER_USER:-}" + +# The token of the docker registry to download the database from. +DOCKER_PASS="${DOCKER_PASS:-}" + +# Docker registry name. +# Provide port, if required as `:`. +DOCKER_REGISTRY="${DOCKER_REGISTRY:-docker.io}" + +#------------------------------------------------------------------------------- + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started Docker data image download." + +[ -z "${DOCKER_USER}" ] && fail "Missing required value for DOCKER_USER." && exit 1 +[ -z "${DOCKER_PASS}" ] && fail "Missing required value for DOCKER_PASS." && exit 1 +[ -z "${DREVOPS_DB_DOCKER_IMAGE}" ] && fail "Destination image name is not specified. Please provide docker image name as a first argument to this script in a format /." && exit 1 + +export DOCKER_USER="${DOCKER_USER}" +export DOCKER_PASS="${DOCKER_PASS}" +export DOCKER_REGISTRY="${DOCKER_REGISTRY}" +./scripts/drevops/login-docker.sh + +docker pull "${DOCKER_REGISTRY}/${DREVOPS_DB_DOCKER_IMAGE}" + +pass "Finished Docker data image download." diff --git a/scripts/drevops/download-db-ftp.sh b/scripts/drevops/download-db-ftp.sh index 1428a0c10..b28eed2bd 100755 --- a/scripts/drevops/download-db-ftp.sh +++ b/scripts/drevops/download-db-ftp.sh @@ -2,9 +2,14 @@ ## # Download DB dump from FTP. # +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # The FTP user. DREVOPS_DB_DOWNLOAD_FTP_USER="${DREVOPS_DB_DOWNLOAD_FTP_USER:-}" @@ -29,11 +34,24 @@ DREVOPS_DB_FILE="${DREVOPS_DB_FILE:-db.sql}" #------------------------------------------------------------------------------- +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + # Check all required values. -[ -z "${DREVOPS_DB_DOWNLOAD_FTP_USER}" ] && echo "Missing required value for DREVOPS_DB_DOWNLOAD_FTP_USER." && exit 1 -[ -z "${DREVOPS_DB_DOWNLOAD_FTP_PASS}" ] && echo "Missing required value for DREVOPS_DB_DOWNLOAD_FTP_PASS." && exit 1 -[ -z "${DREVOPS_DB_DOWNLOAD_FTP_HOST}" ] && echo "Missing required value for DREVOPS_DB_DOWNLOAD_FTP_HOST." && exit 1 -[ -z "${DREVOPS_DB_DOWNLOAD_FTP_PORT}" ] && echo "Missing required value for DREVOPS_DB_DOWNLOAD_FTP_PORT." && exit 1 -[ -z "${DREVOPS_DB_DOWNLOAD_FTP_FILE}" ] && echo "Missing required value for DREVOPS_DB_DOWNLOAD_FTP_FILE." && exit 1 +[ -z "${DREVOPS_DB_DOWNLOAD_FTP_USER}" ] && fail "Missing required value for DREVOPS_DB_DOWNLOAD_FTP_USER." && exit 1 +[ -z "${DREVOPS_DB_DOWNLOAD_FTP_PASS}" ] && fail "Missing required value for DREVOPS_DB_DOWNLOAD_FTP_PASS." && exit 1 +[ -z "${DREVOPS_DB_DOWNLOAD_FTP_HOST}" ] && fail "Missing required value for DREVOPS_DB_DOWNLOAD_FTP_HOST." && exit 1 +[ -z "${DREVOPS_DB_DOWNLOAD_FTP_PORT}" ] && fail "Missing required value for DREVOPS_DB_DOWNLOAD_FTP_PORT." && exit 1 +[ -z "${DREVOPS_DB_DOWNLOAD_FTP_FILE}" ] && fail "Missing required value for DREVOPS_DB_DOWNLOAD_FTP_FILE." && exit 1 + +info "Started database dump download from FTP." + +mkdir -p "${DREVOPS_DB_DIR}" curl -u "${DREVOPS_DB_DOWNLOAD_FTP_USER}":"${DREVOPS_DB_DOWNLOAD_FTP_PASS}" "ftp://${DREVOPS_DB_DOWNLOAD_FTP_HOST}:${DREVOPS_DB_DOWNLOAD_FTP_PORT}/${DREVOPS_DB_DOWNLOAD_FTP_FILE}" -o "${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" + +pass "Finished database dump download from FTP." diff --git a/scripts/drevops/download-db-image.sh b/scripts/drevops/download-db-image.sh deleted file mode 100755 index a2f58e7e9..000000000 --- a/scripts/drevops/download-db-image.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -## -# Download DB dump from FTP. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# The Docker image containing database passed in a form of `/`. -DREVOPS_DB_DOWNLOAD_DOCKER_IMAGE="${DREVOPS_DB_DOWNLOAD_DOCKER_IMAGE:-${DREVOPS_DB_DOCKER_IMAGE}}" - -# The username of the docker registry to download the database from. -DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY_USERNAME="${DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY_USERNAME:-${DREVOPS_DOCKER_REGISTRY_USERNAME}}" - -# The token of the docker registry to download the database from. -DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY_TOKEN="${DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY_TOKEN:-${DREVOPS_DOCKER_REGISTRY_TOKEN}}" - -# The name of the Docker registry to download the database from. -DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY="${DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY:-${DREVOPS_DOCKER_REGISTRY:-docker.io}}" - -#------------------------------------------------------------------------------- -echo "==> Start Docker data image download." - -[ -z "${DREVOPS_DB_DOWNLOAD_DOCKER_IMAGE}" ] && echo "ERROR: Destination image name is not specified. Please provide docker image name as a first argument to this script in a format /." && exit 1 - -export DREVOPS_DOCKER_REGISTRY_USERNAME="${DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY_USERNAME}" -export DREVOPS_DOCKER_REGISTRY_TOKEN="${DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY_TOKEN}" -export DREVOPS_DOCKER_REGISTRY="${DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY}" -./scripts/drevops/docker-login.sh - -docker pull "${DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY}/${DREVOPS_DB_DOWNLOAD_DOCKER_IMAGE}" - -echo "==> Finish Docker data image download." diff --git a/scripts/drevops/download-db-lagoon.sh b/scripts/drevops/download-db-lagoon.sh index 9852ab66c..b81f9f4f7 100755 --- a/scripts/drevops/download-db-lagoon.sh +++ b/scripts/drevops/download-db-lagoon.sh @@ -2,7 +2,7 @@ ## # Download DB dump from Lagoon environment. # -# This script will create a backup from in the specified environment and +# This script will create a database dump from in the specified environment and # download it into specified directory. # # It will also remove previously created DB dumps. @@ -12,41 +12,44 @@ # # It does require using SSH key added to one of the users in Lagoon who has # SSH access. -# shellcheck disable=SC2029,SC1091,SC2124,SC2140 +# +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091,SC2029,SC2124,SC2140 -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -#------------------------------------------------------------------------------- -# VARIABLES -#------------------------------------------------------------------------------- +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Flag to download a fresh copy of the database. DREVOPS_DB_DOWNLOAD_REFRESH="${DREVOPS_DB_DOWNLOAD_REFRESH:-}" # Lagoon project name. -DREVOPS_DB_DOWNLOAD_LAGOON_PROJECT="${DREVOPS_DB_DOWNLOAD_LAGOON_PROJECT:?Missing required environment variable DREVOPS_DB_DOWNLOAD_LAGOON_PROJECT.}" +LAGOON_PROJECT="${LAGOON_PROJECT:?Missing required environment variable LAGOON_PROJECT.}" -# The source environment for the database source. -DREVOPS_DB_DOWNLOAD_LAGOON_ENVIRONMENT="${DREVOPS_DB_DOWNLOAD_LAGOON_ENVIRONMENT:-main}" +# The source environment branch for the database source. +DREVOPS_DB_DOWNLOAD_LAGOON_BRANCH="${DREVOPS_DB_DOWNLOAD_LAGOON_BRANCH:-main}" # Remote DB dump directory location. DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_DIR="/tmp" # Remote DB dump file name. Cached by the date suffix. -DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE="${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE:-db_$(date +%Y_%m_%d).sql}" +DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE="${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE:-db_$(date +%Y%m%d).sql}" # Wildcard file name to cleanup previously created dump files. -# Cleanup runs only if the variable is set and DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE does not -# exist. +# +# Cleanup runs only if the variable is set and $DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE +# does not exist. DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE_CLEANUP="${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE_CLEANUP:-db_*.sql}" # The SSH key used to SSH into Lagoon. -DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE="${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE:-}" +DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE="${DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE:-}" -# The SSH key fingerprint. If provided - the key will be looked-up and loaded -# into ssh client. -DREVOPS_DB_DOWNLOAD_LAGOON_SSH_FINGERPRINT="${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_FINGERPRINT:-}" +# The SSH key fingerprint. +# +# If provided - the key will be looked-up and loaded into ssh client. +DREVOPS_DB_DOWNLOAD_SSH_FINGERPRINT="${DREVOPS_DB_DOWNLOAD_SSH_FINGERPRINT:-}" # The SSH host of the Lagoon environment. DREVOPS_DB_DOWNLOAD_LAGOON_SSH_HOST="${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_HOST:-ssh.lagoon.amazeeio.cloud}" @@ -55,7 +58,7 @@ DREVOPS_DB_DOWNLOAD_LAGOON_SSH_HOST="${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_HOST:-ssh. DREVOPS_DB_DOWNLOAD_LAGOON_SSH_PORT="${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_PORT:-32222}" # The SSH user of the Lagoon environment. -DREVOPS_DB_DOWNLOAD_LAGOON_SSH_USER="${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_USER:-${DREVOPS_DB_DOWNLOAD_LAGOON_PROJECT}-${DREVOPS_DB_DOWNLOAD_LAGOON_ENVIRONMENT}}" +DREVOPS_DB_DOWNLOAD_LAGOON_SSH_USER="${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_USER:-${LAGOON_PROJECT}-${DREVOPS_DB_DOWNLOAD_LAGOON_BRANCH}}" # Directory where DB dumps are stored on the host. DREVOPS_DB_DIR="${DREVOPS_DB_DIR:-./.data}" @@ -63,29 +66,43 @@ DREVOPS_DB_DIR="${DREVOPS_DB_DIR:-./.data}" # Database dump file name on the host. DREVOPS_DB_FILE="${DREVOPS_DB_FILE:-db.sql}" +# Name of the webroot directory with Drupal codebase. +DREVOPS_WEBROOT="${DREVOPS_WEBROOT:-web}" + #------------------------------------------------------------------------------- +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started database dump download from Lagoon." + +mkdir -p "${DREVOPS_DB_DIR}" + # Try to read credentials from the credentials file. if [ -f ".env.local" ]; then # shellcheck disable=SC1090 - t=$(mktemp) && export -p > "$t" && set -a && . ".env.local" && set +a && . "$t" && rm "$t" && unset t + t=$(mktemp) && export -p >"${t}" && set -a && . ".env.local" && set +a && . "${t}" && rm "${t}" && unset t fi # Discover and load a custom database dump key if fingerprint is provided. -if [ -n "${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_FINGERPRINT}" ]; then - echo "==> Custom database dump key is provided." - DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE="${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_FINGERPRINT//:}" - DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE="${HOME}/.ssh/id_rsa_${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE//\"}" +if [ -n "${DREVOPS_DB_DOWNLOAD_SSH_FINGERPRINT:-}" ]; then + note "Custom database dump key is provided." + DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE="${DREVOPS_DB_DOWNLOAD_SSH_FINGERPRINT//:/}" + DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE="${HOME}/.ssh/id_rsa_${DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE//\"/}" - [ ! -f "${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE}" ] && echo "ERROR: SSH key file ${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE} does not exist." && exit 1 + [ ! -f "${DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE}" ] && fail "SSH key file ${DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE} does not exist." && exit 1 - if ssh-add -l | grep -q "${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE}"; then - echo "==> SSH agent has ${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE} key loaded." + if ssh-add -l | grep -q "${DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE}"; then + note "SSH agent has ${DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE} key loaded." else - echo "==> SSH agent does not have default key loaded. Trying to load." + note "SSH agent does not have default key loaded. Trying to load." # Remove all other keys and add SSH key from provided fingerprint into SSH agent. - ssh-add -D > /dev/null - ssh-add "${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE}" + ssh-add -D >/dev/null + ssh-add "${DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE}" fi fi @@ -94,22 +111,31 @@ ssh_opts+=(-o "StrictHostKeyChecking=no") ssh_opts+=(-o "LogLevel=error") ssh_opts+=(-o "IdentitiesOnly=yes") ssh_opts+=(-p "${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_PORT}") -if [ "${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE}" != false ]; then - ssh_opts+=(-i "${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE}") +if [ "${DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE:-}" != false ]; then + ssh_opts+=(-i "${DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE}") fi +# Initiates an SSH connection to a remote server using provided SSH options. +# On the server: +# 1. Checks for the existence of a specific database dump file. +# 2. If the file doesn't exist or a refresh is requested: +# a. Optionally removes any previous database dumps. +# b. Uses `drush` to create a new database dump with specific table structure options. +# 3. If the file exists and no refresh is requested, notifies of using the existing dump. ssh \ - "${ssh_opts[@]}" \ + "${ssh_opts[@]}" \ "${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_USER}@${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_HOST}" service=cli container=cli \ "if [ ! -f \"${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_DIR}/${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE}\" ] || [ \"${DREVOPS_DB_DOWNLOAD_REFRESH}\" == \"1\" ] ; then \ [ -n \"${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE_CLEANUP}\" ] && rm -f \"${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_DIR}\"\/${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE_CLEANUP} && echo \"Removed previously created DB dumps.\"; \ - echo \" > Creating a backup ${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_DIR}/${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE}.\"; \ - /app/vendor/bin/drush --root=/app/docroot sql-dump --structure-tables-key=common --structure-tables-list=ban,event_log_track,flood,login_security_track,purge_queue,queue,webform_submission,webform_submission_data,webform_submission_log,cache* --extra-dump=--no-tablespaces > \"${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_DIR}/${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE}\"; \ + echo \" > Creating a database dump ${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_DIR}/${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE}.\"; \ + /app/vendor/bin/drush --root=./${DREVOPS_WEBROOT} sql:dump --structure-tables-key=common --structure-tables-list=ban,event_log_track,flood,login_security_track,purge_queue,queue,webform_submission,webform_submission_data,webform_submission_log,watchdog,cache* --extra-dump=--no-tablespaces > \"${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_DIR}/${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE}\"; \ else \ - echo \" > Using existing dump ${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_DIR}/${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE}.\"; \ + echo \" > Using existing dump ${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_DIR}/${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE}.\"; \ fi" -echo "==> Downloading a backup." +note "Downloading a database dump." ssh_opts_string="${ssh_opts[@]}" -rsync_opts=(-e "ssh $ssh_opts_string") +rsync_opts=(-e "ssh ${ssh_opts_string}") rsync "${rsync_opts[@]}" "${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_USER}@${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_HOST}":"${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_DIR}"/"${DREVOPS_DB_DOWNLOAD_LAGOON_REMOTE_FILE}" "${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" + +pass "Finished database dump download from Lagoon." diff --git a/scripts/drevops/download-db.sh b/scripts/drevops/download-db.sh index 72e664bf6..d3bb2f145 100755 --- a/scripts/drevops/download-db.sh +++ b/scripts/drevops/download-db.sh @@ -2,83 +2,64 @@ ## # Download database dump. # -# Download is supported from FTP, CURL or Acquia Cloud. +# This is a router script to call relevant scripts based on type. # -# This is a router script to call relevant database download scripts based on type. +# IMPORTANT! This script runs outside the container on the host system. # -# For required variables based on the download type, -# see ./scripts/drevops/download-db-[type].sh file. - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Where the database is downloaded from: -# - "url" - directly from URL as a file using CURL. -# - "ftp" - directly from FTP as a file using CURL. -# - "acquia" - from latest Acquia backup via Cloud API as a file. -# - "docker_registry" - from the docker registry as a docker image. -# - "none" - not downloaded, site is freshly installed for every build. -# -# Note that "docker_registry" works only for database-in-Docker-image -# database storage (when DREVOPS_DB_DOCKER_IMAGE variable has a value). -DREVOPS_DB_DOWNLOAD_SOURCE="${DREVOPS_DB_DOWNLOAD_SOURCE:-curl}" +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x -# Flag to download a fresh copy of the database dump if the methods supports it. -DREVOPS_DB_DOWNLOAD_REFRESH="${DREVOPS_DB_DOWNLOAD_REFRESH:-}" +# Note that `docker_registry` works only for database-in-Docker-image +# database storage (when $DREVOPS_DB_DOCKER_IMAGE variable has a value). +DREVOPS_DB_DOWNLOAD_SOURCE="${DREVOPS_DB_DOWNLOAD_SOURCE:-curl}" # Force DB download even if the cache exists. # Usually set in CircleCI UI to override per build cache. DREVOPS_DB_DOWNLOAD_FORCE="${DREVOPS_DB_DOWNLOAD_FORCE:-}" -# Kill-switch to proceed with download. +# Proceed with download. DREVOPS_DB_DOWNLOAD_PROCEED="${DREVOPS_DB_DOWNLOAD_PROCEED:-1}" -# Post process command or a script used for running after the database was downloaded. -DREVOPS_DB_DOWNLOAD_POST_PROCESS="${DREVOPS_DB_DOWNLOAD_POST_PROCESS:-}" - -# Directory with database dump file. -DREVOPS_DB_DIR="${DREVOPS_DB_DIR:-./.data}" - -# Database dump file name. -DREVOPS_DB_FILE="${DREVOPS_DB_FILE:-db.sql}" - # ------------------------------------------------------------------------------ -# Kill-switch to proceed with download. -[ "${DREVOPS_DB_DOWNLOAD_PROCEED}" -ne 1 ] && echo "==> Skipping database download as $DB_DOWNLOAD_PROCEED is not set to 1." && exit 0 +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on -# Check provided download type. -[ -z "${DREVOPS_DB_DOWNLOAD_SOURCE}" ] && echo "ERROR: Missing required value for DREVOPS_DB_DOWNLOAD_SOURCE. Must be one of: ftp, curl, acquia, lagoon, docker_registry." && exit 1 +info "Started database download." -# Check if database file exists. -# @todo: Implement better support based on $DREVOPS_DB_FILE. -[ -d "${DREVOPS_DB_DIR}" ] && found_db=$(find "${DREVOPS_DB_DIR}" -name "db*.sql" -o -name "db*.tar") - -if [ -n "${found_db}" ]; then - echo "==> Found existing database dump file(s)." - ls -Alh "${DREVOPS_DB_DIR}" +[ "${DREVOPS_DB_DOWNLOAD_PROCEED}" != "1" ] && pass "Skipping database download as DB_DOWNLOAD_PROCEED is not set to 1." && exit 0 - if [ -z "${DREVOPS_DB_DOWNLOAD_FORCE}" ] ; then - echo "==> Using existing database dump file(s). Download will not proceed. Remove existing database file or set DREVOPS_DB_DOWNLOAD_FORCE flag to force download." && exit 0 +# Check if database file exists. +# @todo: Implement better support based on $DREVOPS_DB_FILE instead of hardcoded 'db*' name. +[ -d "${DREVOPS_DB_DIR:-}" ] && found_db=$(find "${DREVOPS_DB_DIR}" -name "db*.sql" -o -name "db*.tar") + +if [ -n "${found_db:-}" ]; then + note "Found existing database dump file(s)." + ls -Alh "${DREVOPS_DB_DIR}" || true + + if [ "${DREVOPS_DB_DOWNLOAD_FORCE}" != "1" ]; then + note "Using existing database dump file(s)." + note "Download will not proceed." + note "Remove existing database file or set DREVOPS_DB_DOWNLOAD_FORCE value to 1 to force download." + exit 0 else - echo "==> Forcefully downloading database." + note "Forcefully downloading database." fi fi -mkdir -p "${DREVOPS_DB_DIR}" - -# Export DB dir and file variables as they are used in child scripts. -export DREVOPS_DB_DIR -export DREVOPS_DB_FILE -export DREVOPS_DB_DOWNLOAD_REFRESH - if [ "${DREVOPS_DB_DOWNLOAD_SOURCE}" = "ftp" ]; then - echo "==> Started database dump download from FTP." ./scripts/drevops/download-db-ftp.sh fi if [ "${DREVOPS_DB_DOWNLOAD_SOURCE}" = "curl" ]; then - echo "==> Started database dump download from CURL." ./scripts/drevops/download-db-curl.sh fi @@ -87,26 +68,16 @@ if [ "${DREVOPS_DB_DOWNLOAD_SOURCE}" = "acquia" ]; then fi if [ "${DREVOPS_DB_DOWNLOAD_SOURCE}" = "lagoon" ]; then - echo "==> Started database dump download from Lagoon." - export DREVOPS_DB_DOWNLOAD_LAGOON_PROJECT="${DREVOPS_DB_DOWNLOAD_LAGOON_PROJECT:-${LAGOON_PROJECT}}" - export DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE="${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_KEY_FILE:-${DREVOPS_DB_DOWNLOAD_SSH_KEY_FILE}}" - export DREVOPS_DB_DOWNLOAD_LAGOON_SSH_FINGERPRINT="${DREVOPS_DB_DOWNLOAD_LAGOON_SSH_FINGERPRINT:-${DREVOPS_DB_DOWNLOAD_SSH_FINGERPRINT}}" ./scripts/drevops/download-db-lagoon.sh fi if [ "${DREVOPS_DB_DOWNLOAD_SOURCE}" = "docker_registry" ]; then - echo "==> Started database dump download from Docker Registry." - export DREVOPS_DB_DOWNLOAD_DOCKER_IMAGE="${DREVOPS_DB_DOWNLOAD_DOCKER_IMAGE:-${DREVOPS_DB_DOCKER_IMAGE}}" - export DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY_USERNAME="${DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY_USERNAME:-${DREVOPS_DOCKER_REGISTRY_USERNAME}}" - export DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY_TOKEN="${DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY_TOKEN:-${DREVOPS_DOCKER_REGISTRY_TOKEN}}" - export DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY="${DREVOPS_DB_DOWNLOAD_DOCKER_REGISTRY:-${DREVOPS_DOCKER_REGISTRY:-docker.io}}" - ./scripts/drevops/download-db-image.sh + ./scripts/drevops/download-db-docker-registry.sh fi -echo "==> Downloaded database dump file in ${DREVOPS_DB_DIR}." -ls -Alh "${DREVOPS_DB_DIR}" +ls -Alh "${DREVOPS_DB_DIR}" || true -if [ -n "${DREVOPS_DB_DOWNLOAD_POST_PROCESS}" ]; then - echo "==> Running database post download processing command(s) '${DREVOPS_DB_DOWNLOAD_POST_PROCESS}'." - eval "${DREVOPS_DB_DOWNLOAD_POST_PROCESS}" -fi +# Create a semaphore file to indicate that the database has been downloaded. +[ -n "${DREVOPS_DB_DOWNLOAD_SEMAPHORE:-}" ] && touch "${DREVOPS_DB_DOWNLOAD_SEMAPHORE}" + +pass "Finished database download." diff --git a/scripts/drevops/drupal-export-db-image.sh b/scripts/drevops/drupal-export-db-image.sh deleted file mode 100755 index 80694f55a..000000000 --- a/scripts/drevops/drupal-export-db-image.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env bash -## -# Export database image. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Docker image archive file name. Should be provided as a fist argument or -# file name will be created automatically with a timestamp. -DOCKER_IMAGE_ARCHIVE="${DOCKER_IMAGE_ARCHIVE:-}" - -# Docker image to store passed as a first argument to the script in a form of -# /. -DOCKER_IMAGE="${DOCKER_IMAGE:-}" - -# Docker registry name. Provide port, if required as :. -# Defaults to DockerHub. -DOCKER_REGISTRY="${DOCKER_REGISTRY:-docker.io}" - -# The service name to capture. Optional. Defaults to "mariadb". -DOCKER_SERVICE_NAME="${DOCKER_SERVICE_NAME:-mariadb}" - -# Directory with database image archive file. Optional. Defaults to "./.data". -DB_DIR="${DB_DIR:-./.data}" - -# ------------------------------------------------------------------------------ - -echo "==> Started Docker data image export." - -[ -z "${DOCKER_IMAGE}" ] && echo "ERROR: Destination image name is not specified. Please provide docker image as a variable DOCKER_IMAGE in a format /." && exit 1 - -cid="$(docker-compose ps -q "${DOCKER_SERVICE_NAME}")" -echo "==> Found \"${DOCKER_SERVICE_NAME}\" service container with id \"${cid}\"." - -new_image="${DOCKER_REGISTRY}/${DOCKER_IMAGE}" - -echo "==> Committing image with name \"${new_image}\"." -iid=$(docker commit "${cid}" "${new_image}") -iid="${iid#sha256:}" -echo "==> Committed image with id \"${iid}\"." - -# Create directory to store database dump. -mkdir -p "${DB_DIR}" - -# Create dump file name with a timestamp or use the file name provided -# as a first argument. Also, make sure that the extension is correct. -DOCKER_IMAGE_ARCHIVE=$([ "${1}" ] && echo "${DB_DIR}/${1//.sql/.tar}" || echo "${DB_DIR}/export_db_$(date +%Y_%m_%d_%H_%M_%S).tar") - -echo "==> Exporting database image archive to \"${DOCKER_IMAGE_ARCHIVE}\" file." - -[ -f "${DOCKER_IMAGE_ARCHIVE}" ] && rm -f "${DOCKER_IMAGE_ARCHIVE}" -mkdir -p "$(dirname "${DOCKER_IMAGE_ARCHIVE}")" -docker save -o "${DOCKER_IMAGE_ARCHIVE}" "${new_image}" - -# Check that file was saved and output saved dump file name. -if [ -f "${DOCKER_IMAGE_ARCHIVE}" ] && [ -s "${DOCKER_IMAGE_ARCHIVE}" ]; then - echo "==> Exported database image archive file saved \"${DOCKER_IMAGE_ARCHIVE}\"." -else - echo "ERROR: Unable to save database image archive file \"${DOCKER_IMAGE_ARCHIVE}\"." && exit 1 -fi - -echo "==> Finished Docker data image export." diff --git a/scripts/drevops/drupal-export-db.sh b/scripts/drevops/drupal-export-db.sh deleted file mode 100755 index 697df2957..000000000 --- a/scripts/drevops/drupal-export-db.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash -# shellcheck disable=SC2086 -## -# Export database. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to the application. -APP="${APP:-/app}" - -# Directory with database dump file. -DB_DIR="${DB_DIR:-./.data}" - -# Drush alias. -DRUSH_ALIAS="${DRUSH_ALIAS:-}" - -# ------------------------------------------------------------------------------ - -# Use local or global Drush. -drush="$(if [ -f "${APP}/vendor/bin/drush" ]; then echo "${APP}/vendor/bin/drush"; else command -v drush; fi)" - -# Create directory to store database dump. -mkdir -p "${DB_DIR}" - -# Create dump file name with a timestamp or use the file name provided -# as a first argument. -DUMP_FILE=$([ "${1}" ] && echo "${DB_DIR}/${1}" || echo "${DB_DIR}/export_db_$(date +%Y_%m_%d_%H_%M_%S).sql") - -# Dump database into a file. Also, convert relative path to an absolute one, as -# the result file is relative to Drupal root, but provided paths are relative -# to the project root. -$drush ${DRUSH_ALIAS} sql-dump --skip-tables-key=common --extra-dump=--no-tablespaces --result-file="${DUMP_FILE/.\//${APP}/}" -q - -# Check that file was saved and output saved dump file name. -if [ -f "${DUMP_FILE}" ] && [ -s "${DUMP_FILE}" ]; then - echo "==> Exported database dump saved ${DUMP_FILE}." -else - echo "ERROR: Unable to save dump file ${DUMP_FILE}." && exit 1 -fi diff --git a/scripts/drevops/drupal-import-db.sh b/scripts/drevops/drupal-import-db.sh deleted file mode 100755 index 94cc22838..000000000 --- a/scripts/drevops/drupal-import-db.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash -## -# Import database. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to the application. -APP="${APP:-/app}" - -# Directory with database dump file. -DB_DIR="${DB_DIR:-./.data}" - -# Database dump file name. -DB_FILE="${DB_FILE:-db.sql}" - -# Flag to use database import progress indicator (pv). -DB_IMPORT_PROGRESS="${DB_IMPORT_PROGRESS:-1}" - -# ------------------------------------------------------------------------------ - -# Use local or global Drush. -drush="$(if [ -f "${APP}/vendor/bin/drush" ]; then echo "${APP}/vendor/bin/drush"; else command -v drush; fi)" - -[ ! -f "${DB_DIR}/${DB_FILE}" ] && echo "ERROR: Database dump ${DB_DIR}/${DB_FILE} not found." && exit 1 - -echo "==> Removing existing database tables." -$drush sql-drop -y - -echo "==> Importing database." -if [ "${DB_IMPORT_PROGRESS}" -eq 1 ]; then - pv "${DB_DIR}/${DB_FILE}" | $drush sql-cli -else - $drush sqlc < "${DB_DIR}/${DB_FILE}" -fi diff --git a/scripts/drevops/drupal-install-site.sh b/scripts/drevops/drupal-install-site.sh deleted file mode 100755 index fc78e38f0..000000000 --- a/scripts/drevops/drupal-install-site.sh +++ /dev/null @@ -1,282 +0,0 @@ -#!/usr/bin/env bash -## -# Install site from database or profile, run updates and import configuration. -# -# This script has excessive verbose output to make it easy to debug site -# installations and deployments. -# -# shellcheck disable=SC2086,SC2002,SC2235,SC1090,SC2012 - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to the application. -DREVOPS_APP="${DREVOPS_APP:-/app}" - -# Drupal site name -DREVOPS_DRUPAL_SITE_NAME="${DREVOPS_DRUPAL_SITE_NAME:-Example site}" - -# Drupal site name -DREVOPS_DRUPAL_SITE_EMAIL="${DREVOPS_DRUPAL_SITE_EMAIL:-webmaster@example.com}" - -# Profile machine name. -DREVOPS_DRUPAL_PROFILE="${DREVOPS_DRUPAL_PROFILE:-standard}" - -# Path to configuration directory. -DREVOPS_DRUPAL_CONFIG_PATH="${DREVOPS_DRUPAL_CONFIG_PATH:-${DREVOPS_APP}/config/default}" - -# Config label. -DREVOPS_DRUPAL_CONFIG_LABEL="${DREVOPS_DRUPAL_CONFIG_LABEL:-}" - -# Path to private files. -DREVOPS_DRUPAL_PRIVATE_FILES="${DREVOPS_DRUPAL_PRIVATE_FILES:-${DREVOPS_APP}/docroot/sites/default/files/private}" - -# Directory with database dump file. -DREVOPS_DB_DIR="${DREVOPS_DB_DIR:-${DREVOPS_APP}/.data}" - -# Database dump file name. -DREVOPS_DB_FILE="${DREVOPS_DB_FILE:-db.sql}" - -# Install a site from profile instead of database file dump. -DREVOPS_DRUPAL_INSTALL_FROM_PROFILE="${DREVOPS_DRUPAL_INSTALL_FROM_PROFILE:-0}" - -# Flag to always overwrite existing database. Usually set to 0 in deployed -# environments. -DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB="${DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB:-0}" - -# Skip database sanitization. -DREVOPS_DRUPAL_INSTALL_DB_SANITIZE_SKIP="${DREVOPS_DRUPAL_INSTALL_DB_SANITIZE_SKIP:-0}" - -# Put the site into a maintenance mode during site installation phase. -DREVOPS_DRUPAL_INSTALL_USE_MAINTENANCE_MODE="${DREVOPS_DRUPAL_INSTALL_USE_MAINTENANCE_MODE:-1}" - -# Flag to skip running post DB import commands. -# Useful to only import the database from file (or install from profile) and not -# perform any additional operations. For example, when need to capture database -# state before any updates ran (for example, DB caching in CI). -DREVOPS_DRUPAL_INSTALL_OPERATIONS_SKIP="${DREVOPS_DRUPAL_INSTALL_OPERATIONS_SKIP:-0}" - -# ------------------------------------------------------------------------------ - -echo "==> Started site installation." - -# Use local or global Drush, giving priority to a local Drush. -drush="$(if [ -f "${DREVOPS_APP}/vendor/bin/drush" ]; then echo "${DREVOPS_APP}/vendor/bin/drush"; else command -v drush; fi)" - -# Print installation information. -# Note that "flag" variable values are printed as-is to make it easy to visually -# assert their values. -echo -echo " > Drush binary : ${drush}" -echo " > Drush version : $($drush --version)" -echo " > App dir : ${DREVOPS_APP}" -echo " > Site name : ${DREVOPS_DRUPAL_SITE_NAME}" -echo " > Site email : ${DREVOPS_DRUPAL_SITE_EMAIL}" -echo " > Profile : ${DREVOPS_DRUPAL_PROFILE}" -echo " > Install from profile : ${DREVOPS_DRUPAL_INSTALL_FROM_PROFILE}" -echo " > Overwrite existing DB : ${DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB}" -echo " > Skip sanitization : ${DREVOPS_DRUPAL_INSTALL_DB_SANITIZE_SKIP}" -echo " > Use maintenance mode : ${DREVOPS_DRUPAL_INSTALL_USE_MAINTENANCE_MODE}" -echo " > Skip post-install operations : ${DREVOPS_DRUPAL_INSTALL_OPERATIONS_SKIP}" -echo " > Private files directory : ${DREVOPS_DRUPAL_PRIVATE_FILES}" -echo " > Config path : ${DREVOPS_DRUPAL_CONFIG_PATH}" -echo " > Config directory label : ${DREVOPS_DRUPAL_CONFIG_LABEL}" -echo " > DB dump file path : ${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" - -site_is_installed="$($drush status --fields=bootstrap | grep -q "Successful" && echo "1" || echo "0")" -echo " > Existing site found : ${site_is_installed}" - -site_has_config="$(test "$(ls -1 $DREVOPS_DRUPAL_CONFIG_PATH/*.yml 2>/dev/null | wc -l | tr -d ' ')" -gt 0 && echo "1" || echo "0")" -echo " > Configuration files present : ${site_has_config}" -echo - -if [ -n "${DREVOPS_DRUPAL_PRIVATE_FILES}" ]; then - echo "==> Creating private files directory." - if [ -d "${DREVOPS_DRUPAL_PRIVATE_FILES}" ]; then - echo " > Private files directory already exists." - else - mkdir -p "${DREVOPS_DRUPAL_PRIVATE_FILES}" - if [ -d "${DREVOPS_DRUPAL_PRIVATE_FILES}" ]; then - echo " > Successfully created private files directory." - else - echo "ERROR: Unable to create private files directory." - exit 1 - fi - fi -fi - -# -# Install site by importing from the database dump file. -# -install_import() { - if [ ! -f "${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" ]; then - echo "ERROR: Unable to import database from file." - echo " Dump file ${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE} does not exist." - echo " Site content was not changed." - exit 1 - fi - - $drush -q sql-drop -y - $drush sqlc <"${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" - echo " > Successfully imported database from dump file." -} - -# -# Install site from profile. -# -install_profile() { - opts=( - "${DREVOPS_DRUPAL_PROFILE}" - --site-name="${DREVOPS_DRUPAL_SITE_NAME}" - --site-mail="${DREVOPS_DRUPAL_SITE_EMAIL}" - --account-name=admin - install_configure_form.enable_update_status_module=NULL - install_configure_form.enable_update_status_emails=NULL - -y - ) - - [ -n "${DREVOPS_DRUPAL_ADMIN_EMAIL}" ] && opts+=(--account-mail="${DREVOPS_DRUPAL_ADMIN_EMAIL}") - [ "${site_has_config}" = "1" ] && opts+=(--existing-config) - - # Database may exist in non-bootstrappable state - truncuate it. - $drush sql-drop -y - $drush sql-drop -y - $drush si "${opts[@]}" - echo " > Successfully installed a site from profile." -} - -# Install site from DB dump or profile. -# -# The code block below has explicit if-else conditions and verbose output to -# ensure that this significant operation is executed correctly and has -# sufficient output for debugging. -echo "========================================" -if [ "${DREVOPS_DRUPAL_INSTALL_FROM_PROFILE}" != "1" ]; then - echo "==> Installing site from the database dump file." - echo " > Dump file: ${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" - - if [ "${site_is_installed}" = "1" ]; then - echo " > Existing site was found." - - if [ "${DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB}" = "1" ]; then - echo " > Existing site content will be removed and new content will be imported from the database dump file." - install_import - else - echo " > Site content will be preserved." - echo " > Sanitization will be skipped for an existing database." - export DREVOPS_DRUPAL_INSTALL_DB_SANITIZE_SKIP=1 - fi - else - echo " > Existing site was not found." - echo " > The site content will be imported from the database dump file." - install_import - fi -else - echo "==> Installing site from the profile." - echo " > Profile: ${DREVOPS_DRUPAL_PROFILE}." - - if [ "${site_is_installed}" = "1" ]; then - echo " > Existing site was found." - - if [ "${DREVOPS_DRUPAL_INSTALL_OVERRIDE_EXISTING_DB}" = "1" ]; then - echo " > Existing site content will be removed and new content will be created from the profile." - install_profile - else - echo " > Site content will be preserved." - echo " > Sanitization will be skipped for an existing database." - export DREVOPS_DRUPAL_INSTALL_DB_SANITIZE_SKIP=1 - fi - else - echo " > Existing site was not found." - echo " > The site content will be created from the profile." - install_profile - fi -fi -echo "========================================" - -if [ "${DREVOPS_DRUPAL_INSTALL_OPERATIONS_SKIP}" = "1" ]; then - echo "==> Skipped running of post-install operations." - echo "==> Finished site installation." - exit 0 -fi - -echo "==> Running post-install operations." - -if [ "${DREVOPS_DRUPAL_INSTALL_USE_MAINTENANCE_MODE}" = "1" ]; then - $drush state:set system.maintenance_mode 1 --input-format=integer - echo "==> Enabled maintenance mode." -fi - -echo "==> Running database updates." -$drush updb -y - -echo "==> Importing Drupal configuration if it exists." -if [ "${site_has_config}" = "1" ]; then - if [ -f "${DREVOPS_DRUPAL_CONFIG_PATH}/system.site.yml" ]; then - config_uuid="$(cat "${DREVOPS_DRUPAL_CONFIG_PATH}/system.site.yml" | grep uuid | tail -c +7 | head -c 36)" - $drush config-set system.site uuid "${config_uuid}" --yes - echo " > Updated site UUID from the configuration with ${config_uuid}." - fi - - echo " > Importing configuration" - $drush cim "${DREVOPS_DRUPAL_CONFIG_LABEL}" -y - - # Import config_split configuration if the module is installed. - if $drush pml --status=enabled | grep -q config_split; then - echo " > Importing config_split configuration." - # Drush command does not return correct code on failed split, so not - # failing on import for the non-existing environment is currently - # the same as not failing on failed import. - # @see https://www.drupal.org/project/config_split/issues/3171819 - $drush config-split:import -y "${environment:-}" || true - fi -else - echo " > Configuration files were not found in ${DREVOPS_DRUPAL_CONFIG_PATH} path." -fi - -echo "==> Rebuilding cache." -$drush cr - -echo -n "==> Current Drupal environment: " -environment="$($drush ev "print \Drupal\core\Site\Settings::get('environment');")" -echo "${environment}" && echo - -# Run post-config import updates for the cases when updates rely on imported configuration. -# @see PostConfigImportUpdateHelper::registerPostConfigImportUpdate() -if $drush list | grep -q pciu; then - echo "==> Running post config import updates." - $drush post-config-import-update -fi - -if [ "${DREVOPS_DRUPAL_INSTALL_DB_SANITIZE_SKIP}" != "1" ]; then - # Sanitize database. - "${DREVOPS_APP}/scripts/drevops/drupal-sanitize-db.sh" -else - echo "==> Skipped database sanitization." -fi - -# Run custom drupal site install scripts. -# The files should be located in ""${DREVOPS_APP}"/scripts/custom/" directory and must have -# "drupal-install-site-" prefix and ".sh" extension. -if [ -d "${DREVOPS_APP}/scripts/custom" ]; then - for file in "${DREVOPS_APP}"/scripts/custom/drupal-install-site-*.sh; do - if [ -f "${file}" ]; then - echo "==> Running custom post-install script ${file}." - . "${file}" - fi - done - unset file -fi - -if [ "${DREVOPS_DRUPAL_INSTALL_USE_MAINTENANCE_MODE}" = "1" ]; then - $drush state:set system.maintenance_mode 0 --input-format=integer - $drush cache:rebuild - echo "==> Disabled maintenance mode." -fi - -# Generate a one-time login link. -echo -"${DREVOPS_APP}/scripts/drevops/drupal-login.sh" -echo - -echo "==> Finished site installation." diff --git a/scripts/drevops/drupal-login.sh b/scripts/drevops/drupal-login.sh deleted file mode 100755 index 3376022f8..000000000 --- a/scripts/drevops/drupal-login.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -## -# Login to a Drupal site as an admin user. -# -# shellcheck disable=SC2086 - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to the application. -DREVOPS_APP="${DREVOPS_APP:-/app}" - -# Flag to unblock admin. -DREVOPS_DRUPAL_LOGIN_UNBLOCK_ADMIN="${DREVOPS_DRUPAL_LOGIN_UNBLOCK_ADMIN:-1}" - -# ------------------------------------------------------------------------------ - -# Use local or global Drush, giving priority to a local drush. -drush="$(if [ -f "${DREVOPS_APP}/vendor/bin/drush" ]; then echo "${DREVOPS_APP}/vendor/bin/drush"; else command -v drush; fi)" - -if [ "${DREVOPS_DRUPAL_LOGIN_UNBLOCK_ADMIN}" = "1" ]; then - if $drush pml --status=enabled | grep -q user_expire; then - $drush -q sqlq "UPDATE \`user__field_password_expiration\` SET \`field_password_expiration_value\` = 0 WHERE \`bundle\` = \"user\" AND \`entity_id\` = 1;" - fi - $drush sqlq "SELECT name FROM \`users_field_data\` WHERE \`uid\` = '1';" | awk NF | head -n 1 | xargs $drush -q -- uublk -fi - -$drush uli diff --git a/scripts/drevops/drupal-logout.sh b/scripts/drevops/drupal-logout.sh deleted file mode 100755 index d33b470da..000000000 --- a/scripts/drevops/drupal-logout.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -## -# Log out an admin from a Drupal site. -# -# shellcheck disable=SC2086 - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to the application. -DREVOPS_APP="${DREVOPS_APP:-/app}" - -# Flag to block or unblock admin. -DREVOPS_DRUPAL_LOGIN_UNBLOCK_ADMIN="${DREVOPS_DRUPAL_LOGIN_UNBLOCK_ADMIN:-1}" - -# ------------------------------------------------------------------------------ - -# Use local or global Drush, giving priority to a local drush. -drush="$(if [ -f "${DREVOPS_APP}/vendor/bin/drush" ]; then echo "${DREVOPS_APP}/vendor/bin/drush"; else command -v drush; fi)" - -if [ "${DREVOPS_DRUPAL_LOGIN_UNBLOCK_ADMIN}" = "1" ]; then - $drush sqlq "SELECT name FROM \`users_field_data\` WHERE \`uid\` = '1';" | head -n 1 | xargs $drush -q -- ublk -fi diff --git a/scripts/drevops/drupal-sanitize-db.sh b/scripts/drevops/drupal-sanitize-db.sh deleted file mode 100755 index 36f0420d5..000000000 --- a/scripts/drevops/drupal-sanitize-db.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash -## -# Sanitize database. -# -# shellcheck disable=SC2086 - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to the application. -DREVOPS_APP="${DREVOPS_APP:-/app}" - -# Database sanitized account email replacement. -DREVOPS_DRUPAL_DB_SANITIZE_EMAIL="${DREVOPS_DRUPAL_DB_SANITIZE_EMAIL:-user+%uid@localhost}" - -# Database sanitized account password replacement. -DREVOPS_DRUPAL_DB_SANITIZE_PASSWORD="${DREVOPS_DRUPAL_DB_SANITIZE_PASSWORD:-${RANDOM}${RANDOM}${RANDOM}${RANDOM}}" - -# Replace username with mail. -DREVOPS_DRUPAL_DB_SANITIZE_REPLACE_USERNAME_WITH_EMAIL="${DREVOPS_DRUPAL_DB_SANITIZE_REPLACE_USERNAME_WITH_EMAIL:-0}" - -# Path to file with custom sanitization SQL queries. -# To skip custom sanitization, remove the DREVOPS_DRUPAL_DB_SANITIZE_ADDITIONAL_FILE file from the codebase. -DREVOPS_DRUPAL_DB_SANITIZE_ADDITIONAL_FILE="${DREVOPS_DRUPAL_DB_SANITIZE_ADDITIONAL_FILE:-${DREVOPS_APP}/scripts/sanitize.sql}" - -# ------------------------------------------------------------------------------ - -# Use local or global Drush, giving priority to a local drush. -drush="$(if [ -f "${DREVOPS_APP}/vendor/bin/drush" ]; then echo "${DREVOPS_APP}/vendor/bin/drush"; else command -v drush; fi)" - -echo "==> Started database sanitization." - -echo " > Sanitizing database using drush sql-sanitize." -# Always sanitize password and email using standard methods. -$drush sql-sanitize --sanitize-password="${DREVOPS_DRUPAL_DB_SANITIZE_PASSWORD}" --sanitize-email="${DREVOPS_DRUPAL_DB_SANITIZE_EMAIL}" -y - -if [ "${DREVOPS_DRUPAL_DB_SANITIZE_REPLACE_USERNAME_WITH_EMAIL}" = "1" ]; then - echo " > Updating username with user email." - $drush sql-query "UPDATE \`users_field_data\` set users_field_data.name=users_field_data.mail WHERE uid <> '0';" -fi - -# Sanitize using additional SQL commands provided in file. -# To skip custom sanitization, remove the DREVOPS_DRUPAL_DB_SANITIZE_ADDITIONAL_FILE file from the codebase. -if [ -f "${DREVOPS_DRUPAL_DB_SANITIZE_ADDITIONAL_FILE}" ]; then - echo " > Applying custom sanitization commands from file ${DREVOPS_DRUPAL_DB_SANITIZE_ADDITIONAL_FILE}." - $drush sql-query --file="${DREVOPS_DRUPAL_DB_SANITIZE_ADDITIONAL_FILE}" -fi - -# User mail and name for use 0 could have been sanitized - resetting it. -echo " > Resetting user 0 username and email." -$drush sql-query "UPDATE \`users_field_data\` SET mail = '', name = '' WHERE uid = '0';" -$drush sql-query "UPDATE \`users_field_data\` SET name = '' WHERE uid = '0';" - -# User email could have been sanitized - setting it back to a pre-defined email. -if [ -n "${DREVOPS_DRUPAL_ADMIN_EMAIL}" ]; then - echo " > Updating user 1 email" - $drush sql-query "UPDATE \`users_field_data\` SET mail = '${DREVOPS_DRUPAL_ADMIN_EMAIL}' WHERE uid = '1';" -fi - -echo "==> Finished database sanitization." diff --git a/scripts/drevops/export-code.sh b/scripts/drevops/export-code.sh deleted file mode 100755 index f58305f4b..000000000 --- a/scripts/drevops/export-code.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash -## -# Export code. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Path to application. -DREVOPS_APP="${DREVOPS_APP:-/app}" - -# Directory to store exported code. -DREVOPS_EXPORT_CODE_DIR="${DREVOPS_EXPORT_CODE_DIR:-}" - -# ------------------------------------------------------------------------------ - -if [ -n "${DREVOPS_EXPORT_CODE_DIR}" ]; then - mkdir -p "${DREVOPS_EXPORT_CODE_DIR}" - cp -R "${DREVOPS_APP}"/. "${DREVOPS_EXPORT_CODE_DIR}" - rm -Rf "${DREVOPS_EXPORT_CODE_DIR}"/node_modules >/dev/null; -fi diff --git a/scripts/drevops/export-db-docker.sh b/scripts/drevops/export-db-docker.sh index fd71a5fc1..163f36554 100755 --- a/scripts/drevops/export-db-docker.sh +++ b/scripts/drevops/export-db-docker.sh @@ -2,9 +2,12 @@ ## # Export database as a Docker image. # +# shellcheck disable=SC1090,SC1091 -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Docker image archive file name. DREVOPS_DB_EXPORT_DOCKER_ARCHIVE_FILE="${DREVOPS_DB_EXPORT_DOCKER_ARCHIVE_FILE:-${1}}" @@ -13,7 +16,7 @@ DREVOPS_DB_EXPORT_DOCKER_ARCHIVE_FILE="${DREVOPS_DB_EXPORT_DOCKER_ARCHIVE_FILE:- DREVOPS_DB_EXPORT_DOCKER_IMAGE="${DREVOPS_DB_EXPORT_DOCKER_IMAGE:-}" # Docker registry name. -DREVOPS_DB_EXPORT_DOCKER_REGISTRY="${DREVOPS_DB_EXPORT_DOCKER_REGISTRY:-${DREVOPS_DOCKER_REGISTRY:-docker.io}}" +DREVOPS_DB_EXPORT_DOCKER_REGISTRY="${DREVOPS_DB_EXPORT_DOCKER_REGISTRY:-${DOCKER_REGISTRY:-docker.io}}" # The service name to capture. DREVOPS_DB_EXPORT_DOCKER_SERVICE_NAME="${DREVOPS_DB_EXPORT_DOCKER_SERVICE_NAME:-mariadb}" @@ -23,28 +26,46 @@ DREVOPS_DB_EXPORT_DOCKER_DIR="${DREVOPS_DB_EXPORT_DOCKER_DIR:-${DREVOPS_DB_DIR}} # ------------------------------------------------------------------------------ -echo "==> Started Docker database image export." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started Docker database image export." -[ -z "${DREVOPS_DB_EXPORT_DOCKER_IMAGE}" ] && echo "ERROR: Destination image name is not specified. Please provide docker image as a variable DREVOPS_DB_EXPORT_DOCKER_IMAGE in a format /." && exit 1 +[ -z "${DREVOPS_DB_EXPORT_DOCKER_IMAGE}" ] && fail "Destination image name is not specified. Please provide docker image as a variable DREVOPS_DB_EXPORT_DOCKER_IMAGE in a format /." && exit 1 -cid="$(docker-compose ps -q "${DREVOPS_DB_EXPORT_DOCKER_SERVICE_NAME}")" -echo " > Found \"${DREVOPS_DB_EXPORT_DOCKER_SERVICE_NAME}\" service container with id \"${cid}\"." +cid="$(docker compose ps -q "${DREVOPS_DB_EXPORT_DOCKER_SERVICE_NAME}")" +note "Found ${DREVOPS_DB_EXPORT_DOCKER_SERVICE_NAME} service container with id ${cid}." new_image="${DREVOPS_DB_EXPORT_DOCKER_REGISTRY}/${DREVOPS_DB_EXPORT_DOCKER_IMAGE}" -echo " > Committing exported Docker image with name \"${new_image}\"." +note "Locking and unlocking tables before upgrade." +docker compose exec -T "${DREVOPS_DB_EXPORT_DOCKER_SERVICE_NAME}" mysql -e "FLUSH TABLES WITH READ LOCK;" +sleep 5 +docker compose exec -T "${DREVOPS_DB_EXPORT_DOCKER_SERVICE_NAME}" mysql -e "UNLOCK TABLES;" + +note "Running forced service upgrade." +docker compose exec -T "${DREVOPS_DB_EXPORT_DOCKER_SERVICE_NAME}" sh -c "mysql_upgrade --force" + +note "Locking tables after upgrade." +docker compose exec -T "${DREVOPS_DB_EXPORT_DOCKER_SERVICE_NAME}" mysql -e "FLUSH TABLES WITH READ LOCK;" + +note "Committing exported Docker image with name ${new_image}." iid=$(docker commit "${cid}" "${new_image}") iid="${iid#sha256:}" -echo " > Committed exported Docker image with id \"${iid}\"." +note "Committed exported Docker image with id ${iid}." # Create directory to store database dump. mkdir -p "${DREVOPS_DB_EXPORT_DOCKER_DIR}" # Create dump file name with a timestamp or use the file name provided # as a first argument. Also, make sure that the extension is correct. -archive_file=$([ "${DREVOPS_DB_EXPORT_DOCKER_ARCHIVE_FILE}" ] && echo "${DREVOPS_DB_EXPORT_DOCKER_DIR}/${DREVOPS_DB_EXPORT_DOCKER_ARCHIVE_FILE//.sql/.tar}" || echo "${DREVOPS_DB_EXPORT_DOCKER_DIR}/export_db_$(date +%Y_%m_%d_%H_%M_%S).tar") +archive_file=$([ "${DREVOPS_DB_EXPORT_DOCKER_ARCHIVE_FILE}" ] && echo "${DREVOPS_DB_EXPORT_DOCKER_DIR}/${DREVOPS_DB_EXPORT_DOCKER_ARCHIVE_FILE//.sql/.tar}" || echo "${DREVOPS_DB_EXPORT_DOCKER_DIR}/export_db_$(date +%Y%m%d_%H%M%S).tar") -echo " > Exporting database image archive to \"${archive_file}\" file." +note "Exporting database image archive to file ${archive_file}." [ -f "${archive_file}" ] && rm -f "${archive_file}" mkdir -p "$(dirname "${archive_file}")" @@ -52,9 +73,9 @@ docker save -o "${archive_file}" "${new_image}" # Check that file was saved and output saved dump file name. if [ -f "${archive_file}" ] && [ -s "${archive_file}" ]; then - echo " > Exported database image archive file saved \"${archive_file}\"." + note "Saved exported database image archive file ${archive_file}." else - echo "ERROR: Unable to save database image archive file \"${archive_file}\"." && exit 1 + fail "Unable to save database image archive file ${archive_file}." && exit 1 fi -echo "==> Finished Docker database image export." +pass "Finished Docker database image export." diff --git a/scripts/drevops/export-db-file.sh b/scripts/drevops/export-db-file.sh index 4b48c2b34..47df80ccb 100755 --- a/scripts/drevops/export-db-file.sh +++ b/scripts/drevops/export-db-file.sh @@ -1,42 +1,50 @@ #!/usr/bin/env bash -# shellcheck disable=SC2086 ## # Export database as a file. # +# shellcheck disable=SC1090,SC1091,SC2086 -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -# Path to the application. -DREVOPS_APP="${DREVOPS_APP:-/app}" +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Directory with database dump file. -DREVOPS_DB_EXPORT_FILE_DIR="${DREVOPS_DB_DIR:-${DREVOPS_DB_DIR}}" +DREVOPS_DB_EXPORT_FILE_DIR="${DREVOPS_DB_EXPORT_FILE_DIR:-${DREVOPS_DB_DIR:-./.data}}" # ------------------------------------------------------------------------------ -echo "==> Started database file export." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on -# Use local or global Drush. -drush="$(if [ -f "${DREVOPS_APP}/vendor/bin/drush" ]; then echo "${DREVOPS_APP}/vendor/bin/drush"; else command -v drush; fi)" +info "Started database file export." -# Create directory to store database dump. -mkdir -p "${DREVOPS_DB_EXPORT_FILE_DIR}" +drush() { ./vendor/bin/drush -y "$@"; } # Create dump file name with a timestamp or use the file name provided # as a first argument. -dump_file=$([ "${1}" ] && echo "${DREVOPS_DB_EXPORT_FILE_DIR}/${1}" || echo "${DREVOPS_DB_EXPORT_FILE_DIR}/export_db_$(date +%Y_%m_%d_%H_%M_%S).sql") +dump_file=$([ "${1:-}" ] && echo "${DREVOPS_DB_EXPORT_FILE_DIR}/${1}" || echo "${DREVOPS_DB_EXPORT_FILE_DIR}/export_db_$(date +%Y%m%d_%H%M%S).sql") -# Dump database into a file. Also, convert relative path to an absolute one, as -# the result file is relative to Drupal root, but provided paths are relative -# to the project root. -$drush sql-dump --skip-tables-key=common --extra-dump=--no-tablespaces --result-file="${dump_file/.\//${DREVOPS_APP}/}" -q +# If dump file is relative - update it to the parent directory, because the +# `drush sql:dump` command result file is relative to Drupal root, but provided +# path is relative to the project root. +dump_file_drush="${dump_file/#.\//../}" + +# Create a directory to store database dump. +mkdir -p "$(dirname "${dump_file_drush}")" + +# Dump database into a file. +drush sql:dump --skip-tables-key=common --extra-dump=--no-tablespaces --result-file="${dump_file_drush}" -q # Check that file was saved and output saved dump file name. if [ -f "${dump_file}" ] && [ -s "${dump_file}" ]; then - echo " > Exported database dump saved ${dump_file}." + note "Exported database dump saved ${dump_file}." else - echo "ERROR: Unable to save dump file ${dump_file}." && exit 1 + fail "Unable to save dump file ${dump_file}." && exit 1 fi -echo "==> Finished database file export." +pass "Finished database file export." diff --git a/scripts/drevops/export-db.sh b/scripts/drevops/export-db.sh new file mode 100755 index 000000000..20b02c13b --- /dev/null +++ b/scripts/drevops/export-db.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +## +# Export database. +# +# This is a router script to call relevant scripts based on type. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Name of the database docker image to use. Uncomment to use an image with +# a DB data loaded into it. +# @see https://github.com/drevops/mariadb-drupal-data to seed your DB image. +DREVOPS_DB_DOCKER_IMAGE="${DREVOPS_DB_DOCKER_IMAGE:-}" + +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started database export." + +if [ -z "${DREVOPS_DB_DOCKER_IMAGE}" ]; then + # Export database as a file. + docker compose exec -T cli ./scripts/drevops/export-db-file.sh "$@" +else + # Export database as a Docker image. + DREVOPS_DB_EXPORT_DOCKER_IMAGE="${DREVOPS_DB_DOCKER_IMAGE}" ./scripts/drevops/export-db-docker.sh "$@" + + # Deploy docker image. + # @todo Move deployment into a separate script. + if [ "${DREVOPS_EXPORT_DB_DOCKER_DEPLOY_PROCEED:-}" = "1" ]; then + DREVOPS_DEPLOY_DOCKER_MAP=mariadb=${DREVOPS_DB_DOCKER_IMAGE} \ + ./scripts/drevops/deploy-docker.sh + fi +fi + +pass "Finished database export." diff --git a/scripts/drevops/github-labels.sh b/scripts/drevops/github-labels.sh index 03e289f81..59284b052 100755 --- a/scripts/drevops/github-labels.sh +++ b/scripts/drevops/github-labels.sh @@ -6,24 +6,35 @@ # Interactive prompt: # ./github-labels.sh # -# Silent, if $DREVOPS_GITHUB_TOKEN or $GITHUB_TOKEN is set in an environment and +# Silent, if $GITHUB_TOKEN or $GITHUB_TOKEN is set in an environment and # a repository provided as an argument: -# DREVOPS_GITHUB_TOKEN=ghp_123 DREVOPS_GITHUB_REPO=myorg/myrepo ./github-labels.sh +# GITHUB_TOKEN=ghp_123 DREVOPS_GITHUB_REPO=myorg/myrepo ./github-labels.sh # -# shellcheck disable=SC2155 +# shellcheck disable=SC1090,SC1091,SC2155 -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -# GitHub token to perform operations. -DREVOPS_GITHUB_TOKEN="${DREVOPS_GITHUB_TOKEN:-${GITHUB_TOKEN}}" +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # GitHub repository as "org/name" to perform operations on. -DREVOPS_GITHUB_REPO="${DREVOPS_GITHUB_REPO:-$1}" +DREVOPS_GITHUB_REPO="${DREVOPS_GITHUB_REPO:-${1:-}}" + +# GitHub token to perform operations. +GITHUB_TOKEN="${GITHUB_TOKEN:-}" # Delete existing labels to mirror the list below. DREVOPS_GITHUB_DELETE_EXISTING_LABELS="${DREVOPS_GITHUB_DELETE_EXISTING_LABELS:-1}" +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + # Array of labels to create. If DELETE_EXISTING_LABELS=1, the labels list will # be exactly as below, otherwise labels below will be added to existing ones. labels=( @@ -45,18 +56,18 @@ labels=( # "enhancement" "a2eeef" "New feature or request" # "help wanted" "008672" "Extra attention is needed" # "good first issue" "7057ff" "Good for newcomers" - # "invalid" "e4e669o" "This doesn't seem right" + # "invalid" "e4e669" "This doesn't seem right" # "question" "d876e3" "Further information is requested" # "wontfix" "ffffff" "This will not be worked on" ) # ------------------------------------------------------------------------------ -main(){ - echo "==> Processing GitHub labels." +main() { + info "Processing GitHub labels." echo - if [ "${DREVOPS_GITHUB_DELETE_EXISTING_LABELS}" = "1" ]; then + if [ "${DREVOPS_GITHUB_DELETE_EXISTING_LABELS:-}" = "1" ]; then echo " This script will remove the default GitHub labels." else echo " This script will not remove the default GitHub labels." @@ -65,43 +76,43 @@ main(){ echo " A personal access token is required to access private repositories." echo - if [ "${DREVOPS_GITHUB_REPO}" = "" ]; then + if [ "${DREVOPS_GITHUB_REPO}" = "" ]; then echo '' echo -n 'Enter GitHub Org/Repo (e.g. myorg/myrepo): ' read -r DREVOPS_GITHUB_REPO fi - [ "${DREVOPS_GITHUB_REPO}" = "" ] && echo "ERROR: GitHub repository name is required" && exit 1 + [ "${DREVOPS_GITHUB_REPO}" = "" ] && fail "GitHub repository name is required" && exit 1 - if [ "${DREVOPS_GITHUB_TOKEN}" = "" ]; then + if [ "${GITHUB_TOKEN}" = "" ]; then echo '' echo -n 'GitHub Personal Access Token: ' - read -r -s DREVOPS_GITHUB_TOKEN + read -r -s GITHUB_TOKEN fi - [ "${DREVOPS_GITHUB_TOKEN}" = "" ] && echo "ERROR: GitHub token name is required" && exit 1 + [ "${GITHUB_TOKEN}" = "" ] && fail "GitHub token is required" && exit 1 - repo_org=$(echo "$DREVOPS_GITHUB_REPO" | cut -f1 -d /) - repo_name=$(echo "$DREVOPS_GITHUB_REPO" | cut -f2 -d /) + repo_org=$(echo "${DREVOPS_GITHUB_REPO}" | cut -f1 -d /) + repo_name=$(echo "${DREVOPS_GITHUB_REPO}" | cut -f2 -d /) if ! user_has_access; then - echo "ERROR: User does not have access to specified repository. Please check your credentials" && exit 1 + fail "User does not have access to specified repository. Please check your credentials" && exit 1 fi echo - echo " > Starting label processing" + note "Starting label processing" echo timeout 5 echo if [ "${DREVOPS_GITHUB_DELETE_EXISTING_LABELS}" = "1" ]; then - echo " > Checking existing labels" + note "Checking existing labels" existing_labels_strings="$(label_all)" # shellcheck disable=SC2207 - IFS=$'\n' existing_labels=( $(xargs -n1 <<<"${existing_labels_strings}") ) + IFS=$'\n' existing_labels=($(xargs -n1 <<<"${existing_labels_strings}")) for existing_label_name in "${existing_labels[@]}"; do if ! is_provided_label "${existing_label_name}"; then - echo " Removing label \"${existing_label_name}\" as it is not in thr provided list" + echo " Removing label \"${existing_label_name}\" as it is not in the provided list" if label_delete "${existing_label_name}"; then echo " DELETED label \"${existing_label_name}\"" else @@ -113,14 +124,14 @@ main(){ count=0 for value in "${labels[@]}"; do - if (( count % 3 == 0)); then + if ((count % 3 == 0)); then name="${value}" - elif (( count % 3 == 1)); then + elif ((count % 3 == 1)); then color="${value}" else description="${value}" - echo " > Processing label \"${name}\"" + note "Processing label \"${name}\"" if label_exists "${name}"; then if label_update "${name}" "${color}" "${description}"; then echo " UPDATED label \"${name}\"" @@ -136,51 +147,51 @@ main(){ fi fi - count=$(( count + 1 )) + count=$((count + 1)) done echo - echo "==> Label processing complete" + pass "Label processing complete" echo } -is_provided_label(){ +is_provided_label() { label="${1}" count=0 for value in "${labels[@]}"; do - if (( count % 3 == 0)); then + if ((count % 3 == 0)); then name="${value}" if [ "${label}" = "${name}" ]; then - return 0; + return 0 fi fi - count=$(( count + 1 )) + count=$((count + 1)) done return 1 } -user_has_access(){ - status=$( \ +user_has_access() { + status=$( curl -s -I \ - -u "${DREVOPS_GITHUB_TOKEN}":x-oauth-basic \ - --include -H "Accept: application/vnd.github.symmetra-preview+json" \ - -o /dev/null \ - -w "%{http_code}" \ - --request GET \ - "https://api.github.com/repos/${repo_org}/${repo_name}/labels" \ + -u "${GITHUB_TOKEN}":x-oauth-basic \ + --include -H "Accept: application/vnd.github.symmetra-preview+json" \ + -o /dev/null \ + -w "%{http_code}" \ + --request GET \ + "https://api.github.com/repos/${repo_org}/${repo_name}/labels" ) [ "${status}" = "200" ] } -label_all(){ - response=$( \ +label_all() { + response=$( curl -s \ - -u "${DREVOPS_GITHUB_TOKEN}":x-oauth-basic \ - --include -H "Accept: application/vnd.github.symmetra-preview+json" \ - --request GET \ - "https://api.github.com/repos/${repo_org}/${repo_name}/labels" \ + -u "${GITHUB_TOKEN}":x-oauth-basic \ + --include -H "Accept: application/vnd.github.symmetra-preview+json" \ + --request GET \ + "https://api.github.com/repos/${repo_org}/${repo_name}/labels" ) jsonval "${response}" "name" } @@ -188,88 +199,90 @@ label_all(){ label_exists() { local name="${1}" local name_encoded=$(uriencode "${name}") - status=$( \ + status=$( curl -s -I \ - -u "${DREVOPS_GITHUB_TOKEN}":x-oauth-basic \ - --include -H "Accept: application/vnd.github.symmetra-preview+json" \ - -o /dev/null \ - -w "%{http_code}" \ - --request GET \ - "https://api.github.com/repos/${repo_org}/${repo_name}/labels/${name_encoded}" \ - ) + -u "${GITHUB_TOKEN}":x-oauth-basic \ + --include -H "Accept: application/vnd.github.symmetra-preview+json" \ + -o /dev/null \ + -w "%{http_code}" \ + --request GET \ + "https://api.github.com/repos/${repo_org}/${repo_name}/labels/${name_encoded}" + ) [ "${status}" = "200" ] } -label_create(){ +label_create() { local name="${1}" local color="${2}" local description="${3}" - local status=$(curl -s \ - -u "${DREVOPS_GITHUB_TOKEN}":x-oauth-basic \ - -H "Accept: application/vnd.github.symmetra-preview+json" \ - -o /dev/null \ - -w "%{http_code}" \ - --request POST \ - --data "{\"name\":\"${name}\",\"color\":\"${color}\", \"description\":\"${description}\"}" \ - "https://api.github.com/repos/${repo_org}/${repo_name}/labels" \ + local status=$( + curl -s \ + -u "${GITHUB_TOKEN}":x-oauth-basic \ + -H "Accept: application/vnd.github.symmetra-preview+json" \ + -o /dev/null \ + -w "%{http_code}" \ + --request POST \ + --data "{\"name\":\"${name}\",\"color\":\"${color}\", \"description\":\"${description}\"}" \ + "https://api.github.com/repos/${repo_org}/${repo_name}/labels" ) [ "${status}" = "201" ] } -label_update(){ +label_update() { local name="${1}" local color="${2}" local description="${3}" local name_encoded=$(uriencode "${name}") - local status=$(curl -s \ - -u "${DREVOPS_GITHUB_TOKEN}":x-oauth-basic \ - -H "Accept: application/vnd.github.symmetra-preview+json" \ - -o /dev/null \ - -w "%{http_code}" \ - --request PATCH \ - --data "{\"name\":\"${name}\",\"color\":\"${color}\", \"description\":\"${description}\"}" \ - "https://api.github.com/repos/${repo_org}/${repo_name}/labels/${name_encoded}" \ + local status=$( + curl -s \ + -u "${GITHUB_TOKEN}":x-oauth-basic \ + -H "Accept: application/vnd.github.symmetra-preview+json" \ + -o /dev/null \ + -w "%{http_code}" \ + --request PATCH \ + --data "{\"name\":\"${name}\",\"color\":\"${color}\", \"description\":\"${description}\"}" \ + "https://api.github.com/repos/${repo_org}/${repo_name}/labels/${name_encoded}" ) [ "${status}" = "200" ] } -label_delete(){ - local name="${1}" - local color="${2}" - local description="${3}" +label_delete() { + local name="${1:-}" local name_encoded=$(uriencode "${name}") - local status=$(curl -s \ - -u "${DREVOPS_GITHUB_TOKEN}":x-oauth-basic \ - -H "Accept: application/vnd.github.symmetra-preview+json" \ - -o /dev/null \ - -w "%{http_code}" \ - --request DELETE \ - "https://api.github.com/repos/${repo_org}/${repo_name}/labels/${name_encoded}" \ + local status=$( + curl -s \ + -u "${GITHUB_TOKEN}":x-oauth-basic \ + -H "Accept: application/vnd.github.symmetra-preview+json" \ + -o /dev/null \ + -w "%{http_code}" \ + --request DELETE \ + "https://api.github.com/repos/${repo_org}/${repo_name}/labels/${name_encoded}" ) [ "${status}" = "204" ] } -jsonval(){ +jsonval() { local json="${1}" local prop="${2}" - temp=$(echo "${json}" \ - | sed 's/\\\\\//\//g' \ - | sed 's/[{}]//g' \ - | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' \ - | sed 's/\"\:\"/\|/g' \ - | sed 's/[\,]/ /g' \ - | grep -w "${prop}" \ - | cut -d":" -f2 \ - | sed -e 's/^ *//g' -e 's/ *$//g' \ + temp=$( + echo "${json}" | + sed 's/\\\\\//\//g' | + sed 's/[{}]//g' | + awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | + sed 's/\"\:\"/\|/g' | + sed 's/[\,]/ /g' | + grep -w "${prop}" | + cut -d":" -f2 | + sed -e 's/^ *//g' -e 's/ *$//g' ) temp="${temp//${prop}|/}" - temp="$(echo "${temp}"|tr '\r\n' ' ')" + temp="$(echo "${temp}" | tr '\r\n' ' ')" echo "${temp}" } -uriencode(){ +uriencode() { s="${1//'%'/%25}" s="${s//' '/%20}" s="${s//'"'/%22}" @@ -286,15 +299,15 @@ uriencode(){ s="${s//'@'/%40}" s="${s//'['/%5B}" s="${s//']'/%5D}" - printf %s "$s" + printf %s "${s}" } -timeout(){ +timeout() { local seconds=${1} while [ "${seconds}" -gt 0 ]; do - echo -ne "Processing will start in $seconds seconds. Press Ctrl+C to abort\033[0K\r" - sleep 1 - : $((seconds--)) + echo -ne "Processing will start in ${seconds} seconds. Press Ctrl+C to abort\033[0K\r" + sleep 1 + : $((seconds--)) done echo } diff --git a/scripts/drevops/info.sh b/scripts/drevops/info.sh index 1e94e8f79..270d43874 100755 --- a/scripts/drevops/info.sh +++ b/scripts/drevops/info.sh @@ -2,36 +2,55 @@ ## # Print project information. # +# shellcheck disable=SC1090,SC1091 -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -# Path to the application. -DREVOPS_APP="${DREVOPS_APP:-/app}" +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Name of the webroot directory with Drupal codebase. +DREVOPS_WEBROOT="${DREVOPS_WEBROOT:-web}" # Show Drupal one-time login link. DREVOPS_DRUPAL_SHOW_LOGIN_LINK="${DREVOPS_DRUPAL_SHOW_LOGIN_LINK:-}" # ------------------------------------------------------------------------------ +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +[ -n "${DREVOPS_HOST_HAS_SEQUELACE:-}" ] && sequelace="('ahoy db' to start SequelAce)" || sequelace="" + +info "Project information" + echo -echo "Project name : ${DREVOPS_PROJECT}" -echo "Docker Compose project name : ${COMPOSE_PROJECT_NAME:-}" -echo "Site local URL : http://${DREVOPS_LOCALDEV_URL}" -echo "Path to project : ${DREVOPS_APP}" -echo "Path to docroot : ${DREVOPS_APP}/docroot" -echo "DB host : ${DREVOPS_MARIADB_HOST}" -echo "DB username : ${DREVOPS_MARIADB_USER}" -echo "DB password : ${DREVOPS_MARIADB_PASSWORD}" -echo "DB port : ${DREVOPS_MARIADB_PORT}" -echo "DB port on host : ${DREVOPS_HOST_DB_PORT} ('ahoy db' to start SequelAce)" -if [ -n "${DREVOPS_HOST_SOLR_PORT}" ]; then - echo "Solr port on host : ${DREVOPS_HOST_SOLR_PORT}" +note "Project name : ${DREVOPS_PROJECT}" +note "Docker Compose project name : ${COMPOSE_PROJECT_NAME:-}" +note "Site local URL : http://${DREVOPS_LOCALDEV_URL}" +note "Path to web root : $(pwd)/${DREVOPS_WEBROOT}" +note "DB host : ${MARIADB_HOST}" +note "DB username : ${MARIADB_USERNAME}" +note "DB password : ${MARIADB_PASSWORD}" +note "DB port : ${MARIADB_PORT}" +note "DB port on host : ${DREVOPS_HOST_DB_PORT} ${sequelace}" +if [ -n "${DREVOPS_DB_DOCKER_IMAGE:-}" ]; then + note "DB-in-docker image : ${DREVOPS_DB_DOCKER_IMAGE}" +fi +if [ -n "${DREVOPS_HOST_SOLR_PORT:-}" ]; then + note "Solr URL on host : http://127.0.0.1:${DREVOPS_HOST_SOLR_PORT}" fi -echo "Mailhog URL : http://mailhog.docker.amazee.io/" -echo "Xdebug : $(php -v | grep -q Xdebug && echo "Enabled ('ahoy up cli' to disable)" || echo "Disabled ('ahoy debug' to enable)")" -if [ "${DREVOPS_DRUPAL_SHOW_LOGIN_LINK}" = "1" ] || [ -n "${1}" ]; then - echo -n "Site login link : " - ./scripts/drevops/drupal-login.sh +note "Mailhog URL : http://mailhog.docker.amazee.io/" +note "Xdebug : $(php -v | grep -q Xdebug && echo "Enabled ('ahoy up cli' to disable)" || echo "Disabled ('ahoy debug' to enable)")" +if [ "${DREVOPS_DRUPAL_SHOW_LOGIN_LINK}" = "1" ] || [ -n "${1:-}" ]; then + echo -n " Site login link : " + ./scripts/drevops/login.sh +else + echo + note "Use 'ahoy login' to generate Drupal login link." fi echo diff --git a/scripts/drevops/lint.sh b/scripts/drevops/lint.sh deleted file mode 100755 index 4577b16d4..000000000 --- a/scripts/drevops/lint.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env bash -# shellcheck disable=SC2086 -# shellcheck disable=SC2015 -## -# Lint code. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Flag to allow BE lint to fail. -DREVOPS_LINT_BE_ALLOW_FAILURE="${DREVOPS_LINT_BE_ALLOW_FAILURE:-0}" - -# Flag to allow FE lint to fail. -DREVOPS_LINT_FE_ALLOW_FAILURE="${DREVOPS_LINT_FE_ALLOW_FAILURE:-0}" - -# Comma-separated list of PHPCS targets (no spaces). -DREVOPS_LINT_PHPCS_TARGETS="${DREVOPS_LINT_PHPCS_TARGETS:-}" - -# PHP Parallel Lint targets as a comma-separated list of extensions with no -# preceding dot or space. -DREVOPS_LINT_PHPLINT_TARGETS="${DREVOPS_LINT_PHPLINT_TARGETS:-}" - -# PHP Parallel Lint extensions as a comma-separated list of extensions with -# no preceding dot or space. -DREVOPS_LINT_PHPLINT_EXTENSIONS="${DREVOPS_LINT_PHPLINT_EXTENSIONS:-php,inc,module,theme,install}" - -# Drupal theme name. -DREVOPS_DRUPAL_THEME="${DREVOPS_DRUPAL_THEME:-}" - -# ------------------------------------------------------------------------------ - -# Provide argument as 'be' or 'fe' to lint only back-end or front-end code. -# If no argument is provided, all code will be linted. -DREVOPS_LINT_TYPE="${1:-be-fe}" - -if [ -z "${DREVOPS_LINT_TYPE##*be*}" ]; then - # Lint code for coding standards. - vendor/bin/phpcs ${DREVOPS_LINT_PHPCS_TARGETS//,/ } && \ - # Lint code for mess. - vendor/bin/phpmd --exclude node_modules/*,vendor/* ${DREVOPS_LINT_PHPMD_TARGETS//, /,} "${DREVOPS_LINT_PHPMD_FORMAT:-text}" ${DREVOPS_LINT_PHPMD_RULESETS// /} || \ - # Flag to allow lint to fail. - [ "${DREVOPS_LINT_BE_ALLOW_FAILURE}" -eq 1 ] -fi - -# Lint code using front-end linter. -if [ -z "${DREVOPS_LINT_TYPE##*fe*}" ] && [ -n "${DREVOPS_DRUPAL_THEME}" ]; then - # Lint library. - if grep -q lint "docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}/civictheme_library/package.json" && [ -d "docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}/civictheme_library/node_modules" ]; then - npm run --prefix "docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}/civictheme_library" lint || \ - # Flag to allow lint to fail. - [ "${DREVOPS_LINT_FE_ALLOW_FAILURE}" -eq 1 ] - fi - - # Lint base theme. - if grep -q lint "docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}/package.json" && [ -d "docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}/node_modules" ]; then - npm run --prefix "docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}" lint || \ - # Flag to allow lint to fail. - [ "${DREVOPS_LINT_FE_ALLOW_FAILURE}" -eq 1 ] - fi -fi - -# Lint theme configuration. -if [ -z "${DREVOPS_LINT_TYPE##*config*}" ]; then - # Lint theme configuration. - ./scripts/lint-theme-config.sh || [ "${DREVOPS_LINT_CONFIG_ALLOW_FAILURE:-0}" -eq 1 ] - - # Lint theme schema. - ./vendor/bin/drush inspect_config civictheme.settings --detail --only-error -fi diff --git a/scripts/drevops/login-docker.sh b/scripts/drevops/login-docker.sh new file mode 100755 index 000000000..b087f3a31 --- /dev/null +++ b/scripts/drevops/login-docker.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +## +# Login to the Docker container registry. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# The username of the docker registry. +DOCKER_USER="${DOCKER_USER:-}" + +# The token of the docker registry. +DOCKER_PASS="${DOCKER_PASS:-}" + +# Docker registry name. +# +# Provide port, if required as `:`. +DOCKER_REGISTRY="${DOCKER_REGISTRY:-docker.io}" + +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +# Check all required values. +[ -z "${DOCKER_REGISTRY}" ] && echo "Missing required value for DOCKER_REGISTRY." && exit 1 + +if [ -f "${HOME}/.docker/config.json" ] && grep -q "${DOCKER_REGISTRY}" "${HOME}/.docker/config.json"; then + note "Already logged in to registry \"${DOCKER_REGISTRY}\"." +elif [ -n "${DOCKER_USER}" ] && [ -n "${DOCKER_PASS}" ]; then + note "Logging in to registry \"${DOCKER_REGISTRY}\"." + echo "${DOCKER_PASS}" | docker login --username "${DOCKER_USER}" --password-stdin "${DOCKER_REGISTRY}" +else + note "Skipping login into Docker registry as either DOCKER_USER or DOCKER_PASS was not provided." +fi diff --git a/scripts/drevops/login.sh b/scripts/drevops/login.sh new file mode 100755 index 000000000..ca9061239 --- /dev/null +++ b/scripts/drevops/login.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +## +# Login to a Drupal site as an admin user. +# +# shellcheck disable=SC1090,SC1091,SC2086,SC2032,SC2033,SC2016 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Flag to block or unblock admin. +DRUPAL_UNBLOCK_ADMIN="${DRUPAL_UNBLOCK_ADMIN:-1}" + +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +drush() { ./vendor/bin/drush -y "$@"; } + +if [ "${DRUPAL_UNBLOCK_ADMIN:-}" = "1" ]; then + if drush pm:list --status=enabled | grep -q password_policy; then + drush sql:query 'UPDATE `user__field_password_expiration` SET `field_password_expiration_value` = 0 WHERE `bundle` = "user" AND `entity_id` = 1;' + fi + drush sql:query "SELECT name FROM \`users_field_data\` WHERE \`uid\` = '1';" | head -n 1 | xargs drush -- user:unblock +fi + +drush user:login diff --git a/scripts/drevops/logout.sh b/scripts/drevops/logout.sh new file mode 100755 index 000000000..86b40b1f5 --- /dev/null +++ b/scripts/drevops/logout.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +## +# Log out an admin from a Drupal site. +# +# shellcheck disable=SC1090,SC1091,SC2086,SC2032,SC2033 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Flag to block or unblock admin. +DRUPAL_UNBLOCK_ADMIN="${DRUPAL_UNBLOCK_ADMIN:-1}" + +# ------------------------------------------------------------------------------ + +drush() { ./vendor/bin/drush -y "$@"; } + +if [ "${DRUPAL_UNBLOCK_ADMIN:-}" = "1" ]; then + drush sql:query "SELECT name FROM \`users_field_data\` WHERE \`uid\` = '1';" | head -n 1 | xargs drush -- user:block +fi diff --git a/scripts/drevops/mirror-code.sh b/scripts/drevops/mirror-code.sh new file mode 100755 index 000000000..d9a628943 --- /dev/null +++ b/scripts/drevops/mirror-code.sh @@ -0,0 +1,103 @@ +#!/usr/bin/env bash +## +# Mirror code to another git branch by force-pushing. +# +# Currently, supports only mirroring withing the same repository. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Source branch name to mirror code. +DREVOPS_MIRROR_CODE_BRANCH_SRC="${DREVOPS_MIRROR_CODE_BRANCH_SRC:-${1}}" + +# Destination branch name to mirror code. +DREVOPS_MIRROR_CODE_BRANCH_DST="${DREVOPS_MIRROR_CODE_BRANCH_DST:-${2}}" + +# Destination remote name. +DREVOPS_MIRROR_CODE_REMOTE_DST="${DREVOPS_MIRROR_CODE_REMOTE_DST:-origin}" + +# Flag to push the branch. +DREVOPS_MIRROR_CODE_PUSH="${DREVOPS_MIRROR_CODE_PUSH:-}" + +# Optional SSH key fingerprint to use for mirroring. +DREVOPS_MIRROR_CODE_SSH_FINGERPRINT="${DREVOPS_MIRROR_CODE_SSH_FINGERPRINT:-}" + +# Email address of the user who will be committing to a remote repository. +DREVOPS_MIRROR_CODE_GIT_USER_NAME="${DREVOPS_MIRROR_CODE_GIT_USER_NAME:-"Deployment Robot"}" + +# Name of the user who will be committing to a remote repository. +DREVOPS_MIRROR_CODE_GIT_USER_EMAIL="${DREVOPS_MIRROR_CODE_GIT_USER_EMAIL:-}" + +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started code mirroring." + +# Check all required values. +[ -z "${DREVOPS_MIRROR_CODE_BRANCH_SRC}" ] && fail "Missing required value for DREVOPS_MIRROR_CODE_BRANCH_SRC." && exit 1 +[ -z "${DREVOPS_MIRROR_CODE_BRANCH_DST}" ] && fail "Missing required value for DREVOPS_MIRROR_CODE_BRANCH_SRC_REMOTE." && exit 1 +[ -z "${DREVOPS_MIRROR_CODE_REMOTE_DST}" ] && fail "Missing required value for DREVOPS_MIRROR_CODE_REMOTE_DST." && exit 1 +[ -z "${DREVOPS_MIRROR_CODE_GIT_USER_NAME}" ] && fail "Missing required value for DREVOPS_MIRROR_CODE_USER_NAME." && exit 1 +[ -z "${DREVOPS_MIRROR_CODE_GIT_USER_EMAIL}" ] && fail "Missing required value for DREVOPS_MIRROR_CODE_GIT_USER_EMAIL." && exit 1 + +# Configure global git settings, if they do not exist. +[ "$(git config --global user.name)" == "" ] && note "Configuring global git user name." && git config --global user.name "${DREVOPS_MIRROR_CODE_GIT_USER_NAME}" +[ "$(git config --global user.email)" == "" ] && note "Configuring global git user email." && git config --global user.email "${DREVOPS_MIRROR_CODE_GIT_USER_EMAIL}" + +# Use custom deploy key if fingerprint is provided. +if [ -n "${DREVOPS_MIRROR_CODE_SSH_FINGERPRINT:-}" ]; then + note "Custom deployment key is provided." + DREVOPS_MIRROR_CODE_SSH_FILE="${DREVOPS_MIRROR_CODE_SSH_FINGERPRINT//:/}" + DREVOPS_MIRROR_CODE_SSH_FILE="${HOME}/.ssh/id_rsa_${DREVOPS_MIRROR_CODE_SSH_FILE//\"/}" +fi + +[ ! -f "${DREVOPS_MIRROR_CODE_SSH_FILE:-}" ] && fail "SSH key file ${DREVOPS_MIRROR_CODE_SSH_FILE} does not exist." && exit 1 + +if ssh-add -l | grep -q "${DREVOPS_MIRROR_CODE_SSH_FILE}"; then + note "SSH agent has ${DREVOPS_MIRROR_CODE_SSH_FILE} key loaded." +else + note "SSH agent does not have default key loaded. Trying to load." + # Remove all other keys and add SSH key from provided fingerprint into SSH agent. + ssh-add -D >/dev/null + ssh-add "${DREVOPS_MIRROR_CODE_SSH_FILE}" +fi + +# Create a temp directory to copy source repository into to prevent changes to source. +SRC_TMPDIR=$(mktemp -d) + +note "Copying files from the source repository to ${SRC_TMPDIR}." +rsync -a --keep-dirlinks ./. "${SRC_TMPDIR}" +# @docs:skip +[ -n "${DREVOPS_DEBUG}" ] && tree -L 4 "${SRC_TMPDIR}" + +# Move to the temp source repo directory. +pushd "${SRC_TMPDIR}" >/dev/null || exit 1 + +# Reset any changes that may have been introduced during the CI run. +git reset --hard + +# Checkout the branch, but only if the current branch is not the same. +current_branch="$(git rev-parse --abbrev-ref HEAD)" +if [ "${DREVOPS_MIRROR_CODE_BRANCH_SRC:-}" != "${current_branch}" ]; then + git checkout -b "${DREVOPS_MIRROR_CODE_BRANCH_SRC}" "${DREVOPS_MIRROR_CODE_REMOTE_DST}/${DREVOPS_MIRROR_CODE_BRANCH_SRC}" +fi + +if [ "${DREVOPS_MIRROR_CODE_PUSH:-}" = "1" ]; then + git push "${DREVOPS_MIRROR_CODE_REMOTE_DST}" "${DREVOPS_MIRROR_CODE_BRANCH_SRC}:${DREVOPS_MIRROR_CODE_BRANCH_DST}" --force +else + note "Would push to ${DREVOPS_MIRROR_CODE_BRANCH_SRC}" +fi + +popd >/dev/null || exit 1 + +pass "Finished code mirroring." diff --git a/scripts/drevops/notify-deployment-email.php b/scripts/drevops/notify-deployment-email.php deleted file mode 100755 index d0b069837..000000000 --- a/scripts/drevops/notify-deployment-email.php +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env php -' : $email; - mail($to, $subject, $content, 'From: ' . $from_email); - $sent[] = $email; - } -} - -if (count($sent) > 0) { - print 'Notification email(s) sent to: ' . implode(', ', $sent) . "\n"; -} -else { - print 'No notification emails were sent.' . "\n"; -} diff --git a/scripts/drevops/notify-deployment-github.sh b/scripts/drevops/notify-deployment-github.sh deleted file mode 100755 index a08493c83..000000000 --- a/scripts/drevops/notify-deployment-github.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env bash -## -# GitHub deployment notification. -# -# Note: the deployment can be scheduled only if all checks are passed. This -# means that the deployment notification will fail if the CI has not finished -# running and reporting checks as success. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Deployment GitHub token. -DREVOPS_NOTIFY_GITHUB_TOKEN="${DREVOPS_NOTIFY_GITHUB_TOKEN:-${GITHUB_TOKEN}}" - -# Deployment repository. -DREVOPS_NOTIFY_DEPLOY_REPOSITORY="${DREVOPS_NOTIFY_DEPLOY_REPOSITORY:-}" - -# Deployment reference, such as a git SHA. -DREVOPS_NOTIFY_DEPLOY_REF="${DREVOPS_NOTIFY_DEPLOY_REF:-}" - -# Operation type: start or finish. -DREVOPS_NOTIFY_DEPLOY_GITHUB_OPERATION="${DREVOPS_NOTIFY_DEPLOY_GITHUB_OPERATION:-}" - -# Deployment environment URL. -DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL="${DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL:-}" - -# Deployment environment type: production, uat, dev, pr. -DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_TYPE="${DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_TYPE:-PR}" - -# Flag to skip deployment notification. -DREVOPS_NOTIFY_DEPLOYMENT_SKIP="${DREVOPS_NOTIFY_DEPLOYMENT_SKIP:-}" - -# Flag to skip GitHub deployment notification. -DREVOPS_NOTIFY_DEPLOY_GITHUB_SKIP="${DREVOPS_NOTIFY_DEPLOY_GITHUB_SKIP:-}" - -# ------------------------------------------------------------------------------ - -{ [ "${DREVOPS_NOTIFY_DEPLOYMENT_SKIP}" = "1" ] || [ "${DREVOPS_NOTIFY_DEPLOY_GITHUB_SKIP}" = "1" ]; } && echo "Skipping GitHub notification of deployment." && exit 0 - -[ -z "${DREVOPS_NOTIFY_GITHUB_TOKEN}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_GITHUB_TOKEN" && exit 1 -[ -z "${DREVOPS_NOTIFY_DEPLOY_REPOSITORY}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_DEPLOY_REPOSITORY" && exit 1 -[ -z "${DREVOPS_NOTIFY_DEPLOY_REF}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_DEPLOY_REF" && exit 1 -[ -z "${DREVOPS_NOTIFY_DEPLOY_GITHUB_OPERATION}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_DEPLOY_GITHUB_OPERATION" && exit 1 -[ -z "${DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_TYPE}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_TYPE" && exit 1 - -echo "==> Started GitHub deployment notification for operation ${DREVOPS_NOTIFY_DEPLOY_GITHUB_OPERATION}" - -# -# Function to extract last value from JSON object passed via STDIN. -# -extract_json_first_value() { - local key=$1 - php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$first=reset(\$data); isset(\$first[\"${key}\"]) ? print trim(json_encode(\$first[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" -} - -# -# Function to extract keyed value from JSON object passed via STDIN. -# -extract_json_value() { - local key=$1 - php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" -} - -if [ "${DREVOPS_NOTIFY_DEPLOY_GITHUB_OPERATION}" = "start" ]; then - payload="$(curl \ - -X POST \ - -H "Authorization: token ${DREVOPS_NOTIFY_GITHUB_TOKEN}" \ - -H "Accept: application/vnd.github.v3+json" \ - -s \ - "https://api.github.com/repos/${DREVOPS_NOTIFY_DEPLOY_REPOSITORY}/deployments" \ - -d "{\"ref\":\"${DREVOPS_NOTIFY_DEPLOY_REF}\", \"environment\": \"${DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_TYPE}\", \"auto_merge\": false}")" - - deployment_id="$(echo "${payload}" | extract_json_value "id")" - - # Check deployment ID. - { [ "${#deployment_id}" != "9" ] || [ "$(expr "x$deployment_id" : "x[0-9]*$")" -eq 0 ]; } && echo "ERROR: Failed to get a deployment ID." && exit 1 - - echo " > Marked deployment as started" -else - [ -z "${DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL" && exit 1 - - # Returns all deployment for this SHA sorted from the latest to the oldest. - payload="$(curl \ - -X GET \ - -H "Authorization: token ${DREVOPS_NOTIFY_GITHUB_TOKEN}" \ - -H "Accept: application/vnd.github.v3+json" \ - -s \ - "https://api.github.com/repos/${DREVOPS_NOTIFY_DEPLOY_REPOSITORY}/deployments?ref=${DREVOPS_NOTIFY_DEPLOY_REF}")" - - deployment_id="$(echo "${payload}" | extract_json_first_value "id")" - - # Check deployment ID. - { [ "${#deployment_id}" != "9" ] || [ "$(expr "x$deployment_id" : "x[0-9]*$")" -eq 0 ]; } && echo "ERROR: Failed to get a deployment ID." && exit 1 - - # Post status update. - payload="$(curl \ - -X POST \ - -H "Accept: application/vnd.github.v3+json" \ - -H "Authorization: token ${DREVOPS_NOTIFY_GITHUB_TOKEN}" \ - "https://api.github.com/repos/${DREVOPS_NOTIFY_DEPLOY_REPOSITORY}/deployments/${deployment_id}/statuses" \ - -s \ - -d "{\"state\":\"success\", \"environment_url\": \"${DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL}\"}")" - - status="$(echo "${payload}" | extract_json_value "state")" - - [ "${status}" != "success" ] && echo "ERROR: Unable to set deployment status" && exit 1 - - echo " > Marked deployment as finished" -fi - -echo "==> Finished GitHub deployment notification" diff --git a/scripts/drevops/notify-deployment-jira.sh b/scripts/drevops/notify-deployment-jira.sh deleted file mode 100755 index 89dd79303..000000000 --- a/scripts/drevops/notify-deployment-jira.sh +++ /dev/null @@ -1,181 +0,0 @@ -#!/usr/bin/env bash -## -# JIRA deployment notification. -# -# - posts comment with a URL of a deployment environment -# - moves an issues to a state -# - assigns an issue to a dedicated user -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# JIRA user. -DREVOPS_NOTIFY_DEPLOY_JIRA_USER="${DREVOPS_NOTIFY_DEPLOY_JIRA_USER:-}" - -# JIRA token. -DREVOPS_NOTIFY_DEPLOY_JIRA_TOKEN="${DREVOPS_NOTIFY_DEPLOY_JIRA_TOKEN:-}" - -# Deployment reference, such as a git SHA. -DREVOPS_NOTIFY_DEPLOY_BRANCH="${DREVOPS_NOTIFY_DEPLOY_BRANCH:-}" - -# Deployment environment URL. -DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL="${DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL:-}" - -# Deployment comment prefix. -DREVOPS_NOTIFY_DEPLOY_JIRA_COMMENT_PREFIX="${DREVOPS_NOTIFY_DEPLOY_JIRA_COMMENT_PREFIX:-"Deployed to "}" - -# State to move the ticket to. -DREVOPS_NOTIFY_DEPLOY_JIRA_TRANSITION="${DREVOPS_NOTIFY_DEPLOY_JIRA_TRANSITION:-}" - -# Assign the ticket to this account. -DREVOPS_NOTIFY_DEPLOY_JIRA_ASSIGNEE="${DREVOPS_NOTIFY_DEPLOY_JIRA_ASSIGNEE:-}" - -# JIRA API endpoint. -DREVOPS_NOTIFY_JIRA_ENDPOINT="${DREVOPS_NOTIFY_JIRA_ENDPOINT:-https://jira.atlassian.com}" - -# Flag to skip notification. -DREVOPS_NOTIFY_DEPLOYMENT_SKIP="${DREVOPS_NOTIFY_DEPLOYMENT_SKIP:-}" - -# Flag to skip NewRelic deployment notification. -DREVOPS_NOTIFY_DEPLOY_JIRA_SKIP="${DREVOPS_NOTIFY_DEPLOY_JIRA_SKIP:-}" - -# ------------------------------------------------------------------------------ - -{ [ "${DREVOPS_NOTIFY_DEPLOYMENT_SKIP}" = "1" ] || [ "${DREVOPS_NOTIFY_DEPLOY_JIRA_SKIP}" = "1" ]; } && echo "Skipping JIRA notification of deployment." && exit 0 - -[ -z "${DREVOPS_NOTIFY_DEPLOY_JIRA_USER}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_DEPLOY_JIRA_USER" && exit 1 -[ -z "${DREVOPS_NOTIFY_DEPLOY_JIRA_TOKEN}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_DEPLOY_JIRA_TOKEN" && exit 1 -[ -z "${DREVOPS_NOTIFY_DEPLOY_BRANCH}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_DEPLOY_BRANCH" && exit 1 - -echo "==> Started JIRA deployment notification" - -# -# Function to extract last value from JSON object passed via STDIN. -# -extract_json_first_value() { - local key=$1 - php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$first=reset(\$data); isset(\$first[\"${key}\"]) ? print trim(json_encode(\$first[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" -} - -# -# Function to extract keyed value from JSON object passed via STDIN. -# -extract_json_value() { - local key=$1 - php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" -} - -# -# Function to extract keyed value from JSON object passed via STDIN. -# -extract_json_value_by_value() { - local key=$1 - local value=$2 - local return_key=$3 - - php -r "\$key=\"${key}\"; \$value=\"${value}\"; \$return_key=\"${return_key}\";\$data = json_decode(file_get_contents('php://stdin'), TRUE);\$result = array_filter(\$data, function (\$object) use (\$key, \$value, \$return_key) {return !empty(\$object[\$key]) && \$object[\$key] == \$value;});\$result=reset(\$result);print trim(json_encode((\$result[\$return_key] ?? ''), JSON_UNESCAPED_SLASHES), '\"');" -} - -# -# Extract issue ID from the branch. -# -extract_issue() { - echo "$1"|sed -nE "s/([^\/]+\/)?([A-Za-z0-9]+\-[0-9]+).*/\2/p" -} - -echo " > Extracting issue" -issue="$(extract_issue "${DREVOPS_NOTIFY_DEPLOY_BRANCH}")" -[ "${issue}" = "" ] && echo "ERROR: Branch ${DREVOPS_NOTIFY_DEPLOY_BRANCH} does not contain issue number." && exit 1 -echo " Found issue ${issue}" - -echo " > Creating API token" -base64_opts=() && [ "$(uname)" != "Darwin" ] && base64_opts=(-w 0) -token="$(echo -n "${DREVOPS_NOTIFY_DEPLOY_JIRA_USER}:${DREVOPS_NOTIFY_DEPLOY_JIRA_TOKEN}" | base64 "${base64_opts[@]}")" - -echo -n " > Checking API access..." -payload="$(curl \ - -s \ - -X GET \ - -H "Authorization: Basic ${token}" \ - -H "Content-Type: application/json" \ - "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/myself")" - -account_id="$(echo "${payload}" | extract_json_value "accountId" || echo "error")" - -{ [ "${#account_id}" != "24" ] || [ "$(expr "x$account_id" : "x[0-9a-f]*$")" -eq 0 ]; } \ -&& { [ "${#account_id}" != "43" ] || [ "$(expr "x$account_id" : "x[0-9]*:[0-9a-f\-]*$")" -eq 0 ]; } \ -&& echo "ERROR: Failed to authenticate" && echo "${payload}" && exit 1 -echo "success" - -if [ -n "${DREVOPS_NOTIFY_DEPLOY_JIRA_COMMENT_PREFIX}" ]; then - echo " > Posting a comment" - - [ -z "${DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL" && exit 1 - - comment="[{\"type\": \"text\",\"text\": \"${DREVOPS_NOTIFY_DEPLOY_JIRA_COMMENT_PREFIX}\"},{\"type\": \"inlineCard\",\"attrs\": {\"url\": \"${DREVOPS_NOTIFY_DEPLOY_ENVIRONMENT_URL}\"}}]" - payload="$(curl \ - -s \ - -X POST \ - -H "Authorization: Basic ${token}" \ - -H "Content-Type: application/json" \ - --url "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/issue/${issue}/comment" \ - --data "{\"body\": {\"type\": \"doc\", \"version\": 1, \"content\": [{\"type\": \"paragraph\", \"content\": ${comment}}]}}")" - - comment_id="$(echo "${payload}" | extract_json_value "id" || echo "error")" - [ "$(expr "x$comment_id" : "x[0-9]*$")" -eq 0 ] && echo "ERROR: Failed to create a comment" && exit 1 - - echo " Successfully posted comment ${comment_id}" -fi - -if [ -n "${DREVOPS_NOTIFY_DEPLOY_JIRA_TRANSITION}" ]; then - echo " > Changing issue status to ${DREVOPS_NOTIFY_DEPLOY_JIRA_TRANSITION}" - - echo -n " > Discovering transition ID for ${DREVOPS_NOTIFY_DEPLOY_JIRA_TRANSITION}..." - payload="$(curl \ - -s \ - -X GET \ - -H "Authorization: Basic ${token}" \ - -H "Content-Type: application/json" \ - --url "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/issue/${issue}/transitions")" - - transition_id="$(echo "${payload}" | extract_json_value "transitions" | extract_json_value_by_value "name" "${DREVOPS_NOTIFY_DEPLOY_JIRA_TRANSITION}" "id" || echo "error")" - { [ "${transition_id}" = "" ] || [ "$(expr "x$transition_id" : "x[0-9]*$")" -eq 0 ]; } && echo "ERROR: Failed to retrieve transition ID" && exit 1 - echo -n "success" - - payload="$(curl \ - -s \ - -X POST \ - -H "Authorization: Basic ${token}" \ - -H "Content-Type: application/json" \ - --url "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/issue/${issue}/transitions" \ - --data "{ \"transition\": {\"id\": \"${transition_id}\"}}")" -fi - -if [ -n "${DREVOPS_NOTIFY_DEPLOY_JIRA_ASSIGNEE}" ]; then - echo " > Assigning an issue to ${DREVOPS_NOTIFY_DEPLOY_JIRA_ASSIGNEE}" - - echo -n " > Discovering user ID for ${DREVOPS_NOTIFY_DEPLOY_JIRA_ASSIGNEE}..." - payload="$(curl \ - -s \ - -X GET \ - -H "Authorization: Basic ${token}" \ - -H "Content-Type: application/json" \ - --url "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/user/assignable/search?query=${DREVOPS_NOTIFY_DEPLOY_JIRA_ASSIGNEE}&issueKey=${issue}")" - - account_id="$(echo "${payload}" | extract_json_first_value "accountId" || echo "error")" - { [ "${#account_id}" != "24" ] || [ "$(expr "x$account_id" : "x[0-9a-f]*$")" -eq 0 ]; } \ - && { [ "${#account_id}" != "43" ] || [ "$(expr "x$account_id" : "x[0-9]*:[0-9a-f\-]*$")" -eq 0 ]; } \ - && echo "ERROR: Failed to retrieve assignee account ID" && echo "${payload}" && exit 1 - echo -n "success" - - payload="$(curl \ - -s \ - -X PUT \ - -H "Authorization: Basic ${token}" \ - -H "Content-Type: application/json" \ - --url "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/issue/${issue}/assignee" \ - --data "{ \"accountId\": \"${account_id}\"}")" -fi - -echo "==> Finished JIRA deployment notification" diff --git a/scripts/drevops/notify-deployment-newrelic.sh b/scripts/drevops/notify-deployment-newrelic.sh deleted file mode 100755 index da8b56eed..000000000 --- a/scripts/drevops/notify-deployment-newrelic.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env bash -## -# New Relic deployment notification. -# - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# The API key. Usually of type 'USER'. -DREVOPS_NOTIFY_NEWRELIC_APIKEY="${DREVOPS_NOTIFY_NEWRELIC_APIKEY:-}" - -# Deployment reference, such as a git SHA. -DREVOPS_NOTIFY_DEPLOY_REF="${DREVOPS_NOTIFY_DEPLOY_REF:-}" - -# Application name as it appears in the dashboard. -DREVOPS_NOTIFY_NEWRELIC_APP_NAME="${DREVOPS_NOTIFY_NEWRELIC_APP_NAME:-}" - -# Optional Application ID. Will be discovered automatically from application name if not provided. -DREVOPS_NOTIFY_NEWRELIC_APPID="${DREVOPS_NOTIFY_NEWRELIC_APPID:-}" - -# Optional deployment description. -DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION="${DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION:-"${DREVOPS_NOTIFY_DEPLOY_REF} deployed"}" - -# Optional deployment changelog. Defaults to description. -DREVOPS_NOTIFY_NEWRELIC_CHANGELOG="${DREVOPS_NOTIFY_NEWRELIC_CHANGELOG:-${DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION}}" - -# Optional user name performing the deployment. -DREVOPS_NOTIFY_NEWRELIC_USER="${DREVOPS_NOTIFY_NEWRELIC_USER:-"Deployment robot"}" - -# Optional endpoint. -DREVOPS_NOTIFY_NEWRELIC_ENDPOINT="${DREVOPS_NOTIFY_NEWRELIC_ENDPOINT:-https://api.newrelic.com/v2}" - -# Flag to skip notification. -DREVOPS_NOTIFY_DEPLOYMENT_SKIP="${DREVOPS_NOTIFY_DEPLOYMENT_SKIP:-}" - -# Flag to skip NewRelic deployment notification. -DREVOPS_NOTIFY_DEPLOY_NEWRELIC_SKIP="${DREVOPS_NOTIFY_DEPLOY_NEWRELIC_SKIP:-}" - -# ------------------------------------------------------------------------------ - -{ [ "${DREVOPS_NOTIFY_DEPLOYMENT_SKIP}" = "1" ] || [ "${DREVOPS_NOTIFY_DEPLOY_NEWRELIC_SKIP}" = "1" ]; } && echo "Skipping NewRelic notification of deployment." && exit 0 - -[ -z "${DREVOPS_NOTIFY_NEWRELIC_APIKEY}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_NEWRELIC_APIKEY" && exit 1 -[ -z "${DREVOPS_NOTIFY_DEPLOY_REF}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_DEPLOY_REF" && exit 1 -[ -z "${DREVOPS_NOTIFY_NEWRELIC_APP_NAME}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_NEWRELIC_APP_NAME" && exit 1 -[ -z "${DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION" && exit 1 -[ -z "${DREVOPS_NOTIFY_NEWRELIC_CHANGELOG}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_NEWRELIC_CHANGELOG" && exit 1 -[ -z "${DREVOPS_NOTIFY_NEWRELIC_USER}" ] && echo "ERROR: Missing required value for DREVOPS_NOTIFY_NEWRELIC_USER" && exit 1 - -echo "==> Started New Relic notification" - -# Discover APP id by name if it was not provided. -if [ -z "${DREVOPS_NOTIFY_NEWRELIC_APPID}" ] && [ -n "${DREVOPS_NOTIFY_NEWRELIC_APP_NAME}" ]; then - DREVOPS_NOTIFY_NEWRELIC_APPID="$(curl -s -X GET "${DREVOPS_NOTIFY_NEWRELIC_ENDPOINT}/applications.json" \ - -H "Api-Key:${DREVOPS_NOTIFY_NEWRELIC_APIKEY}" \ - -s -G -d "filter[name]=${DREVOPS_NOTIFY_NEWRELIC_APP_NAME}&exclude_links=true" | - cut -c 24- | - cut -c -10)" -fi - -{ [ "${#DREVOPS_NOTIFY_NEWRELIC_APPID}" != "10" ] || [ "$(expr "x$DREVOPS_NOTIFY_NEWRELIC_APPID" : "x[0-9]*$")" -eq 0 ]; } && echo "ERROR: Failed to get an application ID from the application name ${DREVOPS_NOTIFY_NEWRELIC_APP_NAME}." && exit 1 - -if ! curl -X POST "${DREVOPS_NOTIFY_NEWRELIC_ENDPOINT}/applications/${DREVOPS_NOTIFY_NEWRELIC_APPID}/deployments.json" \ - -L -s -o /dev/null -w "%{http_code}" \ - -H "Api-Key:${DREVOPS_NOTIFY_NEWRELIC_APIKEY}" \ - -H 'Content-Type: application/json' \ - -d \ - "{ - \"deployment\": { - \"revision\": \"${DREVOPS_NOTIFY_DEPLOY_REF}\", - \"changelog\": \"${DREVOPS_NOTIFY_NEWRELIC_CHANGELOG}\", - \"description\": \"${DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION}\", - \"user\": \"${DREVOPS_NOTIFY_NEWRELIC_USER}\" - } -}" | grep -q '201'; then - error "ERROR: Failed to crate a deployment notification for application ${DREVOPS_NOTIFY_NEWRELIC_APP_NAME} with ID ${DREVOPS_NOTIFY_NEWRELIC_APPID}" - exit 1 -fi - -echo "==> Finished New Relic notification" diff --git a/scripts/drevops/notify-deployment.php b/scripts/drevops/notify-deployment.php deleted file mode 100755 index e76cba8a1..000000000 --- a/scripts/drevops/notify-deployment.php +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env php -' : $email; - mail($to, $subject, $content, 'From: ' . $from_email); - $sent[] = $email; - } -} - -if (count($sent) > 0) { - print 'Notification email(s) sent to: ' . implode(', ', $sent) . "\n"; -} -else { - print 'No notification emails were sent.' . "\n"; -} diff --git a/scripts/drevops/notify-email.sh b/scripts/drevops/notify-email.sh new file mode 100755 index 000000000..96f55ac72 --- /dev/null +++ b/scripts/drevops/notify-email.sh @@ -0,0 +1,124 @@ +#!/usr/bin/env bash +## +# Notification dispatch to email recipients. +# +# Notification dispatch to email recipients. +# +# Usage: +# DREVOPS_NOTIFY_PROJECT="Site Name" \ +# DRUPAL_SITE_EMAIL="from@example.com" \ +# DREVOPS_NOTIFY_EMAIL_RECIPIENTS="to1@example.com|Jane Doe, to2@example.com|John Doe" \ +# DREVOPS_NOTIFY_REF="git-branch" \ +# DREVOPS_NOTIFY_ENVIRONMENT_URL="https://environment-url-example.com" \ +# ./notify-email.sh +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Project name to notify. +DREVOPS_NOTIFY_EMAIL_PROJECT="${DREVOPS_NOTIFY_EMAIL_PROJECT:-${DREVOPS_NOTIFY_PROJECT:-}}" + +# Email address to send notifications from. +DREVOPS_NOTIFY_EMAIL_FROM="${DREVOPS_NOTIFY_EMAIL_FROM:-${DRUPAL_SITE_EMAIL:-}}" + +# Email address(es) to send notifications to. +# +# Multiple names can be specified as a comma-separated list of email addresses +# with optional names in the format "email|name". +# Example: "to1@example.com|Jane Doe, to2@example.com|John Doe" +DREVOPS_NOTIFY_EMAIL_RECIPIENTS="${DREVOPS_NOTIFY_EMAIL_RECIPIENTS:-}" + +# Git reference to notify about. +DREVOPS_NOTIFY_EMAIL_REF="${DREVOPS_NOTIFY_EMAIL_REF:-${DREVOPS_NOTIFY_REF:-}}" + +# Environment URL to notify about. +DREVOPS_NOTIFY_EMAIL_ENVIRONMENT_URL="${DREVOPS_NOTIFY_EMAIL_ENVIRONMENT_URL:-${DREVOPS_NOTIFY_ENVIRONMENT_URL:-}}" + +#------------------------------------------------------------------------------- + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +[ -z "${DREVOPS_NOTIFY_EMAIL_PROJECT}" ] && fail "Missing required value for DREVOPS_NOTIFY_EMAIL_PROJECT." && exit 1 +[ -z "${DREVOPS_NOTIFY_EMAIL_FROM}" ] && fail "Missing required value for DREVOPS_NOTIFY_EMAIL_FROM." && exit 1 +[ -z "${DREVOPS_NOTIFY_EMAIL_RECIPIENTS}" ] && fail "Missing required value for DREVOPS_NOTIFY_EMAIL_RECIPIENTS." && exit 1 +[ -z "${DREVOPS_NOTIFY_EMAIL_REF}" ] && fail "Missing required value for DREVOPS_NOTIFY_EMAIL_REF." && exit 1 +[ -z "${DREVOPS_NOTIFY_EMAIL_ENVIRONMENT_URL}" ] && fail "Missing required value for DREVOPS_NOTIFY_EMAIL_ENVIRONMENT_URL." && exit 1 + +info "Started email notification." + +has_sendmail=0 +has_mail=0 +if command -v sendmail >/dev/null 2>&1; then + note "Using sendmail command to send emails." + has_sendmail=1 +elif command -v mail >/dev/null 2>&1; then + note "Using mail command to send emails." + has_mail=1 +else + fail "Neither mail nor sendmail commands are available." + exit 1 +fi + +timestamp=$(date '+%d/%m/%Y %H:%M:%S %Z') +subject="${DREVOPS_NOTIFY_EMAIL_PROJECT} deployment notification of \"${DREVOPS_NOTIFY_EMAIL_REF}\"" +content="## This is an automated message ## + +Site ${DREVOPS_NOTIFY_EMAIL_PROJECT} \"${DREVOPS_NOTIFY_EMAIL_REF}\" branch has been deployed at ${timestamp} and is available at ${DREVOPS_NOTIFY_EMAIL_ENVIRONMENT_URL}. + +Login at: ${DREVOPS_NOTIFY_EMAIL_ENVIRONMENT_URL}/user/login" + +sent="" +IFS="," +# shellcheck disable=SC2086 +set -- ${DREVOPS_NOTIFY_EMAIL_RECIPIENTS} +for email_with_name; do + old_ifs="${IFS}" + IFS="|" + # shellcheck disable=SC2086 + set -- ${email_with_name} + email="${1#"${1%%[![:space:]]*}"}" + email="${email%"${email##*[![:space:]]}"}" + name="${2#"${2%%[![:space:]]*}"}" + name="${name%"${name##*[![:space:]]}"}" + IFS="${old_ifs}" + + to="${name:+\"${name}\" }<${email}>" + + if [ "${has_sendmail}" = "1" ]; then + ( + echo "To: ${to}" + echo "Subject: ${subject}" + echo "From: ${DREVOPS_NOTIFY_EMAIL_FROM}" + echo + echo "${content}" + ) | sendmail -t + sent="${sent} ${email}" + elif [ "${has_mail}" = "1" ]; then + mail -s "${subject}" "${to}" <<-EOF + From: ${DREVOPS_NOTIFY_EMAIL_FROM} + + ${content} +EOF + sent="${sent} ${email}" + fi +done + +sent="${sent#"${sent%%[![:space:]]*}"}" +sent="${sent%"${sent##*[![:space:]]}"}" + +if [ -n "${sent}" ]; then + note "Notification email(s) sent to: ${sent// /, }" +else + note "No notification emails were sent." +fi + +pass "Finished email notification." diff --git a/scripts/drevops/notify-github.sh b/scripts/drevops/notify-github.sh new file mode 100755 index 000000000..e489451d7 --- /dev/null +++ b/scripts/drevops/notify-github.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash +## +# Notification dispatch to GitHub. +# +# Provides dispatching "deployments" notifications to GitHub. +# @see https://docs.github.com/en/rest/deployments/deployments +# +# GitHub deployments can only be created if all checks pass. Thus, the +# deployment notification dispatch will fail if CI hasn't completed and +# reported successful checks. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Deployment GitHub token. +DREVOPS_NOTIFY_GITHUB_TOKEN="${DREVOPS_NOTIFY_GITHUB_TOKEN:-${GITHUB_TOKEN}}" + +# Deployment repository. +DREVOPS_NOTIFY_REPOSITORY="${DREVOPS_NOTIFY_REPOSITORY:-}" + +# Deployment reference, such as a git SHA. +DREVOPS_NOTIFY_REF="${DREVOPS_NOTIFY_REF:-}" + +# The event to notify about. Can be 'pre_deployment' or 'post_deployment'. +DREVOPS_NOTIFY_EVENT="${DREVOPS_NOTIFY_EVENT:-}" + +# Deployment environment URL. +DREVOPS_NOTIFY_ENVIRONMENT_URL="${DREVOPS_NOTIFY_ENVIRONMENT_URL:-}" + +# Deployment environment type: production, uat, dev, pr. +DREVOPS_NOTIFY_ENVIRONMENT_TYPE="${DREVOPS_NOTIFY_ENVIRONMENT_TYPE:-PR}" + +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +command -v curl >/dev/null || (fail "curl command is not available." && exit 1) +[ -z "${DREVOPS_NOTIFY_GITHUB_TOKEN}" ] && fail "Missing required value for DREVOPS_NOTIFY_GITHUB_TOKEN" && exit 1 +[ -z "${DREVOPS_NOTIFY_REPOSITORY}" ] && fail "Missing required value for DREVOPS_NOTIFY_REPOSITORY" && exit 1 +[ -z "${DREVOPS_NOTIFY_REF}" ] && fail "Missing required value for DREVOPS_NOTIFY_REF" && exit 1 +[ -z "${DREVOPS_NOTIFY_EVENT}" ] && fail "Missing required value for DREVOPS_NOTIFY_EVENT" && exit 1 +[ -z "${DREVOPS_NOTIFY_ENVIRONMENT_TYPE}" ] && fail "Missing required value for DREVOPS_NOTIFY_ENVIRONMENT_TYPE" && exit 1 + +info "Started GitHub notification for ${DREVOPS_NOTIFY_EVENT} event." + +# +# Function to extract last value from JSON object passed via STDIN. +# +extract_json_first_value() { + local key=${1} + php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$first=reset(\$data); isset(\$first[\"${key}\"]) ? print trim(json_encode(\$first[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" +} + +# +# Function to extract keyed value from JSON object passed via STDIN. +# +extract_json_value() { + local key=${1} + php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" +} + +if [ "${DREVOPS_NOTIFY_EVENT}" = "pre_deployment" ]; then + payload="$(curl \ + -X POST \ + -H "Authorization: token ${DREVOPS_NOTIFY_GITHUB_TOKEN}" \ + -H "Accept: application/vnd.github.v3+json" \ + -s \ + "https://api.github.com/repos/${DREVOPS_NOTIFY_REPOSITORY}/deployments" \ + -d "{\"ref\":\"${DREVOPS_NOTIFY_REF}\", \"environment\": \"${DREVOPS_NOTIFY_ENVIRONMENT_TYPE}\", \"auto_merge\": false}")" + + deployment_id="$(echo "${payload}" | extract_json_value "id")" + + # Check deployment ID. + { [ "${#deployment_id}" != "9" ] || [ "$(expr "x${deployment_id}" : "x[0-9]*$")" -eq 0 ]; } && fail "Unable to get a deployment ID." && exit 1 + + note "Marked deployment as started." +else + [ -z "${DREVOPS_NOTIFY_ENVIRONMENT_URL}" ] && fail "Missing required value for DREVOPS_NOTIFY_ENVIRONMENT_URL" && exit 1 + + # Returns all deployment for this SHA sorted from the latest to the oldest. + payload="$(curl \ + -X GET \ + -H "Authorization: token ${DREVOPS_NOTIFY_GITHUB_TOKEN}" \ + -H "Accept: application/vnd.github.v3+json" \ + -s \ + "https://api.github.com/repos/${DREVOPS_NOTIFY_REPOSITORY}/deployments?ref=${DREVOPS_NOTIFY_REF}")" + + deployment_id="$(echo "${payload}" | extract_json_first_value "id")" + + # Check deployment ID. + { [ "${#deployment_id}" != "9" ] || [ "$(expr "x${deployment_id}" : "x[0-9]*$")" -eq 0 ]; } && fail "Unable to get a deployment ID." && exit 1 + + # Post status update. + payload="$(curl \ + -X POST \ + -H "Accept: application/vnd.github.v3+json" \ + -H "Authorization: token ${DREVOPS_NOTIFY_GITHUB_TOKEN}" \ + "https://api.github.com/repos/${DREVOPS_NOTIFY_REPOSITORY}/deployments/${deployment_id}/statuses" \ + -s \ + -d "{\"state\":\"success\", \"environment_url\": \"${DREVOPS_NOTIFY_ENVIRONMENT_URL}\"}")" + + status="$(echo "${payload}" | extract_json_value "state")" + + [ "${status}" != "success" ] && fail "Unable to set deployment status" && exit 1 + + note "Marked deployment as finished." +fi + +pass "Finished GitHub notification for ${DREVOPS_NOTIFY_EVENT} event." diff --git a/scripts/drevops/notify-jira.sh b/scripts/drevops/notify-jira.sh new file mode 100755 index 000000000..bbe22a649 --- /dev/null +++ b/scripts/drevops/notify-jira.sh @@ -0,0 +1,191 @@ +#!/usr/bin/env bash +## +# Notification dispatch to Jira. +# +# Features: +# - posts comment with a URL of a deployment environment +# - moves an issues to a state +# - assigns an issue to a dedicated user +# +# Uses user's token to perform operations. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# JIRA user. +DREVOPS_NOTIFY_JIRA_USER="${DREVOPS_NOTIFY_JIRA_USER:-}" + +# JIRA token. +DREVOPS_NOTIFY_JIRA_TOKEN="${DREVOPS_NOTIFY_JIRA_TOKEN:-}" + +# Deployment reference, such as a git SHA. +DREVOPS_NOTIFY_BRANCH="${DREVOPS_NOTIFY_BRANCH:-}" + +# Deployment environment URL. +DREVOPS_NOTIFY_ENVIRONMENT_URL="${DREVOPS_NOTIFY_ENVIRONMENT_URL:-}" + +# Deployment comment prefix. +DREVOPS_NOTIFY_JIRA_COMMENT_PREFIX="${DREVOPS_NOTIFY_JIRA_COMMENT_PREFIX:-"Deployed to "}" + +# State to move the ticket to. +# +# If left empty - no transition will be performed. +DREVOPS_NOTIFY_JIRA_TRANSITION="${DREVOPS_NOTIFY_JIRA_TRANSITION:-}" + +# Assign the ticket to this account. +# +# If left empty - no assignment will be performed. +DREVOPS_NOTIFY_JIRA_ASSIGNEE="${DREVOPS_NOTIFY_JIRA_ASSIGNEE:-}" + +# JIRA API endpoint. +DREVOPS_NOTIFY_JIRA_ENDPOINT="${DREVOPS_NOTIFY_JIRA_ENDPOINT:-https://jira.atlassian.com}" + +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +command -v curl >/dev/null || (fail "curl command is not available." && exit 1) +[ -z "${DREVOPS_NOTIFY_JIRA_USER}" ] && fail "Missing required value for DREVOPS_NOTIFY_JIRA_USER" && exit 1 +[ -z "${DREVOPS_NOTIFY_JIRA_TOKEN}" ] && fail "Missing required value for DREVOPS_NOTIFY_JIRA_TOKEN" && exit 1 +[ -z "${DREVOPS_NOTIFY_BRANCH}" ] && fail "Missing required value for DREVOPS_NOTIFY_BRANCH" && exit 1 + +info "Started JIRA notification." + +# +# Function to extract last value from JSON object passed via STDIN. +# +extract_json_first_value() { + local key="${1}" + php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$first=reset(\$data); isset(\$first[\"${key}\"]) ? print trim(json_encode(\$first[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" +} + +# +# Function to extract keyed value from JSON object passed via STDIN. +# +extract_json_value() { + local key="${1}" + php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" +} + +# +# Function to extract keyed value from JSON object passed via STDIN. +# +extract_json_value_by_value() { + local key="${1}" + local value="${2}" + local return_key="${3}" + + php -r "\$key=\"${key}\"; \$value=\"${value}\"; \$return_key=\"${return_key}\";\$data = json_decode(file_get_contents('php://stdin'), TRUE);\$result = array_filter(\$data, function (\$object) use (\$key, \$value, \$return_key) {return !empty(\$object[\$key]) && \$object[\$key] == \$value;});\$result=reset(\$result);print trim(json_encode((\$result[\$return_key] ?? ''), JSON_UNESCAPED_SLASHES), '\"');" +} + +# +# Extract issue ID from the branch. +# +extract_issue() { + echo "${1}" | sed -nE "s/([^\/]+\/)?([A-Za-z0-9]+\-[0-9]+).*/\2/p" +} + +note "Extracting issue" +issue="$(extract_issue "${DREVOPS_NOTIFY_BRANCH}")" +[ "${issue}" = "" ] && pass "Branch ${DREVOPS_NOTIFY_BRANCH} does not contain issue number." && exit 0 +note "Found issue ${issue}." + +note "Creating API token" +base64_opts=() && [ "$(uname)" != "Darwin" ] && base64_opts=(-w 0) +token="$(echo -n "${DREVOPS_NOTIFY_JIRA_USER}:${DREVOPS_NOTIFY_JIRA_TOKEN}" | base64 "${base64_opts[@]}")" + +echo -n " Checking API access..." +payload="$(curl \ + -s \ + -X GET \ + -H "Authorization: Basic ${token}" \ + -H "Content-Type: application/json" \ + "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/myself")" + +account_id="$(echo "${payload}" | extract_json_value "accountId" || echo "error")" + +[ "${#account_id}" -lt 24 ] && fail "Unable to authenticate" && echo "${payload}" && exit 1 +echo "success" + +if [ -n "${DREVOPS_NOTIFY_JIRA_COMMENT_PREFIX}" ]; then + note "Posting a comment." + + [ -z "${DREVOPS_NOTIFY_ENVIRONMENT_URL}" ] && fail "Missing required value for DREVOPS_NOTIFY_ENVIRONMENT_URL." && exit 1 + + comment="[{\"type\": \"text\",\"text\": \"${DREVOPS_NOTIFY_JIRA_COMMENT_PREFIX}\"},{\"type\": \"inlineCard\",\"attrs\": {\"url\": \"${DREVOPS_NOTIFY_ENVIRONMENT_URL}\"}}]" + payload="$(curl \ + -s \ + -X POST \ + -H "Authorization: Basic ${token}" \ + -H "Content-Type: application/json" \ + --url "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/issue/${issue}/comment" \ + --data "{\"body\": {\"type\": \"doc\", \"version\": 1, \"content\": [{\"type\": \"paragraph\", \"content\": ${comment}}]}}")" + + comment_id="$(echo "${payload}" | extract_json_value "id" || echo "error")" + [ "$(expr "x${comment_id}" : "x[0-9]*$")" -eq 0 ] && fail "Unable to create a comment" && exit 1 + + pass "Posted comment with ID ${comment_id}." +fi + +if [ -n "${DREVOPS_NOTIFY_JIRA_TRANSITION}" ]; then + note "Transitioning issue to ${DREVOPS_NOTIFY_JIRA_TRANSITION}" + + echo -n " Discovering transition ID for ${DREVOPS_NOTIFY_JIRA_TRANSITION}..." + payload="$(curl \ + -s \ + -X GET \ + -H "Authorization: Basic ${token}" \ + -H "Content-Type: application/json" \ + --url "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/issue/${issue}/transitions")" + + transition_id="$(echo "${payload}" | extract_json_value "transitions" | extract_json_value_by_value "name" "${DREVOPS_NOTIFY_JIRA_TRANSITION}" "id" || echo "error")" + { [ "${transition_id}" = "" ] || [ "$(expr "x${transition_id}" : "x[0-9]*$")" -eq 0 ]; } && fail "Unable to retrieve transition ID" && exit 1 + echo "success" + + payload="$(curl \ + -s \ + -X POST \ + -H "Authorization: Basic ${token}" \ + -H "Content-Type: application/json" \ + --url "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/issue/${issue}/transitions" \ + --data "{ \"transition\": {\"id\": \"${transition_id}\"}}")" + + pass "Transitioned issue to ${DREVOPS_NOTIFY_JIRA_TRANSITION} " +fi + +if [ -n "${DREVOPS_NOTIFY_JIRA_ASSIGNEE:-}" ]; then + note "Assigning issue to ${DREVOPS_NOTIFY_JIRA_ASSIGNEE}" + + echo -n " Discovering user ID for ${DREVOPS_NOTIFY_JIRA_ASSIGNEE}..." + payload="$(curl \ + -s \ + -X GET \ + -H "Authorization: Basic ${token}" \ + -H "Content-Type: application/json" \ + --url "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/user/assignable/search?query=${DREVOPS_NOTIFY_JIRA_ASSIGNEE}&issueKey=${issue}")" + + account_id="$(echo "${payload}" | extract_json_first_value "accountId" || echo "error")" + [ "${#account_id}" -lt 24 ] && fail "Unable to retrieve assignee account ID" && echo "${payload}" && exit 1 + echo "success" + + payload="$(curl \ + -s \ + -X PUT \ + -H "Authorization: Basic ${token}" \ + -H "Content-Type: application/json" \ + --url "${DREVOPS_NOTIFY_JIRA_ENDPOINT}/rest/api/3/issue/${issue}/assignee" \ + --data "{ \"accountId\": \"${account_id}\"}")" + + pass "Assigned issue to ${DREVOPS_NOTIFY_JIRA_ASSIGNEE}" +fi + +pass "Finished JIRA notification." diff --git a/scripts/drevops/notify-newrelic.sh b/scripts/drevops/notify-newrelic.sh new file mode 100755 index 000000000..ab08908f4 --- /dev/null +++ b/scripts/drevops/notify-newrelic.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash +## +# Notification dispatch to New Relic. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Project name to notify. +DREVOPS_NOTIFY_NEWRELIC_PROJECT="${DREVOPS_NOTIFY_NEWRELIC_PROJECT:-${DREVOPS_NOTIFY_PROJECT:-}}" + +# NewRelic API key, usually of type 'USER'. +DREVOPS_NOTIFY_NEWRELIC_APIKEY="${DREVOPS_NOTIFY_NEWRELIC_APIKEY:-}" + +# Deployment reference, such as a git branch or pr. +DREVOPS_NOTIFY_NEWRELIC_REF="${DREVOPS_NOTIFY_NEWRELIC_REF:-${DREVOPS_NOTIFY_REF:-}}" + +# Deployment commit reference, such as a git SHA. +DREVOPS_NOTIFY_NEWRELIC_SHA="${DREVOPS_NOTIFY_NEWRELIC_SHA:-${DREVOPS_NOTIFY_SHA:-}}" + +# NewRelic application name as it appears in the dashboard. +DREVOPS_NOTIFY_NEWRELIC_APP_NAME="${DREVOPS_NOTIFY_NEWRELIC_APP_NAME:-"${DREVOPS_NOTIFY_NEWRELIC_PROJECT}-${DREVOPS_NOTIFY_NEWRELIC_REF}"}" + +# Optional NewRelic Application ID. +# +# Will be discovered automatically from application name if not provided. +DREVOPS_NOTIFY_NEWRELIC_APPID="${DREVOPS_NOTIFY_NEWRELIC_APPID:-}" + +# Optional NewRelic notification description. +DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION="${DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION:-"${DREVOPS_NOTIFY_NEWRELIC_REF} deployed"}" + +# Optional NewRelic notification changelog. +# +# Defaults to the description. +DREVOPS_NOTIFY_NEWRELIC_CHANGELOG="${DREVOPS_NOTIFY_NEWRELIC_CHANGELOG:-${DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION}}" + +# Optional name of the user performing the deployment. +DREVOPS_NOTIFY_NEWRELIC_USER="${DREVOPS_NOTIFY_NEWRELIC_USER:-"Deployment robot"}" + +# Optional NewRelic endpoint. +DREVOPS_NOTIFY_NEWRELIC_ENDPOINT="${DREVOPS_NOTIFY_NEWRELIC_ENDPOINT:-https://api.newrelic.com/v2}" + +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +command -v curl >/dev/null || (fail "curl command is not available." && exit 1) +[ -z "${DREVOPS_NOTIFY_NEWRELIC_PROJECT}" ] && fail "Missing required value for DREVOPS_NOTIFY_NEWRELIC_PROJECT" && exit 1 +[ -z "${DREVOPS_NOTIFY_NEWRELIC_APIKEY}" ] && fail "Missing required value for DREVOPS_NOTIFY_NEWRELIC_APIKEY" && exit 1 +[ -z "${DREVOPS_NOTIFY_NEWRELIC_REF}" ] && fail "Missing required value for DREVOPS_NOTIFY_NEWRELIC_REF" && exit 1 +[ -z "${DREVOPS_NOTIFY_NEWRELIC_SHA}" ] && fail "Missing required value for DREVOPS_NOTIFY_NEWRELIC_SHA" && exit 1 +[ -z "${DREVOPS_NOTIFY_NEWRELIC_APP_NAME}" ] && fail "Missing required value for DREVOPS_NOTIFY_NEWRELIC_APP_NAME" && exit 1 +[ -z "${DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION}" ] && fail "Missing required value for DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION" && exit 1 +[ -z "${DREVOPS_NOTIFY_NEWRELIC_CHANGELOG}" ] && fail "Missing required value for DREVOPS_NOTIFY_NEWRELIC_CHANGELOG" && exit 1 +[ -z "${DREVOPS_NOTIFY_NEWRELIC_USER}" ] && fail "Missing required value for DREVOPS_NOTIFY_NEWRELIC_USER" && exit 1 + +info "Started New Relic notification." + +# Discover APP id by name if it was not provided. +if [ -z "${DREVOPS_NOTIFY_NEWRELIC_APPID}" ] && [ -n "${DREVOPS_NOTIFY_NEWRELIC_APP_NAME}" ]; then + DREVOPS_NOTIFY_NEWRELIC_APPID="$(curl -s -X GET "${DREVOPS_NOTIFY_NEWRELIC_ENDPOINT}/applications.json" \ + -H "Api-Key:${DREVOPS_NOTIFY_NEWRELIC_APIKEY}" \ + -s -G -d "filter[name]=${DREVOPS_NOTIFY_NEWRELIC_APP_NAME}&exclude_links=true" | + cut -c 24- | + cut -c -10)" +fi + +# Check if the length of the DREVOPS_NOTIFY_NEWRELIC_APPID variable is not 10 OR +# if the variable doesn't contain only numeric values and exit. +{ [ "${#DREVOPS_NOTIFY_NEWRELIC_APPID}" != "10" ] || [ "$(expr "x${DREVOPS_NOTIFY_NEWRELIC_APPID}" : "x[0-9]*$")" -eq 0 ]; } && fail "Failed to get an application ID from the application name ${DREVOPS_NOTIFY_NEWRELIC_APP_NAME}." && exit 1 + +if ! curl -X POST "${DREVOPS_NOTIFY_NEWRELIC_ENDPOINT}/applications/${DREVOPS_NOTIFY_NEWRELIC_APPID}/deployments.json" \ + -L -s -o /dev/null -w "%{http_code}" \ + -H "Api-Key:${DREVOPS_NOTIFY_NEWRELIC_APIKEY}" \ + -H 'Content-Type: application/json' \ + -d \ + "{ + \"deployment\": { + \"revision\": \"${DREVOPS_NOTIFY_NEWRELIC_SHA}\", + \"changelog\": \"${DREVOPS_NOTIFY_NEWRELIC_CHANGELOG}\", + \"description\": \"${DREVOPS_NOTIFY_NEWRELIC_DESCRIPTION}\", + \"user\": \"${DREVOPS_NOTIFY_NEWRELIC_USER}\" + } +}" | grep -q '201'; then + fail "[ERROR] Failed to crate a deployment notification for application ${DREVOPS_NOTIFY_NEWRELIC_APP_NAME} with ID ${DREVOPS_NOTIFY_NEWRELIC_APPID}" + exit 1 +fi + +pass "Finished New Relic notification." diff --git a/scripts/drevops/notify.sh b/scripts/drevops/notify.sh new file mode 100755 index 000000000..5598b0949 --- /dev/null +++ b/scripts/drevops/notify.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +## +# Notify about events. +# +# This is a router script to call relevant scripts based on type. +# +# Dynamic environment variables are passed from the callers. +# Constant environment variables are expected to be set explicitly. +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# The channels of the notifications. +# +# Can be a combination of comma-separated values: email,newrelic,github,jira +DREVOPS_NOTIFY_CHANNELS="${DREVOPS_NOTIFY_CHANNELS:-email}" + +# The event to notify about. +# +# Can be only 'pre_deployment' or 'post_deployment'. Used internally. +DREVOPS_NOTIFY_EVENT="${DREVOPS_NOTIFY_EVENT:-post_deployment}" + +# Flag to skip running of all notifications. +DREVOPS_NOTIFY_SKIP="${DREVOPS_NOTIFY_SKIP:-}" + +# The project to notify about. +DREVOPS_NOTIFY_PROJECT="${DREVOPS_NOTIFY_PROJECT:-${DREVOPS_PROJECT:-}}" + +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started dispatching notifications." + +[ -n "${DREVOPS_NOTIFY_SKIP:-}" ] && pass "Skipping dispatching notifications." && exit 0 + +# Narrow-down the notification type based on the event. +# @note This logic may be moved into notification scripts in the future. +if [ "${DREVOPS_NOTIFY_EVENT:-}" == "pre_deployment" ]; then + DREVOPS_NOTIFY_CHANNELS="github" +elif [ "${DREVOPS_NOTIFY_EVENT:-}" == "post_deployment" ]; then + # Preserve the value. + true +else + fail "Unsupported event ${DREVOPS_NOTIFY_EVENT} provided." && exit 1 +fi + +if [ -z "${DREVOPS_NOTIFY_CHANNELS##*email*}" ]; then + ./scripts/drevops/notify-email.sh "$@" +fi + +if [ -z "${DREVOPS_NOTIFY_CHANNELS##*newrelic*}" ]; then + ./scripts/drevops/notify-newrelic.sh "$@" +fi + +if [ -z "${DREVOPS_NOTIFY_CHANNELS##*github*}" ]; then + ./scripts/drevops/notify-github.sh "$@" +fi + +if [ -z "${DREVOPS_NOTIFY_CHANNELS##*jira*}" ]; then + ./scripts/drevops/notify-jira.sh "$@" +fi + +pass "Finished dispatching notifications." diff --git a/scripts/drevops/provision-sanitize-db.sh b/scripts/drevops/provision-sanitize-db.sh new file mode 100755 index 000000000..530f7058a --- /dev/null +++ b/scripts/drevops/provision-sanitize-db.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +## +# Sanitize database during provision. +# +# shellcheck disable=SC1090,SC1091,SC2086 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Database sanitized account email replacement. +DREVOPS_PROVISION_SANITIZE_DB_EMAIL="${DREVOPS_PROVISION_SANITIZE_DB_EMAIL:-user+%uid@localhost}" + +# Database sanitized account password replacement. +DREVOPS_PROVISION_SANITIZE_DB_PASSWORD="${DREVOPS_PROVISION_SANITIZE_DB_PASSWORD:-${RANDOM}${RANDOM}${RANDOM}${RANDOM}}" + +# Replace username with mail. +DREVOPS_PROVISION_SANITIZE_DB_REPLACE_USERNAME_WITH_EMAIL="${DREVOPS_PROVISION_SANITIZE_DB_REPLACE_USERNAME_WITH_EMAIL:-0}" + +# Path to file with custom sanitization SQL queries. +# +# To skip custom sanitization, remove the file defined in +# DREVOPS_PROVISION_SANITIZE_DB_ADDITIONAL_FILE variable from the codebase. +DREVOPS_PROVISION_SANITIZE_DB_ADDITIONAL_FILE="${DREVOPS_PROVISION_SANITIZE_DB_ADDITIONAL_FILE:-./scripts/sanitize.sql}" + +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Sanitizing database." + +drush() { ./vendor/bin/drush -y "$@"; } + +# Always sanitize password and email using standard methods. +drush sql:sanitize --sanitize-password="${DREVOPS_PROVISION_SANITIZE_DB_PASSWORD}" --sanitize-email="${DREVOPS_PROVISION_SANITIZE_DB_EMAIL}" +pass "Sanitized database using drush sql:sanitize." + +if [ "${DREVOPS_PROVISION_SANITIZE_DB_REPLACE_USERNAME_WITH_EMAIL:-}" = "1" ]; then + drush sql:query "UPDATE \`users_field_data\` set users_field_data.name=users_field_data.mail WHERE uid <> '0';" + pass "Updated username with user email." +fi + +# Sanitize using additional SQL commands provided in file. +if [ -f "${DREVOPS_PROVISION_SANITIZE_DB_ADDITIONAL_FILE:-}" ]; then + # The file path is relative to the project root, but drush expects it to be + # relative to the Drupal root. + drush sql:query --file="${DREVOPS_PROVISION_SANITIZE_DB_ADDITIONAL_FILE/.\//../}" + pass "Applied custom sanitization commands from file." +fi + +# User mail and name for use 0 could have been sanitized - resetting it. +drush sql:query "UPDATE \`users_field_data\` SET mail = '', name = '' WHERE uid = '0';" +drush sql:query "UPDATE \`users_field_data\` SET name = '' WHERE uid = '0';" +pass "Reset user 0 username and email." + +# User email could have been sanitized - setting it back to a pre-defined email. +if [ -n "${DRUPAL_ADMIN_EMAIL:-}" ]; then + drush sql:query "UPDATE \`users_field_data\` SET mail = '${DRUPAL_ADMIN_EMAIL:-}' WHERE uid = '1';" + pass "Updated user 1 email." +fi + +echo diff --git a/scripts/drevops/provision.sh b/scripts/drevops/provision.sh new file mode 100755 index 000000000..5e0a0ae11 --- /dev/null +++ b/scripts/drevops/provision.sh @@ -0,0 +1,322 @@ +#!/usr/bin/env bash +## +# Provision site by importing it from the database dump or installing from +# profile and running additional steps. +# +# This script has excessive verbose output to make it easy to debug site +# provisions and deployments. +# +# shellcheck disable=SC1091,SC2086,SC2002,SC2235,SC1090,SC2012,SC2015 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Flag to skip site provisioning. +DREVOPS_PROVISION_SKIP="${DREVOPS_PROVISION_SKIP:-}" + +# Provision a site from profile instead of database file dump. +DREVOPS_PROVISION_USE_PROFILE="${DREVOPS_PROVISION_USE_PROFILE:-0}" + +# Flag to always overwrite existing database. Usually set to 0 in deployed +# environments. +DREVOPS_PROVISION_OVERRIDE_DB="${DREVOPS_PROVISION_OVERRIDE_DB:-0}" + +# Skip database sanitization. +DREVOPS_PROVISION_SANITIZE_DB_SKIP="${DREVOPS_PROVISION_SANITIZE_DB_SKIP:-0}" + +# Put the site into a maintenance mode during site provisioning phase. +DREVOPS_PROVISION_USE_MAINTENANCE_MODE="${DREVOPS_PROVISION_USE_MAINTENANCE_MODE:-1}" + +# Flag to skip running of operations after site provision is complete. +# Useful to only import the database from file (or install from profile) and not +# perform any additional operations. For example, when need to capture database +# state before any updates ran (for example, DB caching in CI). +DREVOPS_PROVISION_POST_OPERATIONS_SKIP="${DREVOPS_PROVISION_POST_OPERATIONS_SKIP:-0}" + +# Current environment name discovered during site provisioning. +DREVOPS_PROVISION_ENVIRONMENT="${DREVOPS_PROVISION_ENVIRONMENT:-}" + +# Name of the webroot directory with Drupal codebase. +DREVOPS_WEBROOT="${DREVOPS_WEBROOT:-web}" + +# Drupal site name. +DRUPAL_SITE_NAME="${DRUPAL_SITE_NAME:-${DREVOPS_PROJECT:-Example site}}" + +# Drupal site email. +DRUPAL_SITE_EMAIL="${DRUPAL_SITE_EMAIL:-webmaster@example.com}" + +# Profile machine name. +DRUPAL_PROFILE="${DRUPAL_PROFILE:-standard}" + +# Path to configuration directory. +DREVOPS_DRUPAL_CONFIG_PATH="${DREVOPS_DRUPAL_CONFIG_PATH:-./config/default}" + +# Path to private files. +DREVOPS_DRUPAL_PRIVATE_FILES="${DREVOPS_DRUPAL_PRIVATE_FILES:-./${DREVOPS_WEBROOT}/sites/default/files/private}" + +# Directory with database dump file. +DREVOPS_DB_DIR="${DREVOPS_DB_DIR:-./.data}" + +# Database dump file name. +DREVOPS_DB_FILE="${DREVOPS_DB_FILE:-db.sql}" + +# ------------------------------------------------------------------------------ + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +yesno() { [ "${1}" = "1" ] && echo "Yes" || echo "No"; } +drush() { ./vendor/bin/drush -y "$@"; } + +info "Started site provisioning." + +[ "${DREVOPS_PROVISION_SKIP}" = "1" ] && pass "Skipped site provisioning as DREVOPS_PROVISION_SKIP is set to 1." && exit 0 + +## Convert DB dir starting with './' to a full path. +#[ "${DREVOPS_DB_DIR#./}" != "${DREVOPS_DB_DIR}" ] && DREVOPS_DB_DIR="$(pwd)${DREVOPS_DB_DIR#.}" + +drush_version="$(drush --version | cut -d' ' -f4)" +drupal_core_version="$(drush status --field=drupal-version)" +site_has_config="$(test "$(ls -1 ${DREVOPS_DRUPAL_CONFIG_PATH}/*.yml 2>/dev/null | wc -l | tr -d ' ')" -gt 0 && echo "1" || echo "0")" +site_is_installed="$(drush status --fields=bootstrap | grep -q "Successful" && echo "1" || echo "0")" + +################################################################################ +# Print provisioning information. +################################################################################ +echo +note "Webroot dir : ${DREVOPS_WEBROOT}" +note "Profile : ${DRUPAL_PROFILE}" +note "Private files directory : ${DREVOPS_DRUPAL_PRIVATE_FILES}" +note "Config path : ${DREVOPS_DRUPAL_CONFIG_PATH}" +note "DB dump file path : ${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE} ($([ -f "${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" ] && echo "present" || echo "absent"))" +if [ -n "${DREVOPS_DB_DOCKER_IMAGE:-}" ]; then + note "DB dump Docker image : ${DREVOPS_DB_DOCKER_IMAGE}" +fi +echo +note "Drush version : ${drush_version}" +note "Drupal core version : ${drupal_core_version}" +echo +note "Install from profile : $(yesno "${DREVOPS_PROVISION_USE_PROFILE}")" +note "Overwrite existing DB : $(yesno "${DREVOPS_PROVISION_OVERRIDE_DB}")" +note "Skip sanitization : $(yesno "${DREVOPS_PROVISION_SANITIZE_DB_SKIP}")" +note "Use maintenance mode : $(yesno "${DREVOPS_PROVISION_USE_MAINTENANCE_MODE}")" +note "Skip post-install operations : $(yesno "${DREVOPS_PROVISION_POST_OPERATIONS_SKIP}")" +note "Configuration files present : $(yesno "${site_has_config}")" +note "Existing site found : $(yesno "${site_is_installed}")" +echo +################################################################################ + +# +# Provision site by importing the database from the dump file. +# +provision_from_db() { + if [ ! -f "${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" ]; then + echo + fail "Unable to import database from file." + note "Dump file ${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE} does not exist." + note "Site content was not changed." + exit 1 + fi + + drush sql:drop + + drush sql:cli <"${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" + + pass "Imported database from the dump file." +} + +# +# Provision site from the profile. +# +provision_from_profile() { + local opts=() + + opts+=( + "${DRUPAL_PROFILE}" + --site-name="${DRUPAL_SITE_NAME}" + --site-mail="${DRUPAL_SITE_EMAIL}" + --account-name=admin + install_configure_form.enable_update_status_module=NULL + install_configure_form.enable_update_status_emails=NULL + ) + + [ -n "${DRUPAL_ADMIN_EMAIL:-}" ] && opts+=(--account-mail="${DRUPAL_ADMIN_EMAIL:-}") + + [ "${site_has_config}" = "1" ] && opts+=(--existing-config) + + # Database may exist in non-bootstrappable state - truncate it. + drush sql:drop || true + + drush site:install "${opts[@]}" + + pass "Installed a site from the profile." +} + +if [ -n "${DREVOPS_DRUPAL_PRIVATE_FILES}" ]; then + info "Creating private files directory." + if [ -d "${DREVOPS_DRUPAL_PRIVATE_FILES}" ]; then + pass "Private files directory already exists." + else + mkdir -p "${DREVOPS_DRUPAL_PRIVATE_FILES}" + if [ -d "${DREVOPS_DRUPAL_PRIVATE_FILES}" ]; then + pass "Created private files directory." + else + fail "Unable to create private files directory." + exit 1 + fi + fi +fi + +# Provision site from DB dump or profile. +# +# The code block below has explicit if-else conditions and verbose output to +# ensure that this significant operation is executed correctly and has +# sufficient output for debugging. +echo + +if [ "${DREVOPS_PROVISION_USE_PROFILE}" != "1" ]; then + info "Provisioning site from the database dump file." + note "Dump file path: ${DREVOPS_DB_DIR}/${DREVOPS_DB_FILE}" + + if [ "${site_is_installed}" = "1" ]; then + note "Existing site was found when provisioning from the database dump file." + + if [ "${DREVOPS_PROVISION_OVERRIDE_DB}" = "1" ]; then + note "Existing site content will be removed and fresh content will be imported from the database dump file." + provision_from_db + else + note "Site content will be preserved." + note "Sanitization will be skipped for an existing database." + export DREVOPS_PROVISION_SANITIZE_DB_SKIP=1 + fi + else + note "Existing site was not found when installing from the database dump file." + note "Fresh site content will be imported from the database dump file." + provision_from_db + # Let the downstream scripts know that the database was imported. + export DREVOPS_PROVISION_OVERRIDE_DB=1 + fi +else + info "Provisioning site from the profile." + note "Profile: ${DRUPAL_PROFILE}." + + if [ "${site_is_installed}" = "1" ]; then + note "Existing site was found when provisioning from the profile." + + if [ "${DREVOPS_PROVISION_OVERRIDE_DB}" = "1" ]; then + note "Existing site content will be removed and new content will be created from the profile." + provision_from_profile + # Let the downstream scripts know that the database was imported. + export DREVOPS_PROVISION_OVERRIDE_DB=1 + else + note "Site content will be preserved." + note "Sanitization will be skipped for an existing database." + export DREVOPS_PROVISION_SANITIZE_DB_SKIP=1 + fi + else + note "Existing site was not found when provisioning from the profile." + note "Fresh site content will be created from the profile." + provision_from_profile + export DREVOPS_PROVISION_OVERRIDE_DB=1 + fi +fi + +echo + +if [ "${DREVOPS_PROVISION_POST_OPERATIONS_SKIP}" = "1" ]; then + info "Skipped running of post-install operations as DREVOPS_PROVISION_POST_OPERATIONS_SKIP is set to 1." + echo + info "Finished site provisioning." + exit 0 +fi + +if [ "${DREVOPS_PROVISION_USE_MAINTENANCE_MODE}" = "1" ]; then + info "Enabling maintenance mode." + drush maint:set 1 + pass "Enabled maintenance mode." + echo +fi + +# Get the current environment and export it for the downstream scripts. +DREVOPS_PROVISION_ENVIRONMENT="$(drush php:eval "print \Drupal\core\Site\Settings::get('environment');")" +info "Current Drupal environment: ${DREVOPS_PROVISION_ENVIRONMENT}" +export DREVOPS_PROVISION_ENVIRONMENT +echo + +# Use 'drush deploy' if configuration files are present or use standalone commands otherwise. +if [ "${site_has_config}" = "1" ]; then + if [ -f "${DREVOPS_DRUPAL_CONFIG_PATH}/system.site.yml" ]; then + config_uuid="$(cat "${DREVOPS_DRUPAL_CONFIG_PATH}/system.site.yml" | grep uuid | tail -c +7 | head -c 36)" + drush config-set system.site uuid "${config_uuid}" + pass "Updated site UUID from the configuration with ${config_uuid}." + fi + + info "Running deployment operations via 'drush deploy'." + drush deploy + pass "Completed deployment operations via 'drush deploy'." + + # Import config_split configuration if the module is installed. + # Drush deploy does not import config_split configuration on the first run. + # @see https://github.com/drush-ops/drush/issues/2449 + # @see https://www.drupal.org/project/drupal/issues/3241439 + if drush pm:list --status=enabled | grep -q config_split; then + info "Importing config_split configuration." + drush config:import + pass "Completed config_split configuration import." + fi +else + info "Running database updates." + drush updatedb --no-cache-clear + pass "Completed running database updates." + echo + + info "Rebuilding cache." + drush cache:rebuild + pass "Cache was rebuilt." + echo + + info "Running deployment operations via 'drush deploy:hook'." + drush deploy:hook + pass "Completed deployment operations via 'drush deploy:hook'." +fi + +# Sanitize database. +if [ "${DREVOPS_PROVISION_SANITIZE_DB_SKIP}" != "1" ]; then + ./scripts/drevops/provision-sanitize-db.sh +else + info "Skipped database sanitization." + echo +fi + +# Run custom provision scripts. +# The files should be located in "./scripts/custom/" directory +# and must have "provision-" prefix and ".sh" extension. +if [ -d "./scripts/custom" ]; then + for file in ./scripts/custom/provision-*.sh; do + if [ -f "${file}" ]; then + echo + info "Running custom post-install script '${file}'." + echo + . "${file}" + echo + pass "Completed running of custom post-install script '${file}'." + echo + fi + done + unset file +fi + +if [ "${DREVOPS_PROVISION_USE_MAINTENANCE_MODE}" = "1" ]; then + info "Disabling maintenance mode." + drush maint:set 0 + pass "Disabled maintenance mode." + echo +fi + +info "Finished site provisioning." diff --git a/scripts/drevops/purge-cache-acquia.sh b/scripts/drevops/purge-cache-acquia.sh deleted file mode 100755 index e866d1437..000000000 --- a/scripts/drevops/purge-cache-acquia.sh +++ /dev/null @@ -1,170 +0,0 @@ -#!/usr/bin/env bash -## -# Flush Varnish cache in the Acquia site environment. -# @see https://cloudapi-docs.acquia.com/#/Environments/postEnvironmentsDomainsClearVarnish - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -#------------------------------------------------------------------------------- -# REQUIRED VARIABLES -#------------------------------------------------------------------------------- - -# Application name. Used to discover UUID. -AC_API_APP_NAME="${AC_API_APP_NAME:-}" -# Source environment name to clear Varnish cache for. -AC_API_VARNISH_ENV="${AC_API_VARNISH_ENV:-}" -# File with a list of domains that should be cleared. -AC_API_VARNISH_DOMAINS_FILE="${AC_API_VARNISH_DOMAINS_FILE:-domains.txt}" - -#------------------------------------------------------------------------------- -# OPTIONAL VARIABLES -#------------------------------------------------------------------------------- - -# Both user key and secret are read from environment variables or .env.local -# file. They should be provided through environment variables only in -# environments that do not have .env.local file created (usually, non-local -# environments). -AC_API_KEY="${AC_API_KEY:-}" -AC_API_SECRET="${AC_API_SECRET:-}" - -# Location of the file with credentials. -AC_CREDENTIALS_FILE=${AC_CREDENTIALS_FILE:-.env.local} - -# Number of status retrieval retries. If this limit reached and task has not -# yet finished, the task is considered failed. -AC_API_STATUS_RETRIES="${AC_API_STATUS_RETRIES:-300}" -# Interval in seconds to check task status. -AC_API_STATUS_INTERVAL="${AC_API_STATUS_INTERVAL:-10}" - -#------------------------------------------------------------------------------- -# DO NOT CHANGE ANYTHING BELOW THIS LINE -#------------------------------------------------------------------------------- - -# -# Function to extract last value from JSON object passed via STDIN. -# -extract_json_last_value() { - local key=$1 - php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$last=array_pop(\$data); isset(\$last[\"${key}\"]) ? print trim(json_encode(\$last[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" -} - -# -# Function to extract keyed value from JSON object passed via STDIN. -# -extract_json_value() { - local key=$1 - php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" -} - -# Pre-flight checks. -command -v curl > /dev/null || ( echo "ERROR: curl command is not available." && exit 1 ) - -# Try to read credentials from the credentials file. -if [ -z "${AC_API_KEY}" ] && [ -f "${AC_CREDENTIALS_FILE}" ]; then - # shellcheck disable=SC1090 - t=$(mktemp) && export -p > "$t" && set -a && . "${AC_CREDENTIALS_FILE}" && set +a && . "$t" && rm "$t" && unset t -fi - -# Check that all required variables are present. -[ -z "${AC_API_APP_NAME}" ] && echo "ERROR: Missing value for AC_API_APP_NAME." && exit 1 -[ -z "${AC_API_VARNISH_ENV}" ] && echo "ERROR: Missing value for AC_API_VARNISH_ENV." && exit 1 -[ -z "${AC_API_VARNISH_DOMAINS_FILE}" ] && echo "ERROR: Missing value for AC_API_VARNISH_DOMAINS_FILE." && exit 1 -[ -z "${AC_API_KEY}" ] && echo "ERROR: Missing value for AC_API_KEY." && exit 1 -[ -z "${AC_API_SECRET}" ] && echo "ERROR: Missing value for AC_API_SECRET." && exit 1 - -echo "==> Retrieving authentication token." -TOKEN_JSON=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${AC_API_KEY}" --data-urlencode "client_secret=${AC_API_SECRET}" --data-urlencode "grant_type=client_credentials") -TOKEN=$(echo "${TOKEN_JSON}" | extract_json_value "access_token") -[ -z "${TOKEN}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 - -echo "==> Retrieving ${AC_API_APP_NAME} application UUID." -APP_UUID_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "https://cloud.acquia.com/api/applications?filter=name%3D${AC_API_APP_NAME/ /%20}") -APP_UUID=$(echo "${APP_UUID_JSON}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "uuid") -[ -z "${APP_UUID}" ] && echo "ERROR: Unable to retrieve an environment UUID." && exit 1 - -echo "==> Retrieving environment id." -ENVS_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "https://cloud.acquia.com/api/applications/${APP_UUID}/environments?filter=name%3D${AC_API_VARNISH_ENV}") -ENV_ID=$(echo "${ENVS_JSON}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${ENV_ID}" ] && echo "ERROR: Unable to retrieve environment ID." && exit 1 - -echo "==> Compiling a list of domains." - -TARGET_ENV="${AC_API_VARNISH_ENV}" -DOMAINS_LIST=() -while read -r DOMAIN; do - # Special variable to remap target env to the sub-domain prefix based on UI name. - TARGET_ENV_REMAP="${TARGET_ENV}" - # Strip placeholder for PROD environment. - if [ "${TARGET_ENV}" == "prod" ] ; then - DOMAIN="${DOMAIN//\$TARGET_ENV_REMAP./}" - DOMAIN="${DOMAIN//\$TARGET_ENV./}" - fi - - # Re-map 'test' to 'stage' as seen in UI. - if [ "${TARGET_ENV}" == "test" ] ; then - TARGET_ENV_REMAP=stage - fi - - # Disable replacement for unknown environments. - if [ "${TARGET_ENV}" != "dev" ] && [ "${TARGET_ENV}" != "test" ] && [ "${TARGET_ENV}" != "test2" ] && [ "${TARGET_ENV}" != "prod" ]; then - TARGET_ENV_REMAP="" - fi - - # Proceed only if the environment was provided. - if [ "${TARGET_ENV_REMAP}" != "" ] ; then - # Interpolate variables in domain name. - DOMAIN="$(eval echo "${DOMAIN}")" - # Add domain to list. - DOMAINS_LIST+=("${DOMAIN}") - fi -done < "${AC_API_VARNISH_DOMAINS_FILE}" - -if [ "${#DOMAINS_LIST[@]}" -gt 0 ]; then - # Acquia API stops clearing Varnish caches if at least 1 domain fails, so - # we are clearing caches for every domain separately and not failing if - # the domain is not found. - for domain in "${DOMAINS_LIST[@]}"; do - echo "==> Flushing Varnish cache for ${AC_API_VARNISH_ENV} environment domain ${domain}." - TASK_STATUS_JSON=$(curl -X POST -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -d "{\"domains\":[\"${domain}\"]}" "https://cloud.acquia.com/api/environments/${ENV_ID}/domains/actions/clear-varnish") - NOTIFICATION_URL=$(echo "${TASK_STATUS_JSON}" | extract_json_value "_links" | extract_json_value "notification" | extract_json_value "href") || true - - # If domain does not exist - notification will be empty; we are skipping - # non-existing domains without a failure. - if [ "${NOTIFICATION_URL}" == "" ]; then - echo "==> Unable to flush Varnish for ${AC_API_VARNISH_ENV} environment domain ${domain} as it does not exist." - break; - fi - - echo -n "==> Checking task status: " - TASK_COMPLETED=0 - # shellcheck disable=SC2034 - for i in $(seq 1 "${AC_API_STATUS_RETRIES}"); - do - echo -n "." - sleep "${AC_API_STATUS_INTERVAL}" - TASK_STATUS_JSON=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $TOKEN" "${NOTIFICATION_URL}") - TASK_STATE=$(echo "$TASK_STATUS_JSON" | extract_json_value "status") - if [ "$TASK_STATE" == "completed" ]; then - echo "==> Successfully flushed Varnish cache for ${AC_API_VARNISH_ENV} environment domain ${domain}." - TASK_COMPLETED=1; - break 1; - fi - - echo "==> Retrieving authentication token." - TOKEN_JSON=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${AC_API_KEY}" --data-urlencode "client_secret=${AC_API_SECRET}" --data-urlencode "grant_type=client_credentials") - TOKEN=$(echo "${TOKEN_JSON}" | extract_json_value "access_token") - [ -z "${TOKEN}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 - done - echo - - if [ "${TASK_COMPLETED}" == "0" ] ; then - echo "==> Unable to flush Varnish for ${AC_API_VARNISH_ENV} environment domain ${domain}." - fi - done; -else - echo "==> Unable to find domains to flush Varnish for ${AC_API_VARNISH_ENV} environment." -fi - -SELF_ELAPSED_TIME=$((SECONDS)) -echo "==> Build duration: $((SELF_ELAPSED_TIME/60)) min $((SELF_ELAPSED_TIME%60)) sec." diff --git a/scripts/drevops/reset.sh b/scripts/drevops/reset.sh index 79ee5087e..d9dc7f65e 100755 --- a/scripts/drevops/reset.sh +++ b/scripts/drevops/reset.sh @@ -1,19 +1,54 @@ #!/usr/bin/env bash ## -# Reset project to a freshly cloned repo state. +# Reset project to a freshly cloned repository state. # +# shellcheck disable=SC1090,SC1091 -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -# Change permissions and remove all other untracked files. -git ls-files --others -i --exclude-from=.gitignore -z | xargs -0 -I {} -- bash -c '( chmod 777 "{}" > /dev/null || true ) && ( rm -rf "{}" > /dev/null || true )' +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x -# Reset repository files. -git reset --hard +# ------------------------------------------------------------------------------ -# Remove all untracked, files. -git clean -f -d +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on -# Remove empty directories. -find . -type d -not -path "./.git/*" -empty -delete +is_hard_reset="$([ "${1:-}" == "hard" ] && echo "1" || echo "0")" + +info "Started reset." + +rm -rf \ + "./vendor" \ + "./${DREVOPS_WEBROOT}/core" \ + "./${DREVOPS_WEBROOT}/profiles/contrib" \ + "./${DREVOPS_WEBROOT}/modules/contrib" \ + "./${DREVOPS_WEBROOT}/themes/custom/*/build" \ + "./${DREVOPS_WEBROOT}/themes/custom/*/scss/_components.scss" + +# shellcheck disable=SC2038 +find . -type d -name node_modules | xargs rm -Rf + +if [ "${is_hard_reset}" = "1" ]; then + note "Changing permissions and remove all other untracked files." + + git ls-files --others -i --exclude-from=.gitignore -z | while IFS= read -r -d '' file; do + chmod 777 "${file}" >/dev/null || true + rm -rf "${file}" >/dev/null || true + done + + note "Resetting repository files." + git reset --hard + + note "Removing all untracked, files." + git clean -f -d + + note "Removing empty directories." + find . -type d -not -path "./.git/*" -empty -delete +fi + +pass "Finished reset." diff --git a/scripts/drevops/restore-docker-image.sh b/scripts/drevops/restore-docker-image.sh new file mode 100755 index 000000000..92bfd710b --- /dev/null +++ b/scripts/drevops/restore-docker-image.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +## +# Restore Docker image from archive. +# +# IMPORTANT! This script runs outside the container on the host system. +# +# shellcheck disable=SC1090,SC1091,SC2015 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x + +# Docker image archive file name. +DREVOPS_DOCKER_RESTORE_IMAGE="${1:-}" + +# Docker image archive file to restore passed as a second argument to this script. +DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE="${2:-}" + +#------------------------------------------------------------------------------- + +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started Docker image restore" + +[ -z "${DREVOPS_DOCKER_RESTORE_IMAGE}" ] && fail "image name is not specified. Provide Docker image name as a first argument to this script in a format /." && exit 1 +[ -z "${DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE}" ] && fail "image archive file name is not specified. Provide Docker image archive file name as a second argument to this script." && exit 1 + +docker image inspect "${DREVOPS_DOCKER_RESTORE_IMAGE}" >/dev/null 2>&1 && + note "Found ${DREVOPS_DOCKER_RESTORE_IMAGE} image on host." || + note "Not found ${DREVOPS_DOCKER_RESTORE_IMAGE} image on host." + +if [ -f "${DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE:-}" ]; then + note "Found archived database Docker image file ${DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE}. Expanding..." + # Always use archived image, even if such image already exists on the host. + docker load -q --input "${DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE}" + # Check that image was expanded and now exists on the host or notify + # that it will be downloaded from the registry. + docker image inspect "${DREVOPS_DOCKER_RESTORE_IMAGE}" >/dev/null 2>&1 && + note "Found expanded ${DREVOPS_DOCKER_RESTORE_IMAGE} image on host." || + note "Not found expanded ${DREVOPS_DOCKER_RESTORE_IMAGE} image on host. The image will be pulled from the registry." +else + note "Not found archived database Docker image file ${DREVOPS_DOCKER_RESTORE_ARCHIVE_FILE}." +fi + +pass "Finished Docker image restore" diff --git a/scripts/drevops/task-copy-db-acquia.sh b/scripts/drevops/task-copy-db-acquia.sh index 985df5800..dd9e948c9 100755 --- a/scripts/drevops/task-copy-db-acquia.sh +++ b/scripts/drevops/task-copy-db-acquia.sh @@ -10,18 +10,22 @@ # Acquia Cloud UI -> Account -> API tokens -> Create Token # # @see https://cloudapi-docs.acquia.com/#/Environments/postEnvironmentsDatabases +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Acquia Cloud API key. -DREVOPS_TASK_COPY_DB_ACQUIA_KEY="${DREVOPS_TASK_COPY_DB_ACQUIA_KEY:-${DREVOPS_ACQUIA_KEY}}" +DREVOPS_ACQUIA_KEY="${DREVOPS_ACQUIA_KEY:-${DREVOPS_ACQUIA_KEY}}" # Acquia Cloud API secret. -DREVOPS_TASK_COPY_DB_ACQUIA_SECRET="${DREVOPS_TASK_COPY_DB_ACQUIA_SECRET:-${DREVOPS_ACQUIA_SECRET}}" +DREVOPS_ACQUIA_SECRET="${DREVOPS_ACQUIA_SECRET:-${DREVOPS_ACQUIA_SECRET}}" # Application name. Used to discover UUID. -DREVOPS_TASK_COPY_DB_ACQUIA_APP_NAME="${DREVOPS_TASK_COPY_DB_ACQUIA_APP_NAME:-${DREVOPS_ACQUIA_APP_NAME}}" +DREVOPS_ACQUIA_APP_NAME="${DREVOPS_ACQUIA_APP_NAME:-${DREVOPS_ACQUIA_APP_NAME}}" # Source environment name to copy DB from. DREVOPS_TASK_COPY_DB_ACQUIA_SRC="${DREVOPS_TASK_COPY_DB_ACQUIA_SRC:-}" @@ -41,13 +45,20 @@ DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_INTERVAL="${DREVOPS_TASK_COPY_DB_ACQUIA_STATU #------------------------------------------------------------------------------- -echo "==> Started database copying from between environments in Acquia." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started database copying between environments in Acquia." # # Extract last value from JSON object passed via STDIN. # extract_json_last_value() { - local key=$1 + local key=${1} php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$last=array_pop(\$data); isset(\$last[\"${key}\"]) ? print trim(json_encode(\$last[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" } @@ -55,74 +66,73 @@ extract_json_last_value() { # Extract keyed value from JSON object passed via STDIN. # extract_json_value() { - local key=$1 + local key=${1} php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" } # Pre-flight checks. -command -v curl > /dev/null || ( echo "ERROR: curl command is not available." && exit 1 ) +command -v curl >/dev/null || (fail "curl command is not available." && exit 1) # Check that all required variables are present. -[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_KEY}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_KEY." && exit 1 -[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_SECRET}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_SECRET." && exit 1 -[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_APP_NAME}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_APP_NAME." && exit 1 -[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_SRC}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_SRC." && exit 1 -[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_DST}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_DST." && exit 1 -[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_NAME}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_NAME." && exit 1 -[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_RETRIES}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_RETRIES." && exit 1 -[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_INTERVAL}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_INTERVAL." && exit 1 - -echo " > Retrieving authentication token." -token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_TASK_COPY_DB_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_TASK_COPY_DB_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") +[ -z "${DREVOPS_ACQUIA_KEY}" ] && fail "Missing value for DREVOPS_ACQUIA_KEY." && exit 1 +[ -z "${DREVOPS_ACQUIA_SECRET}" ] && fail "Missing value for DREVOPS_ACQUIA_SECRET." && exit 1 +[ -z "${DREVOPS_ACQUIA_APP_NAME}" ] && fail "Missing value for DREVOPS_ACQUIA_APP_NAME." && exit 1 +[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_SRC}" ] && fail "Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_SRC." && exit 1 +[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_DST}" ] && fail "Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_DST." && exit 1 +[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_NAME}" ] && fail "Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_NAME." && exit 1 +[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_RETRIES}" ] && fail "Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_RETRIES." && exit 1 +[ -z "${DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_INTERVAL}" ] && fail "Missing value for DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_INTERVAL." && exit 1 + +note "Retrieving authentication token." +token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") token=$(echo "${token_json}" | extract_json_value "access_token") -[ -z "${token}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 +[ -z "${token}" ] && fail "Unable to retrieve a token." && exit 1 -echo " > Retrieving ${DREVOPS_TASK_COPY_DB_ACQUIA_APP_NAME} application UUID." -app_uuid_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/applications?filter=name%3D${DREVOPS_TASK_COPY_DB_ACQUIA_APP_NAME/ /%20}") +note "Retrieving ${DREVOPS_ACQUIA_APP_NAME} application UUID." +app_uuid_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/applications?filter=name%3D${DREVOPS_ACQUIA_APP_NAME/ /%20}") app_uuid=$(echo "${app_uuid_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "uuid") -[ -z "${app_uuid}" ] && echo "ERROR: Unable to retrieve an environment UUID." && exit 1 +[ -z "${app_uuid}" ] && fail "Unable to retrieve an environment UUID." && exit 1 -echo " > Retrieving source environment ID." -envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_TASK_COPY_DB_ACQUIA_SRC}") +note "Retrieving source environment ID." +envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_TASK_COPY_DB_ACQUIA_SRC}") src_env_id=$(echo "${envs_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${src_env_id}" ] && echo "ERROR: Unable to retrieve source environment ID." && exit 1 +[ -z "${src_env_id}" ] && fail "Unable to retrieve source environment ID." && exit 1 -echo " > Retrieving destination environment ID." -envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_TASK_COPY_DB_ACQUIA_DST}") +note "Retrieving destination environment ID." +envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_TASK_COPY_DB_ACQUIA_DST}") dst_env_id=$(echo "${envs_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${dst_env_id}" ] && echo "ERROR: Unable to retrieve destination environment ID." && exit 1 +[ -z "${dst_env_id}" ] && fail "Unable to retrieve destination environment ID." && exit 1 -echo " > Copying DB from ${DREVOPS_TASK_COPY_DB_ACQUIA_SRC} to ${DREVOPS_TASK_COPY_DB_ACQUIA_DST} environment." -task_status_json=$(curl -X POST -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" -H "Content-Type: application/json" -d "{\"source\":\"${src_env_id}\", \"name\":\"${DREVOPS_TASK_COPY_DB_ACQUIA_NAME}\"}" "https://cloud.acquia.com/api/environments/${dst_env_id}/databases") +note "Copying DB from ${DREVOPS_TASK_COPY_DB_ACQUIA_SRC} to ${DREVOPS_TASK_COPY_DB_ACQUIA_DST} environment." +task_status_json=$(curl -X POST -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" -H "Content-Type: application/json" -d "{\"source\":\"${src_env_id}\", \"name\":\"${DREVOPS_TASK_COPY_DB_ACQUIA_NAME}\"}" "https://cloud.acquia.com/api/environments/${dst_env_id}/databases") notification_url=$(echo "${task_status_json}" | extract_json_value "_links" | extract_json_value "notification" | extract_json_value "href") -echo -n " > Checking task status: " +echo -n " > Checking task status: " task_completed=0 # shellcheck disable=SC2034 -for i in $(seq 1 "${DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_RETRIES}"); -do +for i in $(seq 1 "${DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_RETRIES}"); do echo -n "." sleep "${DREVOPS_TASK_COPY_DB_ACQUIA_STATUS_INTERVAL}" - task_status_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "${notification_url}") - task_state=$(echo "$task_status_json" | extract_json_value "status") - [ "$task_state" = "completed" ] && task_completed=1 && break + task_status_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "${notification_url}") + task_state=$(echo "${task_status_json}" | extract_json_value "status") + [ "${task_state}" = "completed" ] && task_completed=1 && break - echo " > Retrieving authentication token." - token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_TASK_COPY_DB_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_TASK_COPY_DB_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") + note "Retrieving authentication token." + token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") token=$(echo "${token_json}" | extract_json_value "access_token") - [ -z "${token}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 + [ -z "${token}" ] && fail "Unable to retrieve a token." && exit 1 done echo -if [ "${task_completed}" = "0" ] ; then - echo "ERROR: Unable to copy DB from $DREVOPS_TASK_COPY_DB_ACQUIA_SRC to $DREVOPS_TASK_COPY_DB_ACQUIA_DST environment." +if [ "${task_completed}" = "0" ]; then + fail "Unable to copy DB from ${DREVOPS_TASK_COPY_DB_ACQUIA_SRC} to ${DREVOPS_TASK_COPY_DB_ACQUIA_DST} environment." exit 1 fi -echo " > Successfully copied DB from $DREVOPS_TASK_COPY_DB_ACQUIA_SRC to $DREVOPS_TASK_COPY_DB_ACQUIA_DST environment." +note "Copied DB from ${DREVOPS_TASK_COPY_DB_ACQUIA_SRC} to ${DREVOPS_TASK_COPY_DB_ACQUIA_DST} environment." self_elapsed_time=$((SECONDS)) -echo " > Run duration: $((self_elapsed_time/60)) min $((self_elapsed_time%60)) sec." +note "Run duration: $((self_elapsed_time / 60)) min $((self_elapsed_time % 60)) sec." -echo "==> Finished database copying from between environments in Acquia." +pass "Finished database copying between environments in Acquia." diff --git a/scripts/drevops/task-copy-files-acquia.sh b/scripts/drevops/task-copy-files-acquia.sh index e8bcac7cb..55c42994e 100755 --- a/scripts/drevops/task-copy-files-acquia.sh +++ b/scripts/drevops/task-copy-files-acquia.sh @@ -10,18 +10,22 @@ # Acquia Cloud UI -> Account -> API tokens -> Create Token # # @see https://cloudapi-docs.acquia.com/#/Environments/postEnvironmentsFiles +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Acquia Cloud API key. -DREVOPS_TASK_COPY_FILES_ACQUIA_KEY="${DREVOPS_TASK_COPY_FILES_ACQUIA_KEY:-${DREVOPS_ACQUIA_KEY}}" +DREVOPS_ACQUIA_KEY="${DREVOPS_ACQUIA_KEY:-${DREVOPS_ACQUIA_KEY}}" # Acquia Cloud API secret. -DREVOPS_TASK_COPY_FILES_ACQUIA_SECRET="${DREVOPS_TASK_COPY_FILES_ACQUIA_SECRET:-${DREVOPS_ACQUIA_SECRET}}" +DREVOPS_ACQUIA_SECRET="${DREVOPS_ACQUIA_SECRET:-${DREVOPS_ACQUIA_SECRET}}" # Application name. Used to discover UUID. -DREVOPS_TASK_COPY_FILES_ACQUIA_APP_NAME="${DREVOPS_TASK_COPY_FILES_ACQUIA_APP_NAME:-${DREVOPS_ACQUIA_APP_NAME}}" +DREVOPS_ACQUIA_APP_NAME="${DREVOPS_ACQUIA_APP_NAME:-${DREVOPS_ACQUIA_APP_NAME}}" # Source environment name to copy from. DREVOPS_TASK_COPY_FILES_ACQUIA_SRC="${DREVOPS_TASK_COPY_FILES_ACQUIA_SRC:-}" @@ -38,13 +42,20 @@ DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_INTERVAL="${DREVOPS_TASK_COPY_FILES_ACQUIA #------------------------------------------------------------------------------- -echo "==> Started database copying from between environments in Acquia." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started database copying between environments in Acquia." # # Extract last value from JSON object passed via STDIN. # extract_json_last_value() { - local key=$1 + local key="${1}" php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$last=array_pop(\$data); isset(\$last[\"${key}\"]) ? print trim(json_encode(\$last[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" } @@ -52,73 +63,72 @@ extract_json_last_value() { # Extract keyed value from JSON object passed via STDIN. # extract_json_value() { - local key=$1 + local key="${1}" php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" } # Pre-flight checks. -command -v curl > /dev/null || ( echo "ERROR: curl command is not available." && exit 1 ) +command -v curl >/dev/null || (fail "curl command is not available." && exit 1) # Check that all required variables are present. -[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_KEY}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_KEY." && exit 1 -[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_SECRET}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_SECRET." && exit 1 -[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_APP_NAME}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_APP_NAME." && exit 1 -[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_SRC}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_SRC." && exit 1 -[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_DST}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_DST." && exit 1 -[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_RETRIES}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_RETRIES." && exit 1 -[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_INTERVAL}" ] && echo "ERROR: Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_INTERVAL." && exit 1 - -echo " > Retrieving authentication token." -token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_TASK_COPY_FILES_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_TASK_COPY_FILES_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") +[ -z "${DREVOPS_ACQUIA_KEY}" ] && fail "Missing value for DREVOPS_ACQUIA_KEY." && exit 1 +[ -z "${DREVOPS_ACQUIA_SECRET}" ] && fail "Missing value for DREVOPS_ACQUIA_SECRET." && exit 1 +[ -z "${DREVOPS_ACQUIA_APP_NAME}" ] && fail "Missing value for DREVOPS_ACQUIA_APP_NAME." && exit 1 +[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_SRC}" ] && fail "Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_SRC." && exit 1 +[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_DST}" ] && fail "Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_DST." && exit 1 +[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_RETRIES}" ] && fail "Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_RETRIES." && exit 1 +[ -z "${DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_INTERVAL}" ] && fail "Missing value for DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_INTERVAL." && exit 1 + +note "Retrieving authentication token." +token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") token=$(echo "${token_json}" | extract_json_value "access_token") -[ -z "${token}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 +[ -z "${token}" ] && fail "Unable to retrieve a token." && exit 1 -echo " > Retrieving ${DREVOPS_TASK_COPY_FILES_ACQUIA_APP_NAME} application UUID." -app_uuid_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/applications?filter=name%3D${DREVOPS_TASK_COPY_FILES_ACQUIA_APP_NAME/ /%20}") +note "Retrieving ${DREVOPS_ACQUIA_APP_NAME} application UUID." +app_uuid_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/applications?filter=name%3D${DREVOPS_ACQUIA_APP_NAME/ /%20}") app_uuid=$(echo "${app_uuid_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "uuid") -[ -z "${app_uuid}" ] && echo "ERROR: Unable to retrieve an environment UUID." && exit 1 +[ -z "${app_uuid}" ] && fail "Unable to retrieve an environment UUID." && exit 1 -echo " > Retrieving source environment ID." -envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_TASK_COPY_FILES_ACQUIA_SRC}") +note "Retrieving source environment ID." +envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_TASK_COPY_FILES_ACQUIA_SRC}") src_env_id=$(echo "${envs_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${src_env_id}" ] && echo "ERROR: Unable to retrieve source environment ID." && exit 1 +[ -z "${src_env_id}" ] && fail "Unable to retrieve source environment ID." && exit 1 -echo " > Retrieving destination environment ID." -envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_TASK_COPY_FILES_ACQUIA_DST}") +note "Retrieving destination environment ID." +envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_TASK_COPY_FILES_ACQUIA_DST}") dst_env_id=$(echo "${envs_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${dst_env_id}" ] && echo "ERROR: Unable to retrieve destination environment ID." && exit 1 +[ -z "${dst_env_id}" ] && fail "Unable to retrieve destination environment ID." && exit 1 -echo " > Copying files from ${DREVOPS_TASK_COPY_FILES_ACQUIA_SRC} to ${DREVOPS_TASK_COPY_FILES_ACQUIA_DST} environment." -task_status_json=$(curl -X POST -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" -H "Content-Type: application/json" -d "{\"source\":\"${src_env_id}\"}" "https://cloud.acquia.com/api/environments/${dst_env_id}/files") +note "Copying files from ${DREVOPS_TASK_COPY_FILES_ACQUIA_SRC} to ${DREVOPS_TASK_COPY_FILES_ACQUIA_DST} environment." +task_status_json=$(curl -X POST -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" -H "Content-Type: application/json" -d "{\"source\":\"${src_env_id}\"}" "https://cloud.acquia.com/api/environments/${dst_env_id}/files") notification_url=$(echo "${task_status_json}" | extract_json_value "_links" | extract_json_value "notification" | extract_json_value "href") -echo -n " > Checking task status: " +echo -n " > Checking task status: " task_completed=0 # shellcheck disable=SC2034 -for i in $(seq 1 "${DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_RETRIES}"); -do +for i in $(seq 1 "${DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_RETRIES}"); do echo -n "." sleep "${DREVOPS_TASK_COPY_FILES_ACQUIA_STATUS_INTERVAL}" - task_status_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "${notification_url}") - task_state=$(echo "$task_status_json" | extract_json_value "status") - [ "$task_state" = "completed" ] && task_completed=1 && break + task_status_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "${notification_url}") + task_state=$(echo "${task_status_json}" | extract_json_value "status") + [ "${task_state}" = "completed" ] && task_completed=1 && break - echo " > Retrieving authentication token." - token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_TASK_COPY_FILES_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_TASK_COPY_FILES_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") + note "Retrieving authentication token." + token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") token=$(echo "${token_json}" | extract_json_value "access_token") - [ -z "${token}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 + [ -z "${token}" ] && fail "Unable to retrieve a token." && exit 1 done echo -if [ "${task_completed}" = "0" ] ; then - echo "ERROR: Unable to copy files from $DREVOPS_TASK_COPY_FILES_ACQUIA_SRC to $DREVOPS_TASK_COPY_FILES_ACQUIA_DST environment." +if [ "${task_completed}" = "0" ]; then + fail "Unable to copy files from ${DREVOPS_TASK_COPY_FILES_ACQUIA_SRC} to ${DREVOPS_TASK_COPY_FILES_ACQUIA_DST} environment." exit 1 fi -echo " > Successfully copied files from $DREVOPS_TASK_COPY_FILES_ACQUIA_SRC to $DREVOPS_TASK_COPY_FILES_ACQUIA_DST environment." +note "Copied files from ${DREVOPS_TASK_COPY_FILES_ACQUIA_SRC} to ${DREVOPS_TASK_COPY_FILES_ACQUIA_DST} environment." self_elapsed_time=$((SECONDS)) -echo " > Run duration: $((self_elapsed_time/60)) min $((self_elapsed_time%60)) sec." +note "Run duration: $((self_elapsed_time / 60)) min $((self_elapsed_time % 60)) sec." -echo "==> Finished files copying from between environments in Acquia." +pass "Finished files copying between environments in Acquia." diff --git a/scripts/drevops/task-custom-lagoon.sh b/scripts/drevops/task-custom-lagoon.sh index 2f88f9494..4d1aef728 100755 --- a/scripts/drevops/task-custom-lagoon.sh +++ b/scripts/drevops/task-custom-lagoon.sh @@ -3,14 +3,19 @@ # Run custom Lagoon task. # # @see https://github.com/amazeeio/lagoon-cli +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x -DREVOPS_TASK_LAGOON_NAME="${DREVOPS_TASK_LAGOON_NAME:-}" +# The task name. +DREVOPS_TASK_LAGOON_NAME="${DREVOPS_TASK_LAGOON_NAME:-Automation task}" # The Lagoon project to run tasks for. -DREVOPS_TASK_LAGOON_PROJECT="${DREVOPS_TASK_LAGOON_PROJECT:-}" +DREVOPS_TASK_LAGOON_PROJECT="${DREVOPS_TASK_LAGOON_PROJECT:-${LAGOON_PROJECT:-}}" # The Lagoon branch to run the task on. DREVOPS_TASK_LAGOON_BRANCH="${DREVOPS_TASK_LAGOON_BRANCH:-}" @@ -54,7 +59,14 @@ DREVOPS_TASK_LAGOON_LAGOONCLI_VERSION="${DREVOPS_TASK_LAGOON_LAGOONCLI_VERSION:- # ------------------------------------------------------------------------------ -echo "==> Started LAGOON task $DREVOPS_TASK_LAGOON_NAME." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started Lagoon task ${DREVOPS_TASK_LAGOON_NAME}." ## Check all required values. [ -z "${DREVOPS_TASK_LAGOON_NAME}" ] && echo "Missing required value for DREVOPS_TASK_LAGOON_NAME." && exit 1 @@ -63,47 +75,47 @@ echo "==> Started LAGOON task $DREVOPS_TASK_LAGOON_NAME." [ -z "${DREVOPS_TASK_LAGOON_PROJECT}" ] && echo "Missing required value for DREVOPS_TASK_LAGOON_PROJECT." && exit 1 # Use custom key if fingerprint is provided. -if [ -n "${DREVOPS_TASK_SSH_FINGERPRINT}" ]; then - echo " > Custom task key is provided." - DREVOPS_TASK_SSH_FILE="${DREVOPS_TASK_SSH_FINGERPRINT//:}" - DREVOPS_TASK_SSH_FILE="${HOME}/.ssh/id_rsa_${DREVOPS_TASK_SSH_FILE//\"}" +if [ -n "${DREVOPS_TASK_SSH_FINGERPRINT:-}" ]; then + note "Custom task key is provided." + DREVOPS_TASK_SSH_FILE="${DREVOPS_TASK_SSH_FINGERPRINT//:/}" + DREVOPS_TASK_SSH_FILE="${HOME}/.ssh/id_rsa_${DREVOPS_TASK_SSH_FILE//\"/}" fi -[ ! -f "${DREVOPS_TASK_SSH_FILE}" ] && echo "ERROR: SSH key file ${DREVOPS_TASK_SSH_FILE} does not exist." && exit 1 +[ ! -f "${DREVOPS_TASK_SSH_FILE:-}" ] && fail "SSH key file ${DREVOPS_TASK_SSH_FILE} does not exist." && exit 1 if ssh-add -l | grep -q "${DREVOPS_TASK_SSH_FILE}"; then - echo " > SSH agent has ${DREVOPS_TASK_SSH_FILE} key loaded." + note "SSH agent has ${DREVOPS_TASK_SSH_FILE} key loaded." else - echo " > SSH agent does not have default key loaded. Trying to load." + note "SSH agent does not have default key loaded. Trying to load." # Remove all other keys and add SSH key from provided fingerprint into SSH agent. - ssh-add -D > /dev/null + ssh-add -D >/dev/null ssh-add "${DREVOPS_TASK_SSH_FILE}" fi # Disable strict host key checking in CI. -[ -n "${CI}" ] && mkdir -p "${HOME}/.ssh/" && echo -e "\nHost *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null\n" >> "${HOME}/.ssh/config" +[ -n "${CI:-}" ] && mkdir -p "${HOME}/.ssh/" && echo -e "\nHost *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null\n" >>"${HOME}/.ssh/config" if ! command -v lagoon >/dev/null || [ -n "${DREVOPS_TASK_LAGOON_INSTALL_CLI_FORCE}" ]; then - echo " > Installing Lagoon CLI." + note "Installing Lagoon CLI." lagooncli_download_url="https://api.github.com/repos/uselagoon/lagoon-cli/releases/latest" if [ "${DREVOPS_TASK_LAGOON_LAGOONCLI_VERSION}" != "latest" ]; then lagooncli_download_url="https://api.github.com/repos/uselagoon/lagoon-cli/releases/tags/${DREVOPS_TASK_LAGOON_LAGOONCLI_VERSION}" fi - curl -sL "${lagooncli_download_url}" \ - | grep "browser_download_url" \ - | grep -i "$(uname -s)-amd64\"$" \ - | cut -d '"' -f 4 \ - | xargs curl -L -o "${DREVOPS_TASK_LAGOON_BIN_PATH}/lagoon" + curl -sL "${lagooncli_download_url}" | + grep "browser_download_url" | + grep -i "$(uname -s)-amd64\"$" | + cut -d '"' -f 4 | + xargs curl -L -o "${DREVOPS_TASK_LAGOON_BIN_PATH}/lagoon" chmod +x "${DREVOPS_TASK_LAGOON_BIN_PATH}/lagoon" export PATH="${PATH}:${DREVOPS_TASK_LAGOON_BIN_PATH}" fi -echo "==> Configuring Lagoon instance." +note "Configuring Lagoon instance." lagoon config add --force -l "${DREVOPS_TASK_LAGOON_INSTANCE}" -g "${DREVOPS_TASK_LAGOON_INSTANCE_GRAPHQL}" -H "${DREVOPS_TASK_LAGOON_INSTANCE_HOSTNAME}" -P "${DREVOPS_TASK_LAGOON_INSTANCE_PORT}" -echo " > Creating $DREVOPS_TASK_LAGOON_NAME task: project ${DREVOPS_TASK_LAGOON_PROJECT}, branch: ${DREVOPS_TASK_LAGOON_BRANCH}." +note "Creating ${DREVOPS_TASK_LAGOON_NAME} task: project ${DREVOPS_TASK_LAGOON_PROJECT}, branch: ${DREVOPS_TASK_LAGOON_BRANCH}." lagoon --force --skip-update-check -i "${DREVOPS_TASK_SSH_FILE}" -l "${DREVOPS_TASK_LAGOON_INSTANCE}" run custom -p "${DREVOPS_TASK_LAGOON_PROJECT}" -e "${DREVOPS_TASK_LAGOON_BRANCH}" -N "${DREVOPS_TASK_LAGOON_NAME}" -c "${DREVOPS_TASK_LAGOON_COMMAND}" -echo "==> Finished LAGOON task $DREVOPS_TASK_LAGOON_NAME." +pass "Finished Lagoon task ${DREVOPS_TASK_LAGOON_NAME}." diff --git a/scripts/drevops/task-purge-cache-acquia.sh b/scripts/drevops/task-purge-cache-acquia.sh index e18a7ef3a..3a1428c03 100755 --- a/scripts/drevops/task-purge-cache-acquia.sh +++ b/scripts/drevops/task-purge-cache-acquia.sh @@ -10,18 +10,22 @@ # Acquia Cloud UI -> Account -> API tokens -> Create Token # # @see https://cloudapi-docs.acquia.com/#/Environments/postEnvironmentsDomainsClearVarnish +# +# shellcheck disable=SC1090,SC1091 + +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Acquia Cloud API key. -DREVOPS_TASK_PURGE_CACHE_ACQUIA_KEY="${DREVOPS_TASK_PURGE_CACHE_ACQUIA_KEY:-${DREVOPS_ACQUIA_KEY}}" +DREVOPS_ACQUIA_KEY="${DREVOPS_ACQUIA_KEY:-${DREVOPS_ACQUIA_KEY}}" # Acquia Cloud API secret. -DREVOPS_TASK_PURGE_CACHE_ACQUIA_SECRET="${DREVOPS_TASK_PURGE_CACHE_ACQUIA_SECRET:-${DREVOPS_ACQUIA_SECRET}}" +DREVOPS_ACQUIA_SECRET="${DREVOPS_ACQUIA_SECRET:-${DREVOPS_ACQUIA_SECRET}}" # Application name. Used to discover UUID. -DREVOPS_TASK_PURGE_CACHE_ACQUIA_APP_NAME="${DREVOPS_TASK_PURGE_CACHE_ACQUIA_APP_NAME:-}" +DREVOPS_ACQUIA_APP_NAME="${DREVOPS_ACQUIA_APP_NAME:-}" # An environment name to purge cache for. DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV="${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV:-}" @@ -38,13 +42,20 @@ DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_INTERVAL="${DREVOPS_TASK_PURGE_CACHE_ACQU #------------------------------------------------------------------------------- -echo "==> Started cache purging in Acquia." +# @formatter:off +note() { printf " %s\n" "${1}"; } +info() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[34m[INFO] %s\033[0m\n" "${1}" || printf "[INFO] %s\n" "${1}"; } +pass() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[32m[ OK ] %s\033[0m\n" "${1}" || printf "[ OK ] %s\n" "${1}"; } +fail() { [ "${TERM:-}" != "dumb" ] && tput colors >/dev/null 2>&1 && printf "\033[31m[FAIL] %s\033[0m\n" "${1}" || printf "[FAIL] %s\n" "${1}"; } +# @formatter:on + +info "Started cache purging in Acquia." # # Extract last value from JSON object passed via STDIN. # extract_json_last_value() { - local key=$1 + local key="${1}" php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); \$last=array_pop(\$data); isset(\$last[\"${key}\"]) ? print trim(json_encode(\$last[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" } @@ -52,116 +63,115 @@ extract_json_last_value() { # Extract keyed value from JSON object passed via STDIN. # extract_json_value() { - local key=$1 + local key="${1}" php -r "\$data=json_decode(file_get_contents('php://stdin'), TRUE); isset(\$data[\"${key}\"]) ? print trim(json_encode(\$data[\"${key}\"], JSON_UNESCAPED_SLASHES), '\"') : exit(1);" } # Pre-flight checks. -command -v curl > /dev/null || ( echo "ERROR: curl command is not available." && exit 1 ) +command -v curl >/dev/null || (fail "curl command is not available." && exit 1) # Check that all required variables are present. -[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_KEY}" ] && echo "ERROR: Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_KEY." && exit 1 -[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_SECRET}" ] && echo "ERROR: Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_SECRET." && exit 1 -[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_APP_NAME}" ] && echo "ERROR: Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_APP_NAME." && exit 1 -[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV}" ] && echo "ERROR: Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV." && exit 1 -[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_DOMAINS_FILE}" ] && echo "ERROR: Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_DOMAINS_FILE." && exit 1 -[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_RETRIES}" ] && echo "ERROR: Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_RETRIES." && exit 1 -[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_INTERVAL}" ] && echo "ERROR: Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_INTERVAL." && exit 1 - -echo " > Retrieving authentication token." -token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_TASK_PURGE_CACHE_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_TASK_PURGE_CACHE_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") +[ -z "${DREVOPS_ACQUIA_KEY}" ] && fail "Missing value for DREVOPS_ACQUIA_KEY." && exit 1 +[ -z "${DREVOPS_ACQUIA_SECRET}" ] && fail "Missing value for DREVOPS_ACQUIA_SECRET." && exit 1 +[ -z "${DREVOPS_ACQUIA_APP_NAME}" ] && fail "Missing value for DREVOPS_ACQUIA_APP_NAME." && exit 1 +[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV}" ] && fail "Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV." && exit 1 +[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_DOMAINS_FILE}" ] && fail "Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_DOMAINS_FILE." && exit 1 +[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_RETRIES}" ] && fail "Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_RETRIES." && exit 1 +[ -z "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_INTERVAL}" ] && fail "Missing value for DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_INTERVAL." && exit 1 + +note "Retrieving authentication token." +token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") token=$(echo "${token_json}" | extract_json_value "access_token") -[ -z "${token}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 +[ -z "${token}" ] && fail "Unable to retrieve a token." && exit 1 -echo " > Retrieving ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_APP_NAME} application UUID." -app_uuid_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/applications?filter=name%3D${DREVOPS_TASK_PURGE_CACHE_ACQUIA_APP_NAME/ /%20}") +note "Retrieving ${DREVOPS_ACQUIA_APP_NAME} application UUID." +app_uuid_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/applications?filter=name%3D${DREVOPS_ACQUIA_APP_NAME/ /%20}") app_uuid=$(echo "${app_uuid_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "uuid") -[ -z "${app_uuid}" ] && echo "ERROR: Unable to retrieve an environment UUID." && exit 1 +[ -z "${app_uuid}" ] && fail "Unable to retrieve an environment UUID." && exit 1 -echo " > Retrieving environment ID." -envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV}") +note "Retrieving environment ID." +envs_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "https://cloud.acquia.com/api/applications/${app_uuid}/environments?filter=name%3D${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV}") ENV_ID=$(echo "${envs_json}" | extract_json_value "_embedded" | extract_json_value "items" | extract_json_last_value "id") -[ -z "${ENV_ID}" ] && echo "ERROR: Unable to retrieve environment ID." && exit 1 +[ -z "${ENV_ID}" ] && fail "Unable to retrieve environment ID." && exit 1 -echo " > Compiling a list of domains." +note "Compiling a list of domains." target_env="${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV}" domain_list=() while read -r domain; do # Special variable to remap target env to the sub-domain prefix based on UI name. - target_env_remap="${target_env}" + TARGET_ENV_REMAP="${target_env}" # Strip placeholder for PROD environment. - if [ "${target_env}" = "prod" ] ; then + if [ "${target_env}" = "prod" ]; then domain="${domain//\$target_env_remap./}" domain="${domain//\$target_env./}" fi # Re-map 'test' to 'stage' as seen in UI. - if [ "${target_env}" = "test" ] ; then - target_env_remap=stage + if [ "${target_env}" = "test" ]; then + TARGET_ENV_REMAP=stage fi # Disable replacement for unknown environments. if [ "${target_env}" != "dev" ] && [ "${target_env}" != "test" ] && [ "${target_env}" != "test2" ] && [ "${target_env}" != "prod" ]; then - target_env_remap="" + TARGET_ENV_REMAP="" fi # Proceed only if the environment was provided. - if [ "${target_env_remap}" != "" ] ; then + if [ "${TARGET_ENV_REMAP}" != "" ]; then # Interpolate variables in domain name. domain="$(eval echo "${domain}")" # Add domain to list. domain_list+=("${domain}") fi -done < "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_DOMAINS_FILE}" +done <"${DREVOPS_TASK_PURGE_CACHE_ACQUIA_DOMAINS_FILE}" if [ "${#domain_list[@]}" -gt 0 ]; then # Acquia API stops clearing purging caches if at least 1 domain fails, so # we are clearing caches for every domain separately and not failing if # the domain is not found. for domain in "${domain_list[@]}"; do - echo " > Purging cache for ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV} environment domain ${domain}." - task_status_json=$(curl -X POST -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" -H "Content-Type: application/json" -d "{\"domains\":[\"${domain}\"]}" "https://cloud.acquia.com/api/environments/${ENV_ID}/domains/actions/clear-varnish") + note "Purging cache for ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV} environment domain ${domain}." + task_status_json=$(curl -X POST -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" -H "Content-Type: application/json" -d "{\"domains\":[\"${domain}\"]}" "https://cloud.acquia.com/api/environments/${ENV_ID}/domains/actions/clear-varnish") notification_url=$(echo "${task_status_json}" | extract_json_value "_links" | extract_json_value "notification" | extract_json_value "href") || true # If domain does not exist - notification will be empty; we are skipping # non-existing domains without a failure. if [ "${notification_url}" = "" ]; then - echo " > Warning: Unable to purge cache for ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV} environment domain ${domain} as it does not exist." - break; + note "Warning: Unable to purge cache for ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV} environment domain ${domain} as it does not exist." + break fi - echo -n " > Checking task status: " + echo -n " > Checking task status: " task_completed=0 # shellcheck disable=SC2034 - for i in $(seq 1 "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_RETRIES}"); - do + for i in $(seq 1 "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_RETRIES}"); do echo -n "." sleep "${DREVOPS_TASK_PURGE_CACHE_ACQUIA_STATUS_INTERVAL}" - task_status_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer $token" "${notification_url}") - task_state=$(echo "$task_status_json" | extract_json_value "status") - if [ "$task_state" = "completed" ]; then - echo " > Successfully purged cache for ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV} environment domain ${domain}." - task_completed=1; - break 1; + task_status_json=$(curl -s -L -H 'Accept: application/json, version=2' -H "Authorization: Bearer ${token}" "${notification_url}") + task_state=$(echo "${task_status_json}" | extract_json_value "status") + if [ "${task_state}" = "completed" ]; then + note "Purged cache for ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV} environment domain ${domain}." + task_completed=1 + break 1 fi - echo " > Retrieving authentication token." - token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_TASK_PURGE_CACHE_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_TASK_PURGE_CACHE_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") + note "Retrieving authentication token." + token_json=$(curl -s -L https://accounts.acquia.com/api/auth/oauth/token --data-urlencode "client_id=${DREVOPS_ACQUIA_KEY}" --data-urlencode "client_secret=${DREVOPS_ACQUIA_SECRET}" --data-urlencode "grant_type=client_credentials") token=$(echo "${token_json}" | extract_json_value "access_token") - [ -z "${token}" ] && echo "ERROR: Unable to retrieve a token." && exit 1 + [ -z "${token}" ] && fail "Unable to retrieve a token." && exit 1 done echo - if [ "${task_completed}" = "0" ] ; then - echo " > Warning: Unable to purge cache for ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV} environment domain ${domain}." + if [ "${task_completed}" = "0" ]; then + note "Warning: Unable to purge cache for ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV} environment domain ${domain}." fi - done; + done else - echo " > Unable to find domains to purge cache for ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV} environment." + note "Unable to find domains to purge cache for ${DREVOPS_TASK_PURGE_CACHE_ACQUIA_ENV} environment." fi self_elapsed_time=$((SECONDS)) -echo " > Run duration: $((self_elapsed_time/60)) min $((self_elapsed_time%60)) sec." +note "Run duration: $((self_elapsed_time / 60)) min $((self_elapsed_time % 60)) sec." -echo "==> Finished cache purging in Acquia." +pass "Finished cache purging in Acquia." diff --git a/scripts/drevops/test.sh b/scripts/drevops/test.sh deleted file mode 100755 index 422fe076f..000000000 --- a/scripts/drevops/test.sh +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env bash -# shellcheck disable=SC2086 -# shellcheck disable=SC2015 -## -# Run tests. -# -# Usage: -# Run all tests: -# ./test.sh -# -# Run unit tests: -# DREVOPS_TEST_TYPE=unit ./test.sh -# -# Run kernel tests: -# DREVOPS_TEST_TYPE=kernel ./test.sh -# -# Run functional tests: -# DREVOPS_TEST_TYPE=functional ./test.sh -# -# Run bdd tests: -# DREVOPS_TEST_TYPE=bdd ./test.sh -# -# Run specific tags (eg: content_type) bdd tests: -# DREVOPS_TEST_TYPE=bdd DREVOPS_TEST_BEHAT_TAGS=content_type ./test.sh - -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x - -# Flag to allow Unit tests to fail. -DREVOPS_TEST_UNIT_ALLOW_FAILURE="${DREVOPS_TEST_UNIT_ALLOW_FAILURE:-0}" - -# Group to run Unit tests. -DREVOPS_TEST_UNIT_GROUP="${DREVOPS_TEST_UNIT_GROUP:-site:unit}" - -# Flag to allow Kernel tests to fail. -DREVOPS_TEST_KERNEL_ALLOW_FAILURE="${DREVOPS_TEST_KERNEL_ALLOW_FAILURE:-0}" - -# Group to run Kernel tests. -DREVOPS_TEST_KERNEL_GROUP="${DREVOPS_TEST_KERNEL_GROUP:-site:kernel}" - -# Flag to allow Functional tests to fail. -DREVOPS_TEST_FUNCTIONAL_ALLOW_FAILURE="${DREVOPS_TEST_FUNCTIONAL_ALLOW_FAILURE:-0}" - -# Group to run Functional tests. -DREVOPS_TEST_FUNCTIONAL_GROUP="${DREVOPS_TEST_FUNCTIONAL_GROUP:-site:functional}" - -# Flag to allow BDD tests to fail. -DREVOPS_TEST_BDD_ALLOW_FAILURE="${DREVOPS_TEST_BDD_ALLOW_FAILURE:-0}" - -# Directory to store test result files. -DREVOPS_TEST_REPORTS_DIR="${DREVOPS_TEST_REPORTS_DIR:-}" - -# Directory to store test artifact files. -DREVOPS_TEST_ARTIFACT_DIR="${DREVOPS_TEST_ARTIFACT_DIR:-}" - -# Behat profile name. Optional. Defaults to "default". -DREVOPS_TEST_BEHAT_PROFILE="${DREVOPS_TEST_BEHAT_PROFILE:-default}" - -# Behat format. Optional. Defaults to "pretty". -DREVOPS_TEST_BEHAT_FORMAT="${DREVOPS_TEST_BEHAT_FORMAT:-pretty}" - -# Behat tags. Optional. Default runs all tests. -DREVOPS_TEST_BEHAT_TAGS="${DREVOPS_TEST_BEHAT_TAGS:-}" - -# Behat test runner index. If is set - the value is used as a suffix for the -# parallel Behat profile name (e.g., p0, p1). -DREVOPS_TEST_BEHAT_PARALLEL_INDEX="${DREVOPS_TEST_BEHAT_PARALLEL_INDEX:-}" - -# ------------------------------------------------------------------------------ - -# Get test type or fallback to defaults. -DREVOPS_TEST_TYPE="${DREVOPS_TEST_TYPE:-unit-kernel-functional-bdd}" - -# Create test reports and artifact directories. -[ -n "${DREVOPS_TEST_REPORTS_DIR}" ] && mkdir -p "${DREVOPS_TEST_REPORTS_DIR}" -[ -n "${DREVOPS_TEST_ARTIFACT_DIR}" ] && mkdir -p "${DREVOPS_TEST_ARTIFACT_DIR}" - -if [ -z "${DREVOPS_TEST_TYPE##*fe*}" ] && [ -n "${DREVOPS_DRUPAL_THEME}" ]; then - echo "==> Run front-end tests." - if [ -d "docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}/civictheme_library/node_modules" ]; then - npm run --prefix "docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}/civictheme_library" test || \ - [ "${DREVOPS_TEST_FE_ALLOW_FAILURE}" -eq 1 ] - fi -else - echo "==> Skipped front-end tests." -fi - -if [ ! -d "/app/vendor" ]; then - echo "==> Skipped PHP tests." - exit 0 -fi - -if [ -z "${DREVOPS_TEST_TYPE##*unit*}" ]; then - echo "==> Run unit tests." - - # Generic tests that do not require Drupal bootstrap. - phpunit_opts=() - [ -n "${DREVOPS_TEST_REPORTS_DIR}" ] && phpunit_opts+=(--log-junit "${DREVOPS_TEST_REPORTS_DIR}"/phpunit/unit.xml) - vendor/bin/phpunit "${phpunit_opts[@]:-}" tests/phpunit --group "${DREVOPS_TEST_UNIT_GROUP}" "$@" \ - || [ "${DREVOPS_TEST_UNIT_ALLOW_FAILURE}" -eq 1 ] - - # Custom modules tests that require Drupal bootstrap. - phpunit_opts=(-c /app/docroot/core/phpunit.xml.dist) - [ -n "${DREVOPS_TEST_REPORTS_DIR}" ] && phpunit_opts+=(--log-junit "${DREVOPS_TEST_REPORTS_DIR}"/phpunit/unit_modules.xml) - vendor/bin/phpunit "${phpunit_opts[@]}" docroot/modules/custom --group "${DREVOPS_TEST_UNIT_GROUP}" "$@" \ - || [ "${DREVOPS_TEST_UNIT_ALLOW_FAILURE}" -eq 1 ] - - # Custom theme tests that require Drupal bootstrap. - if [ -n "${DREVOPS_DRUPAL_THEME}" ]; then - phpunit_opts=(-c /app/docroot/core/phpunit.xml.dist) - [ -n "${DREVOPS_TEST_REPORTS_DIR}" ] && phpunit_opts+=(--log-junit "${DREVOPS_TEST_REPORTS_DIR}"/phpunit/unit_themes.xml) - vendor/bin/phpunit "${phpunit_opts[@]}" "docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}" --group "${DREVOPS_TEST_UNIT_GROUP}" "$@" \ - || [ "${DREVOPS_TEST_UNIT_ALLOW_FAILURE}" -eq 1 ] - fi -fi - -if [ -z "${DREVOPS_TEST_TYPE##*kernel*}" ]; then - echo "==> Run Kernel tests" - - phpunit_opts=(-c /app/docroot/core/phpunit.xml.dist) - [ -n "${DREVOPS_TEST_REPORTS_DIR}" ] && phpunit_opts+=(--log-junit "${DREVOPS_TEST_REPORTS_DIR}"/phpunit/kernel.xml) - - vendor/bin/phpunit "${phpunit_opts[@]}" docroot/modules/custom --group "${DREVOPS_TEST_KERNEL_GROUP}" "$@" \ - || [ "${DREVOPS_TEST_KERNEL_ALLOW_FAILURE:-0}" -eq 1 ] -fi - -if [ -z "${DREVOPS_TEST_TYPE##*functional*}" ]; then - echo "==> Run Functional tests" - - phpunit_opts=(-c /app/docroot/core/phpunit.xml.dist) - [ -n "${DREVOPS_TEST_REPORTS_DIR}" ] && phpunit_opts+=(--log-junit "${DREVOPS_TEST_REPORTS_DIR}"/phpunit/functional.xml) - - vendor/bin/phpunit "${phpunit_opts[@]}" docroot/modules/custom --group "${DREVOPS_TEST_FUNCTIONAL_GROUP}" "$@" \ - || [ "${DREVOPS_TEST_FUNCTIONAL_ALLOW_FAILURE:-0}" -eq 1 ] - - if [ -n "${DREVOPS_DRUPAL_THEME}" ]; then - vendor/bin/phpunit "${phpunit_opts[@]}" "docroot/themes/contrib/${DREVOPS_DRUPAL_THEME}" --group "${DREVOPS_TEST_FUNCTIONAL_GROUP}" "$@" \ - || [ "${DREVOPS_TEST_FUNCTIONAL_ALLOW_FAILURE:-0}" -eq 1 ] - fi -fi - -if [ -z "${DREVOPS_TEST_TYPE##*bdd*}" ]; then - echo "==> Run BDD tests." - - # Use parallel Behat profile if using more than a single node to run tests. - if [ -n "${DREVOPS_TEST_BEHAT_PARALLEL_INDEX}" ] ; then - DREVOPS_TEST_BEHAT_PROFILE="${DREVOPS_TEST_BEHAT_PROFILE:-p}${DREVOPS_TEST_BEHAT_PARALLEL_INDEX}" - echo "==> Running using profile \"${DREVOPS_TEST_BEHAT_PROFILE}\"." - fi - - [ -n "${DREVOPS_TEST_ARTIFACT_DIR}" ] && export BEHAT_SCREENSHOT_DIR="${DREVOPS_TEST_ARTIFACT_DIR}/screenshots" - - behat_opts=( - --strict - --colors - --profile="${DREVOPS_TEST_BEHAT_PROFILE}" - --format="${DREVOPS_TEST_BEHAT_FORMAT}" - --out std - ) - - # Run specific Behat tests. - if [ -n "${DREVOPS_TEST_BEHAT_TAGS}" ]; then - behat_opts+=(--tags=${DREVOPS_TEST_BEHAT_TAGS}) - fi - - [ -n "${DREVOPS_TEST_REPORTS_DIR}" ] && behat_opts+=(--format "junit" --out "${DREVOPS_TEST_REPORTS_DIR}"/behat) - - vendor/bin/behat "${behat_opts[@]}" "$@" \ - || ( [ -n "${CI}" ] && vendor/bin/behat "${behat_opts[@]}" --rerun "$@" ) \ - || [ "${DREVOPS_TEST_BDD_ALLOW_FAILURE}" -eq 1 ] -fi diff --git a/scripts/drevops/update.sh b/scripts/drevops/update-drevops.sh similarity index 55% rename from scripts/drevops/update.sh rename to scripts/drevops/update-drevops.sh index badad3a5b..e6a7393bb 100755 --- a/scripts/drevops/update.sh +++ b/scripts/drevops/update-drevops.sh @@ -2,23 +2,28 @@ ## # Update DrevOps. # +# shellcheck disable=SC1090,SC1091 -set -e -[ -n "${DREVOPS_DEBUG}" ] && set -x +t=$(mktemp) && export -p >"${t}" && set -a && . ./.env && if [ -f ./.env.local ]; then . ./.env.local; fi && set +a && . "${t}" && rm "${t}" && unset t + +set -eu +[ "${DREVOPS_DEBUG-}" = "1" ] && set -x # Re-export variables only from .env to ignore any local overrides in .env.local. # shellcheck disable=SC1091 set -a && . ./.env && set +a +# Allow providing custom DrevOps commit hash to download the sources from. +DREVOPS_INSTALL_COMMIT="${DREVOPS_INSTALL_COMMIT:-${1:-}}" + # The URL of the installer script. DREVOPS_INSTALLER_URL="${DREVOPS_INSTALLER_URL:-https://install.drevops.com}" -# Allow providing custom DrevOps commit hash to download the sources from. -DREVOPS_INSTALL_COMMIT="${DREVOPS_INSTALL_COMMIT:-}" - # ------------------------------------------------------------------------------ export DREVOPS_INSTALLER_URL export DREVOPS_INSTALL_COMMIT -curl -L "${DREVOPS_INSTALLER_URL}"?"$(date +%s)" > /tmp/install.php && php /tmp/install.php --quiet; rm /tmp/install.php; +curl -L "${DREVOPS_INSTALLER_URL}"?"$(date +%s)" >/tmp/install +php /tmp/install --quiet +rm /tmp/install >/dev/null diff --git a/scripts/lint-spelling.sh b/scripts/lint-spelling.sh index 904923dcc..deb86d040 100755 --- a/scripts/lint-spelling.sh +++ b/scripts/lint-spelling.sh @@ -16,8 +16,8 @@ while IFS= read -r -d $'\0'; do targets+=("$REPLY") done < <( find \ - "${CUR_DIR}"/docroot/themes/contrib/civictheme/docs \ - "${CUR_DIR}"/docroot/themes/contrib/civictheme/civictheme_library/docs \ + "${CUR_DIR}"/web/themes/contrib/civictheme/docs \ + "${CUR_DIR}"/web/themes/contrib/civictheme/civictheme_library/docs \ -type f \ \( -name "*.md" \) \ -not -path "*vendor*" \ diff --git a/scripts/lint-theme-config.sh b/scripts/lint-theme-config.sh index fd8446a2c..e35473db3 100755 --- a/scripts/lint-theme-config.sh +++ b/scripts/lint-theme-config.sh @@ -7,7 +7,7 @@ set -e [ -n "${DREVOPS_DEBUG}" ] && set -x # Theme dir. -THEME_DIR="docroot/themes/contrib/civictheme" +THEME_DIR="web/themes/contrib/civictheme" # Config file patterns whose config may change. DIFF_EXCLUDE_PATTERNS=( diff --git a/scripts/test-tooling.sh b/scripts/test-tooling.sh index 0c4e4fee7..3bac8b0a4 100755 --- a/scripts/test-tooling.sh +++ b/scripts/test-tooling.sh @@ -6,14 +6,7 @@ set -e [ -n "${DREVOPS_DEBUG}" ] && set -x -echo "==> Test BATS helpers." -bats tests/bats/helpers.bats --tap - -echo "==> Test BATS mock." -bats tests/bats/mock.bats --tap - -echo "==> Test Assets mock." -bats tests/bats/assets.bats --tap +[ ! -d "tests/bats/node_modules" ] && npm --prefix tests/bats ci if [ "${CIVICTHEME_LIBRARY_INSTALL_SKIP}" != "1" ]; then echo " > Test Library assets." diff --git a/scripts/update-default-content.sh b/scripts/update-default-content.sh index cee14f23d..b93c72e1a 100755 --- a/scripts/update-default-content.sh +++ b/scripts/update-default-content.sh @@ -22,7 +22,7 @@ echo " > Removing users." drush entity:delete user echo " > Removing existing content files." -rm -Rf "docroot/modules/custom/civictheme_content/modules/civictheme_content_${CIVICTHEME_CONTENT_PROFILE}/content/"* || true +rm -Rf "web/modules/custom/civictheme_content/modules/civictheme_content_${CIVICTHEME_CONTENT_PROFILE}/content/"* || true echo " > Exporting content." drush dcer --folder="modules/custom/civictheme_content/modules/civictheme_content_${CIVICTHEME_CONTENT_PROFILE}/content" taxonomy_term diff --git a/scripts/update-theme-config.sh b/scripts/update-theme-config.sh index 87c6c28a4..3d2c72eba 100755 --- a/scripts/update-theme-config.sh +++ b/scripts/update-theme-config.sh @@ -16,7 +16,7 @@ set -e EXCLUDED_CONFIGS_FILE="scripts/theme_excluded_configs.txt" # Theme info file. -THEME_INFO="docroot/themes/contrib/civictheme/civictheme.info.yml" +THEME_INFO="web/themes/contrib/civictheme/civictheme.info.yml" # Temp dir. TMP_DIR="/tmp/civictheme" diff --git a/tests/bats/.gitignore b/tests/bats/.gitignore new file mode 100644 index 000000000..7b8ee9db2 --- /dev/null +++ b/tests/bats/.gitignore @@ -0,0 +1,2 @@ +node_modules +!package-lock.json diff --git a/tests/bats/_helper.bash b/tests/bats/_helper.bash index 7af75ab23..a70133df1 100644 --- a/tests/bats/_helper.bash +++ b/tests/bats/_helper.bash @@ -1,505 +1,37 @@ #!/usr/bin/env bash -## -# @file -# Bats test helpers. # -# shellcheck disable=SC2119,SC2120,SC2044 - -# Guard against bats executing this twice -if [ -z "$TEST_PATH_INITIALIZED" ]; then - export TEST_PATH_INITIALIZED=true - - # Add BATS test directory to the PATH. - PATH="$(dirname "${BATS_TEST_DIRNAME}"):$PATH" - - # BATS_TMPDIR - the location to a directory that may be used to store - # temporary files. Provided by bats. Created once for the duration of whole - # suite run. - # Do not use BATS_TMPDIR, instead use BATS_TEST_TMPDIR. - # - # BATS_TEST_TMPDIR - unique location for temp files per test. - # shellcheck disable=SC2002 - random_suffix=$(cat /dev/urandom | env LC_CTYPE=C tr -dc 'a-zA-Z0-9' | fold -w 4 | head -n 1) - BATS_TEST_TMPDIR="${BATS_TMPDIR}/bats-test-tmp-${random_suffix}" - [ -d "${BATS_TEST_TMPDIR}" ] && rm -Rf "${BATS_TEST_TMPDIR}" >/dev/null - mkdir -p "${BATS_TEST_TMPDIR}" - - export BATS_TEST_TMPDIR - - echo "BATS_TEST_TMPDIR dir: ${BATS_TEST_TMPDIR}" >&3 -fi - -flunk() { - { - if [ "$#" -eq 0 ]; then - cat - - else - echo "$@" - fi - } | sed "s:${BATS_TEST_TMPDIR}:\${BATS_TEST_TMPDIR}:g" >&2 - return 1 -} - -assert_success() { - # shellcheck disable=SC2154 - if [ "${status}" -ne 0 ]; then - format_error "command failed with exit status ${status}" | flunk - elif [ "$#" -gt 0 ]; then - assert_output "${1}" - fi -} - -assert_failure() { - # shellcheck disable=SC2154 - if [ "${status}" -eq 0 ]; then - format_error "expected failed exit status" | flunk - elif [ "$#" -gt 0 ]; then - assert_output "${1}" - fi -} - -assert_equal() { - if [ "$1" != "$2" ]; then - { - echo "expected: ${1}" - echo "actual: ${2}" - } | flunk - fi -} - -assert_contains() { - local needle="${1}" - local haystack="${2}" - - if echo "$haystack" | $(type -p ggrep grep | head -1) -i -F -- "$needle" >/dev/null; then - return 0 - else - format_error "String '${haystack}' does not contain '${needle}'" | flunk - fi -} - -assert_not_contains() { - local needle="${1}" - local haystack="${2}" - - if echo "$haystack" | $(type -p ggrep grep | head -1) -i -F -- "$needle" >/dev/null; then - format_error "String '${haystack}' contains '${needle}', but should not" | flunk - else - return 0 - fi -} - -assert_file_exists() { - local file="${1}" - - for f in ${file}; do - if [ -e "$f" ]; then - return 0 - else - format_error "File ${file} does not exist" | flunk - fi - ## This is all we needed to know, so we can break after the first iteration. - break - done - - format_error "File ${file} does not exist" | flunk -} - -assert_file_not_exists() { - local file="${1}" - - for f in ${file}; do - if [ -e "$f" ]; then - format_error "File ${file} exists, but should not" | flunk - else - return 0 - fi - done -} - -assert_dir_exists() { - local dir="${1}" - - if [ -d "${dir}" ]; then - return 0 - else - format_error "Directory ${dir} does not exist" | flunk - fi -} - -assert_dir_not_exists() { - local dir="${1:-$(pwd)}" - - if [ -d "${dir}" ]; then - format_error "Directory ${dir} exists, but should not" | flunk - else - return 0 - fi -} - -assert_dir_empty() { - local dir="${1:-$(pwd)}" - assert_dir_exists "${dir}" || return 1 - - if [ "$(ls -A "${dir}")" ]; then - format_error "Directory ${dir} is not empty, but should be" | flunk - else - return 0 - fi -} - -assert_dir_not_empty() { - local dir="${1:-$(pwd)}" - assert_dir_exists "${dir}" - - if [ "$(ls -A "${dir}")" ]; then - return 0 - else - format_error "Directory ${dir} is empty, but should not be" | flunk - fi -} - -assert_symlink_exists() { - local file="${1}" - - if [ ! -h "${file}" ] && [ -f "${file}" ]; then - format_error "Regular file ${file} exists, but symlink is expected" | flunk - elif [ ! -h "${file}" ]; then - format_error "Symlink ${file} does not exist" | flunk - else - return 0 - fi -} - -assert_symlink_not_exists() { - local file="${1}" - - if [ ! -h "${file}" ] && [ -f "${file}" ]; then - return 0 - elif [ ! -h "${file}" ]; then - return 0 - else - format_error "Symlink ${file} exists, but should not" | flunk - fi -} - -assert_file_mode() { - local file="${1}" - local perm="${2}" - assert_file_exists "${file}" - - if [ "$(uname)" == "Darwin" ]; then - parsed=$(printf "%.3o\n" $(($(stat -f '0%Lp' "$file") & ~0022))) - else - parsed=$(printf "%.3o\n" $(($(stat --printf '0%a' "$file") & ~0022))) - fi - - if [ "${parsed}" != "${perm}" ]; then - format_error "File permissions for file ${file} is '${parsed}', but expected '${perm}'" | flunk - else - return 0 - fi -} - -assert_file_contains() { - local file="${1}" - local string="${2}" - assert_file_exists "${file}" - - contents="$(cat "${file}")" - assert_contains "${string}" "${contents}" -} - -assert_file_not_contains() { - local file="${1}" - local string="${2}" - - [ ! -f "${file}" ] && return 0 - - contents="$(cat "${file}")" - assert_not_contains "${string}" "${contents}" -} - -assert_dir_contains_string() { - local dir="${1}" - local string="${2}" - - assert_dir_exists "${dir}" || return 1 - - if grep -rI --exclude-dir=".git" --exclude-dir=".idea" --exclude-dir="vendor" --exclude-dir="node_modules" --exclude-dir=".data" -l "${string}" "${dir}"; then - return 0 - else - format_error "Directory ${dir} does not contain a string '${string}'" | flunk - fi -} - -assert_dir_not_contains_string() { - local dir="${1}" - local string="${2}" - - [ ! -d "${dir}" ] && return 0 - - if grep -rI --exclude-dir=".git" --exclude-dir=".idea" --exclude-dir="vendor" --exclude-dir="node_modules" --exclude-dir=".data" -l "${string}" "${dir}"; then - format_error "Directory ${dir} contains string '${string}', but should not" | flunk - else - return 0 - fi -} - -assert_git_repo() { - local dir="${1:-$(pwd)}" - - assert_dir_exists "${dir}" || return 1 - - if [ -d "${dir}/.git" ]; then - log=$(git --work-tree="${dir}" --git-dir="${dir}/.git" status 2>&1) - - if echo "${log}" | $(type -p ggrep grep | head -1) -i -F -- "not a git repository" >/dev/null; then - format_error "Directory ${dir} exists, but it is not a git repository" - return 1 - fi - - return 0 - else - format_error "Directory ${dir} exists, but it is not a git repository" | flunk - fi -} - -assert_not_git_repo() { - local dir="${1:-$(pwd)}" - - assert_dir_exists "${dir}" || return 1 - - if [ -d "${dir}/.git" ]; then - format_error "Directory ${dir} exists and it is a git repository, but should not be" | flunk - else - return 0 - fi -} - -assert_git_clean() { - local dir="${1:-$(pwd)}" - local message - - assert_git_repo "${dir}" - - message="$(git --work-tree="${dir}" --git-dir="${dir}/.git" status)" - assert_contains "nothing to commit" "${message}" -} - -assert_git_not_clean() { - local dir="${1:-$(pwd)}" - local message - - assert_git_repo "${dir}" - - message="$(git --work-tree="${dir}" --git-dir="${dir}/.git" status)" - assert_not_contains "nothing to commit" "${message}" -} - -assert_git_file_is_tracked() { - local file="${1:-}" - local dir="${2:-$(pwd)}" - - if [ ! -d "${dir}/.git" ]; then - return 1 - fi - - git --work-tree="${dir}" --git-dir="${dir}/.git" ls-files --error-unmatch "${1}" &>/dev/null - return $? -} - -assert_git_file_is_not_tracked() { - local file="${1:-}" - local dir="${2:-$(pwd)}" - - if [ ! -d "${dir}/.git" ]; then - return 1 - fi - - if git --work-tree="${dir}" --git-dir="${dir}/.git" ls-files --error-unmatch "${1}" &>/dev/null; then - return 1 - else - return 0 - fi -} - -assert_files_equal() { - local file1="${1}" - local file2="${2}" - - assert_file_exists "${file1}" || return 1 - assert_file_exists "${file2}" || return 1 - - if cmp "${file1}" "${file2}"; then - return 0 - else - format_error "File ${file1} is not equal to file ${file2}" | flunk - fi -} - -assert_files_not_equal() { - local file1="${1}" - local file2="${2}" - - assert_file_exists "${file1}" || return 1 - assert_file_exists "${file2}" || return 1 - - if cmp "${file1}" "${file2}"; then - format_error "File ${file1} is equal to file ${file2}, but it should not be" | flunk - else - return 0 - fi -} - -assert_dirs_equal() { - local dir1="${1}" - local dir2="${2}" - - assert_dir_exists "${dir1}" || return 1 - assert_dir_exists "${dir2}" || return 1 - - for file in $(find "${dir1}/" -type f); do - assert_files_equal "${file}" "${file/${dir1}/${dir2}}" || return 1 - done +# Helpers related to common testing functionality. +# +# Run with "--verbose-run" to see debug output. +# - for file in $(find "${dir2}/" -type f); do - assert_files_equal "${file}" "${file/${dir2}/${dir1}}" || return 1 - done +################################################################################ +# BATS HOOK IMPLEMENTATIONS # +################################################################################ - return 0 -} +setup() { + # For a list of available variables see: + # @see https://bats-core.readthedocs.io/en/stable/writing-tests.html#special-variables -assert_empty() { - if [ "${1}" == "" ]; then - return 0 - else - format_error "String ${1} is not empty, but should be" | flunk - fi -} + # Register a path to libraries. + export BATS_LIB_PATH="${BATS_TEST_DIRNAME}/node_modules" -assert_not_empty() { - if [ "${1}" == "" ]; then - format_error "String ${1} is empty, but should not be" | flunk - else - return 0 - fi -} + # Load 'bats-helpers' library. + bats_load_library bats-helpers -assert_output() { - local expected - if [ $# -eq 0 ]; then - expected="$(cat -)" - else - expected="${1}" - fi - # shellcheck disable=SC2154 - assert_equal "${expected}" "${output}" -} + # Setup command mocking. + setup_mock -assert_output_contains() { - local expected - if [ $# -eq 0 ]; then - expected="$(cat -)" - else - expected="${1}" - fi - # shellcheck disable=SC2154 - assert_contains "${expected}" "${output}" -} + # Current directory where the test is run from. + # shellcheck disable=SC2155 + export CUR_DIR="$(pwd)" -assert_output_not_contains() { - local expected - if [ $# -eq 0 ]; then - expected="$(cat -)" - else - expected="${1}" + # Print debug information if "--verbose-run" is passed. + # LCOV_EXCL_START + if [ "${BATS_VERBOSE_RUN-}" = "1" ]; then + echo "BUILD_DIR: ${BUILD_DIR}" >&3 fi - # shellcheck disable=SC2154 - assert_not_contains "${expected}" "${output}" -} - -prepare_git_config() { - [ "$(git config --global user.name)" = "" ] && echo "==> Configuring global git user name." && git config --global user.name "Some User" || true - [ "$(git config --global user.email)" = "" ] && echo "==> Configuring global git user email." && git config --global user.email "some.user@example.com" || true -} - -random_string() { - local len="${1:-8}" - local ret - # shellcheck disable=SC2002 - ret=$(cat /dev/urandom | env LC_CTYPE=C tr -dc 'a-zA-Z0-9' | fold -w "${len}" | head -n 1) - echo "${ret}" -} - -prepare_fixture_dir() { - local dir="${1:-$(pwd)}" - rm -Rf "${dir}" >/dev/null - mkdir -p "${dir}" - assert_dir_exists "${dir}" -} - -mktouch() { - local file="${1}" - mkdir -p "$(dirname "${file}")" && touch "${file}" -} - -# Format error message with optional output, if present. -format_error() { - local message="${1}" - echo "##################################################" - echo "# BEGIN ERROR MESSAGE #" - echo "##################################################" - echo - echo "${message}" - echo - echo "##################################################" - echo "# END ERROR MESSAGE #" - echo "##################################################" - echo - - if [ "${output}" != "" ]; then - echo "----------------------------------------" - echo "${BATS_TEST_TMPDIR}" - echo "${output}" - echo "----------------------------------------" - fi -} - -read_env() { - # shellcheck disable=SC1090,SC1091 - [ -f "./.env" ] && t=$(mktemp) && export -p >"$t" && set -a && . "./.env" && set +a && . "$t" && rm "$t" && unset t - - eval echo "${@}" -} - -# Trim the last line of the file. -trim_file() { - local sed_opts - sed_opts=(-i) && [ "$(uname)" == "Darwin" ] && sed_opts=(-i '') - sed_opts+=(-e '$ d') - sed "${sed_opts[@]}" "${1}" -} - -add_var_to_file() { - local file="${1}" - local name="${2}" - local value="${3}" - - local backup=/tmp/bkp/"${file}" - mkdir -p "$(dirname "${backup}")" - - cp -f "${file}" "${backup}" - - # shellcheck disable=SC2086 - echo $name=$value >>"${file}" -} - -restore_file() { - local file="${1}" - local backup=/tmp/bkp/"${file}" - - cp -f "${backup}" "${file}" + # LCOV_EXCL_END } # Run bats with `--tap` option to debug the output. diff --git a/tests/bats/_helper_civictheme.bash b/tests/bats/_helper_civictheme.bash deleted file mode 100644 index ddcb5b9f5..000000000 --- a/tests/bats/_helper_civictheme.bash +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env bash -# -# Helpers related to CivicTheme common testing functionality. -# -# shellcheck disable=SC2155 - -load "${BASH_SOURCE[0]%/*}"/_mock.bash - -################################################################################ -# HOOK IMPLEMENTATIONS # -################################################################################ - -setup() { - export CUR_DIR="$(pwd)" - BUILD_DIR="$BATS_TEST_TMPDIR/civictheme-$(random_string)" - export BUILD_DIR - prepare_fixture_dir "${BUILD_DIR}" - echo "BUILD_DIR dir: ${BUILD_DIR}" >&3 - - # Setup command mocking. - setup_mock - - pushd "${BUILD_DIR}" >/dev/null || exit 1 -} - -teardown() { - restore_global_gitignore - popd >/dev/null || cd "${CUR_DIR}" || exit 1 -} - -################################################################################ -# COMMAND MOCKING # -################################################################################ - -# Setup mock support. -# Call this function from your test's setup() method. -setup_mock() { - # Command and functions mocking support. - # @see https://github.com/grayhemp/bats-mock - # - # Prepare directory with mock binaries, get it's path, and export it so that - # bats-mock could use it internally. - BATS_MOCK_TMPDIR="$(mock_prepare_tmp)" - export "BATS_MOCK_TMPDIR" - # Set the path to temp mocked binaries directory as the first location in - # PATH to lookup in mock directories first. This change lives only for the - # duration of the test and will be reset after. It does not modify the PATH - # outside of the running test. - PATH="${BATS_MOCK_TMPDIR}:$PATH" -} - -# Prepare temporary mock directory. -mock_prepare_tmp() { - rm -rf "${BATS_TMPDIR}/bats-mock-tmp" >/dev/null - mkdir -p "${BATS_TMPDIR}/bats-mock-tmp" - echo "${BATS_TMPDIR}/bats-mock-tmp" -} - -# Mock provided command. -# Arguments: -# 1. Mocked command name, -# Outputs: -# STDOUT: path to created mock file. -mock_command() { - mocked_command="${1}" - mock="$(mock_create)" - mock_path="${mock%/*}" - mock_file="${mock##*/}" - ln -sf "${mock_path}/${mock_file}" "${mock_path}/${mocked_command}" - echo "$mock" -} diff --git a/tests/bats/_mock.bash b/tests/bats/_mock.bash deleted file mode 100644 index 970cbe8f7..000000000 --- a/tests/bats/_mock.bash +++ /dev/null @@ -1,216 +0,0 @@ -#!/usr/bin/env bash -# -# A Bats helper library providing mocking functionality. -# @see https://github.com/grayhemp/bats-mock -# -# This file was modified - look for @note comments. -# shellcheck disable=SC2086,SC1090,SC2005,SC2061 - -# Creates a mock program -# Globals: -# BATS_TMPDIR -# BATS_MOCK_TMPDIR -# Outputs: -# STDOUT: Path to the mock -mock_create() { - local index - - # @note: Modification to the original file: allow to provide custom temp - # directory. BATS_TMPDIR below was changed to BATS_MOCK_TMPDIR. - BATS_MOCK_TMPDIR="${BATS_MOCK_TMPDIR:-$BATS_TMPDIR}" - - index="$(find ${BATS_MOCK_TMPDIR} -name bats-mock.$$.* | wc -l | tr -d ' ')" - local mock - mock="${BATS_MOCK_TMPDIR}/bats-mock.$$.${index}" - echo -n 0 >"${mock}.call_num" - echo -n 0 >"${mock}.status" - echo -n '' >"${mock}.output" - echo -n '' >"${mock}.side_effect" - - cat <"${mock}" -#!/usr/bin/env bash - -set -e - -mock="${mock}" - -call_num="\$(( \$(cat \${mock}.call_num) + 1 ))" -echo "\${call_num}" > "\${mock}.call_num" - -echo "\${_USER:-\$(id -un)}" > "\${mock}.user.\${call_num}" - -echo "\$@" > "\${mock}.args.\${call_num}" - -for var in \$(compgen -e); do - declare -p "\${var}" -done > "\${mock}.env.\${call_num}" - -if [[ -e "\${mock}.output.\${call_num}" ]]; then - cat "\${mock}.output.\${call_num}" -else - cat "\${mock}.output" -fi - -if [[ -e "\${mock}.side_effect.\${call_num}" ]]; then - source "\${mock}.side_effect.\${call_num}" -else - source "\${mock}.side_effect" -fi - -if [[ -e "\${mock}.status.\${call_num}" ]]; then - exit "\$(cat \${mock}.status.\${call_num})" -else - exit "\$(cat \${mock}.status)" -fi -EOF - chmod +x "${mock}" - - echo "${mock}" -} - -# Sets the exit status of the mock -# Arguments: -# 1: Path to the mock -# 2: Status -# 3: Index of the call, optional -mock_set_status() { - local mock="${1?'Mock must be specified'}" - local status="${2?'Status must be specified'}" - local n="$3" - - mock_set_property "${mock}" 'status' "${status}" "${n}" -} - -# Sets the output of the mock -# Arguments: -# 1: Path to the mock -# 2: Output or - for STDIN -# 3: Index of the call, optional -mock_set_output() { - local mock="${1?'Mock must be specified'}" - local output="${2?'Output must be specified'}" - local n="$3" - - mock_set_property "${mock}" 'output' "${output}" "${n}" -} - -# Sets the side effect of the mock -# Arguments: -# 1: Path to the mock -# 2: Side effect or - for STDIN -# 3: Index of the call, optional -mock_set_side_effect() { - local mock="${1?'Mock must be specified'}" - local side_effect="${2?'Side effect must be specified'}" - local n="$3" - - mock_set_property "${mock}" 'side_effect' "${side_effect}" "${n}" -} - -# Returns the number of times the mock was called -# Arguments: -# 1: Path to the mock -# Outputs: -# STDOUT: Number of calls -mock_get_call_num() { - local mock="${1?'Mock must be specified'}" - - echo "$(cat ${mock}.call_num)" -} - -# Returns the user the mock was called with -# Arguments: -# 1: Path to the mock -# 2: Index of the call, optional -# Outputs: -# STDOUT: User name -mock_get_call_user() { - local mock="${1?'Mock must be specified'}" - local n - n="$(mock_default_n ${mock} $2)" || exit "$?" - - echo "$(cat ${mock}.user.${n})" -} - -# Returns the arguments line the mock was called with -# Arguments: -# 1: Path to the mock -# 2: Index of the call, optional -# Outputs: -# STDOUT: Arguments line -mock_get_call_args() { - local mock="${1?'Mock must be specified'}" - local n - n="$(mock_default_n ${mock} $2)" || exit "$?" - - echo "$(cat ${mock}.args.${n})" -} - -# Returns the value of the environment variable the mock was called with -# Arguments: -# 1: Path to the mock -# 2: Variable name -# 3: Index of the call, optional -# Outputs: -# STDOUT: Variable value -mock_get_call_env() { - local mock="${1?'Mock must be specified'}" - local var="${2?'Variable name must be specified'}" - local n="$3" - n="$(mock_default_n ${mock} $3)" || exit "$?" - - source "${mock}.env.${n}" - echo "${!var}" -} - -# Sets a specific property of the mock -# Arguments: -# 1: Path to the mock -# 2: Property name -# 3: Property value or - for STDIN -# 4: Index of the call, optional -# Inputs: -# STDIN: Property value if 2 is - -mock_set_property() { - local mock="${1?'Mock must be specified'}" - local property_name="${2?'Property name must be specified'}" - local property_value="${3?'Property value must be specified'}" - local n="$4" - - if [[ "${property_value}" = '-' ]]; then - property_value="$(cat -)" - fi - - if [[ -n "${n}" ]]; then - echo -e "${property_value}" >"${mock}.${property_name}.${n}" - else - echo -e "${property_value}" >"${mock}.${property_name}" - fi -} - -# Defaults call index to the last one if not specified explicitly -# Arguments: -# 1: Path to the mock -# 2: Index of the call, optional -# Returns: -# 1: If mock is not called enough times -# Outputs: -# STDOUT: Call index -# STDERR: Corresponding error message -mock_default_n() { - local mock="${1?'Mock must be specified'}" - local call_num - call_num="$(cat ${mock}.call_num)" - local n="${2:-${call_num}}" - - if [[ "${n}" -eq 0 ]]; then - n=1 - fi - - if [[ "${n}" -gt "${call_num}" ]]; then - echo "$(basename $0): Mock must be called at least ${n} time(s)" >&2 - exit 1 - fi - - echo "${n}" -} diff --git a/tests/bats/assets.bats b/tests/bats/assets.bats index 50aaabe65..aa0311543 100644 --- a/tests/bats/assets.bats +++ b/tests/bats/assets.bats @@ -7,7 +7,7 @@ load _helper @test "CivicTheme Theme assets" { - dir="${DREVOPS_EXPORT_CODE_DIR:-$(pwd)}/docroot/themes/contrib/civictheme" + dir="${DREVOPS_EXPORT_CODE_DIR:-${CUR_DIR}}/web/themes/contrib/civictheme" pushd "${dir}" >/dev/null || exit 1 diff --git a/tests/bats/assets_demo_custom.bats b/tests/bats/assets_demo_custom.bats index bacd4daca..1ccc5db74 100644 --- a/tests/bats/assets_demo_custom.bats +++ b/tests/bats/assets_demo_custom.bats @@ -7,7 +7,9 @@ load _helper @test "CivicTheme Demo Theme assets" { - dir="${DREVOPS_EXPORT_CODE_DIR:-$(pwd)}/docroot/themes/custom/civictheme_demo" + dir="${DREVOPS_EXPORT_CODE_DIR:-${CUR_DIR}}/web/themes/custom/civictheme_demo" + + [ ! -d "${dir}" ] && debug "Skipping tests" && return pushd "${dir}" >/dev/null || exit 1 diff --git a/tests/bats/assets_demo_sibling.bats b/tests/bats/assets_demo_sibling.bats index 437e1d835..ec4ce88b4 100644 --- a/tests/bats/assets_demo_sibling.bats +++ b/tests/bats/assets_demo_sibling.bats @@ -7,7 +7,7 @@ load _helper @test "CivicTheme Demo Sibling Theme assets" { - dir="${DREVOPS_EXPORT_CODE_DIR:-$(pwd)}/docroot/themes/contrib/civictheme_demo" + dir="${DREVOPS_EXPORT_CODE_DIR:-${CUR_DIR}}/web/themes/contrib/civictheme_demo" pushd "${dir}" >/dev/null || exit 1 diff --git a/tests/bats/assets_library.bats b/tests/bats/assets_library.bats index efda24e8c..cdb2cea1e 100644 --- a/tests/bats/assets_library.bats +++ b/tests/bats/assets_library.bats @@ -7,7 +7,7 @@ load _helper @test "CivicTheme Library assets" { - dir="${DREVOPS_EXPORT_CODE_DIR:-$(pwd)}/docroot/themes/contrib/civictheme/civictheme_library" + dir="${DREVOPS_EXPORT_CODE_DIR:-${CUR_DIR}}/web/themes/contrib/civictheme/civictheme_library" pushd "${dir}" >/dev/null || exit 1 diff --git a/tests/bats/helpers.bats b/tests/bats/helpers.bats deleted file mode 100644 index e8482c483..000000000 --- a/tests/bats/helpers.bats +++ /dev/null @@ -1,588 +0,0 @@ -#!/usr/bin/env bats -# -# Tests for Bats helpers. -# -# Each assertion tests positive and negative behaviour. -# -# shellcheck disable=SC2129 - -load _helper - -@test "assert_success" { - status=0 - assert_success - - status=1 - run assert_success - [ "$status" -eq 1 ] -} - -@test "assert_failure" { - status=1 - assert_failure - - status=0 - run assert_failure - [ "$status" -eq 1 ] -} - -@test "assert_output" { - output="output needle" - assert_output "output needle" - - output="output not needle" - run assert_output "output needle" - assert_failure -} - -@test "assert_output_contains" { - run echo "some existing text" - assert_output_contains "some existing text" - - run echo "some existing text" - assert_output_contains "some EXISTING text" - - run echo "some existing text" - assert_output_contains "existing" - - run assert_output_contains "non-existing" - assert_failure -} - -@test "assert_output_not_contains" { - run echo "some existing text" - assert_output_not_contains "non-existing" - - run assert_output_not_contains "some existing text" - assert_failure - - run assert_output_not_contains "some EXISTING text" - assert_failure - - run assert_output_not_contains "existing" - assert_failure -} - -@test "assert_equal" { - assert_equal 1 1 - - run assert_equal 1 2 - assert_failure -} - -@test "assert_empty" { - assert_empty "" - - run assert_empty "something" - assert_failure -} - -@test "assert_not_empty" { - assert_not_empty "something" - - run assert_not_empty "" - assert_failure -} - -@test "assert_contains" { - assert_contains "needle" "some needle in a haystack" - assert_contains "n[ee]dle" "some n[ee]dle in a haystack" - - run assert_contains "needle" "some ne edle in a haystack" - assert_failure -} - -@test "assert_not_contains" { - assert_not_contains "otherneedle" "some needle in a haystack" - assert_not_contains "othern[ee]dle" "some n[ee]dle in a haystack" - - run assert_not_contains "needle" "some needle in a haystack" - assert_failure - run assert_not_contains "n[ee]dle" "some n[ee]dle in a haystack" - assert_failure -} - -@test "assert_file_exists" { - assert_file_exists "${BATS_TEST_FILENAME}" - - mktouch "${BATS_TEST_TMPDIR}/file1.txt" - mktouch "${BATS_TEST_TMPDIR}/file2.txt" - mktouch "${BATS_TEST_TMPDIR}/file3.md" - mktouch "${BATS_TEST_TMPDIR}/a.b.c.d.doc" - - assert_file_exists "${BATS_TEST_TMPDIR}/file1.txt" - assert_file_exists "${BATS_TEST_TMPDIR}/file2.txt" - assert_file_exists "${BATS_TEST_TMPDIR}/file3.md" - - assert_file_exists "${BATS_TEST_TMPDIR}/file*" - assert_file_exists "${BATS_TEST_TMPDIR}/*.txt" - assert_file_exists "${BATS_TEST_TMPDIR}/*.doc" - - run assert_file_exists "some_file.txt" - assert_failure - - run assert_file_exists "${BATS_TEST_TMPDIR}/*.rtf" - assert_failure - - run assert_file_exists "${BATS_TEST_TMPDIR}/other*" - assert_failure -} - -@test "assert_file_not_exists" { - assert_file_not_exists "some_file.txt" - - mktouch "${BATS_TEST_TMPDIR}/file1.txt" - mktouch "${BATS_TEST_TMPDIR}/file2.txt" - mktouch "${BATS_TEST_TMPDIR}/file3.md" - - assert_file_not_exists "${BATS_TEST_TMPDIR}/otherfile1.txt" - assert_file_not_exists "${BATS_TEST_TMPDIR}/otherfile*" - assert_file_not_exists "${BATS_TEST_TMPDIR}/*.rtf" - - run assert_file_not_exists "${BATS_TEST_FILENAME}" - assert_failure - - run assert_file_not_exists "${BATS_TEST_TMPDIR}/file1.txt" - assert_failure - - run assert_file_not_exists "${BATS_TEST_TMPDIR}/file*" - assert_failure - - run assert_file_not_exists "${BATS_TEST_TMPDIR}/*.txt" - assert_failure -} - -@test "assert_dir_exists" { - assert_dir_exists "${BATS_TEST_DIRNAME}" - - run assert_dir_exists "some dir" - assert_failure -} - -@test "assert_dir_not_exists" { - assert_dir_not_exists "some dir" - - run assert_dir_not_exists "${BATS_TEST_DIRNAME}" - assert_failure -} - -@test "assert_symlink_exists" { - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture_symlink" - - # Assert file. - echo "some existing text" >"${BATS_TEST_TMPDIR}/fixture_symlink/src.txt" - ln -s "${BATS_TEST_TMPDIR}/fixture_symlink/src.txt" "${BATS_TEST_TMPDIR}/fixture_symlink/dst.txt" - assert_symlink_exists "${BATS_TEST_TMPDIR}/fixture_symlink/dst.txt" - - run assert_symlink_exists "${BATS_TEST_TMPDIR}/fixture_symlink/not-existing.txt" - assert_failure - - # Assert dir. - mkdir "${BATS_TEST_TMPDIR}/fixture_symlink/symlink_src" - ln -s "${BATS_TEST_TMPDIR}/fixture_symlink/symlink_src" "${BATS_TEST_TMPDIR}/fixture_symlink/symlink_dst" - assert_symlink_exists "${BATS_TEST_TMPDIR}/fixture_symlink/symlink_dst" - run assert_symlink_exists "${BATS_TEST_TMPDIR}/fixture_symlink/symlink_dst_not_exisitng" - assert_failure -} - -@test "assert_symlink_not_exists" { - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture_symlink" - - echo "some existing text" >"${BATS_TEST_TMPDIR}/fixture_symlink/src.txt" - ln -s "${BATS_TEST_TMPDIR}/fixture_symlink/src.txt" "${BATS_TEST_TMPDIR}/fixture_symlink/dst.txt" - - # Assert others. - assert_symlink_not_exists "${BATS_TEST_TMPDIR}/fixture_symlink/src.txt" - assert_symlink_not_exists "${BATS_TEST_TMPDIR}/fixture_symlink/other_dst.txt" - assert_symlink_not_exists "${BATS_TEST_TMPDIR}/fixture_symlink/some_dir" - - run assert_symlink_not_exists "${BATS_TEST_TMPDIR}/fixture_symlink/dst.txt" - assert_failure -} - -@test "assert_file_mode" { - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture_mode" - echo "some existing text" >"${BATS_TEST_TMPDIR}/fixture_mode/1.txt" - chmod 644 "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" - assert_file_mode "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" "644" - chmod 664 "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" - assert_file_mode "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" "644" - chmod 755 "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" - assert_file_mode "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" "755" - chmod 775 "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" - assert_file_mode "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" "755" - chmod 777 "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" - assert_file_mode "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" "755" - - run assert_file_mode "${BATS_TEST_TMPDIR}/fixture_mode/1.txt" "644" - assert_failure -} - -@test "assert_file_contains" { - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture_file_assert" - echo "some existing text" >>"${BATS_TEST_TMPDIR}/fixture_file_assert/1.txt" - echo "other existing text" >>"${BATS_TEST_TMPDIR}/fixture_file_assert/1.txt" - echo "one more line of existing text" >>"${BATS_TEST_TMPDIR}/fixture_file_assert/1.txt" - - assert_file_contains "${BATS_TEST_TMPDIR}/fixture_file_assert/1.txt" "some existing text" - - run assert_file_contains "${BATS_TEST_TMPDIR}/fixture_file_assert/1.txt" "other non-existing text" - assert_failure -} - -@test "assert_file_not_contains" { - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture_file_assert" - echo "some existing text" >>"${BATS_TEST_TMPDIR}/fixture_file_assert/1.txt" - echo "other existing text" >>"${BATS_TEST_TMPDIR}/fixture_file_assert/1.txt" - echo "one more line of existing text" >>"${BATS_TEST_TMPDIR}/fixture_file_assert/1.txt" - - assert_file_not_contains "${BATS_TEST_TMPDIR}/fixture_file_assert/1.txt" "other non-existing text" - - run assert_file_not_contains "${BATS_TEST_TMPDIR}/fixture_file_assert/1.txt" "some existing text" - assert_failure - - # Text exists, non-existing file. - assert_file_not_contains "${BATS_TEST_TMPDIR}/fixture_file_assert/somefile.txt" "some existing text" -} - -@test "assert_dir_empty" { - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/dir1" - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/dir2" - echo "some existing text" >"${BATS_TEST_TMPDIR}/fixture/dir2/1.txt" - - assert_dir_empty "${BATS_TEST_TMPDIR}/fixture/dir1" - - run assert_dir_empty "${BATS_TEST_TMPDIR}/fixture/dir2" - assert_failure - - run assert_dir_empty "${BATS_TEST_TMPDIR}/non_existing" - assert_failure -} - -@test "assert_dir_not_empty" { - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/dir1" - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/dir2" - echo "some existing text" >"${BATS_TEST_TMPDIR}/fixture/dir2/1.txt" - - assert_dir_not_empty "${BATS_TEST_TMPDIR}/fixture/dir2" - - run assert_dir_not_empty "${BATS_TEST_TMPDIR}/fixture/dir1" - assert_failure - - run assert_dir_not_empty "${BATS_TEST_TMPDIR}/non_existing" - assert_failure -} - -@test "assert_dir_contains_string" { - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture" - echo "some existing text" >"${BATS_TEST_TMPDIR}/fixture/1.txt" - - assert_dir_contains_string "${BATS_TEST_TMPDIR}/fixture" "existing" - - run assert_dir_contains_string "${BATS_TEST_TMPDIR}/fixture" "non-existing" - assert_failure - - run assert_dir_contains_string "${BATS_TEST_TMPDIR}/non_existing" - assert_failure -} - -@test "assert_dir_not_contains_string" { - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture" - echo "some existing text" >"${BATS_TEST_TMPDIR}/fixture/1.txt" - echo "some other text" >"${BATS_TEST_TMPDIR}/fixture/2.txt" - echo "some existing text" >"${BATS_TEST_TMPDIR}/fixture/3.txt" - - assert_dir_not_contains_string "${BATS_TEST_TMPDIR}/fixture" "non-existing" - - run assert_dir_not_contains_string "${BATS_TEST_TMPDIR}/fixture" "existing" - assert_failure - assert_output_contains "fixture/1.txt" - assert_output_contains "fixture/3.txt" - assert_output_not_contains "fixture/2.txt" - - # Non-existing dir. - assert_dir_not_contains_string "${BATS_TEST_TMPDIR}/non_existing" "existing" -} - -@test "assert_git_repo" { - prepare_git_config - - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/git_repo" - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/git_repo_empty_dot_git" - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/not_git_repo" - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" init >/dev/null - - assert_git_repo "${BATS_TEST_TMPDIR}/fixture/git_repo" - - mkdir "${BATS_TEST_TMPDIR}/fixture/git_repo_empty_dot_git/.git" - assert_dir_exists "${BATS_TEST_TMPDIR}/fixture/git_repo_empty_dot_git/.git" - assert_file_not_exists "${BATS_TEST_TMPDIR}/fixture/git_repo_empty_dot_git/HEAD" - run assert_git_repo "${BATS_TEST_TMPDIR}/fixture/git_repo_empty_dot_git" - assert_failure - - run assert_git_repo "${BATS_TEST_TMPDIR}/fixture/not_git_repo" - assert_failure - - run assert_git_repo "${BATS_TEST_TMPDIR}/fixture/some_dir" - assert_failure -} - -@test "assert_not_git_repo" { - prepare_git_config - - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/git_repo" - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/not_git_repo" - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" init >/dev/null - - assert_not_git_repo "${BATS_TEST_TMPDIR}/fixture/not_git_repo" - - run assert_not_git_repo "${BATS_TEST_TMPDIR}/fixture/git_repo" - assert_failure - - run assert_not_git_repo "${BATS_TEST_TMPDIR}/fixture/some_dir" - assert_failure -} - -@test "assert_git_clean" { - prepare_git_config - - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/git_repo" - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" init >/dev/null - assert_git_repo "${BATS_TEST_TMPDIR}/fixture/git_repo" - - assert_git_clean "${BATS_TEST_TMPDIR}/fixture/git_repo" - - mktouch "${BATS_TEST_TMPDIR}/fixture/git_repo/uncommitted_file" - run assert_git_clean "${BATS_TEST_TMPDIR}/fixture/git_repo" - assert_failure - - # Now, commit first file and create another, but do not add. - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" add -A >/dev/null - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" commit -m "First commit" >/dev/null - assert_git_clean "${BATS_TEST_TMPDIR}/fixture/git_repo" - mktouch "${BATS_TEST_TMPDIR}/fixture/git_repo/other_uncommitted_file" - run assert_git_clean "${BATS_TEST_TMPDIR}/fixture/git_repo" - assert_failure -} - -@test "assert_git_not_clean" { - prepare_git_config - - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/git_repo" - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" init >/dev/null - assert_git_repo "${BATS_TEST_TMPDIR}/fixture/git_repo" - - run assert_git_not_clean "${BATS_TEST_TMPDIR}/fixture/git_repo" - assert_failure - - mktouch "${BATS_TEST_TMPDIR}/fixture/git_repo/uncommitted_file" - assert_git_not_clean "${BATS_TEST_TMPDIR}/fixture/git_repo" - - # Now, commit first file and create another, but do not add. - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" add -A >/dev/null - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" commit -m "First commit" >/dev/null - run assert_git_not_clean "${BATS_TEST_TMPDIR}/fixture/git_repo" - assert_failure - mktouch "${BATS_TEST_TMPDIR}/fixture/git_repo/other_uncommitted_file" - assert_git_not_clean "${BATS_TEST_TMPDIR}/fixture/git_repo" -} - -@test "assert_git_file_is_tracked" { - prepare_git_config - - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/git_repo" - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/not_git_repo" - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" init >/dev/null - assert_git_repo "${BATS_TEST_TMPDIR}/fixture/git_repo" - touch "${BATS_TEST_TMPDIR}/fixture/git_repo/1.txt" - touch "${BATS_TEST_TMPDIR}/fixture/git_repo/2.txt" - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" add 1.txt >/dev/null - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" commit -m "some message" >/dev/null - - assert_git_file_is_tracked "1.txt" "${BATS_TEST_TMPDIR}/fixture/git_repo" - - run assert_git_file_is_tracked "2.txt" "${BATS_TEST_TMPDIR}/fixture/git_repo" - assert_failure - - run assert_git_file_is_tracked "1.txt" "${BATS_TEST_TMPDIR}/fixture/not_git_repo" - assert_failure -} - -@test "assert_git_file_is_not_tracked" { - prepare_git_config - - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/git_repo" - prepare_fixture_dir "${BATS_TEST_TMPDIR}/fixture/not_git_repo" - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" init >/dev/null - assert_git_repo "${BATS_TEST_TMPDIR}/fixture/git_repo" - touch "${BATS_TEST_TMPDIR}/fixture/git_repo/1.txt" - touch "${BATS_TEST_TMPDIR}/fixture/git_repo/2.txt" - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" add 1.txt >/dev/null - git --work-tree="${BATS_TEST_TMPDIR}/fixture/git_repo" --git-dir="${BATS_TEST_TMPDIR}/fixture/git_repo/.git" commit -m "some message" >/dev/null - - assert_git_file_is_not_tracked "2.txt" "${BATS_TEST_TMPDIR}/fixture/git_repo" - - run assert_git_file_is_not_tracked "1.txt" "${BATS_TEST_TMPDIR}/fixture/git_repo" - assert_failure - - run assert_git_file_is_not_tracked "2.txt" "${BATS_TEST_TMPDIR}/fixture/not_git_repo" - assert_failure -} - -@test "assert_files_equal" { - prepare_git_config - - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/fixture1.png" - echo "some other file" >"${BATS_TEST_TMPDIR}/fixture2.png" - - assert_files_equal "${BATS_TEST_TMPDIR}/fixture1.png" "${BATS_TEST_TMPDIR}/fixture1.png" - - run assert_files_equal "${BATS_TEST_TMPDIR}/fixture1.png" "${BATS_TEST_TMPDIR}/fixture2.png" - assert_failure - - run assert_files_equal "${BATS_TEST_TMPDIR}/fixture3.png" "${BATS_TEST_TMPDIR}/fixture4.png" - assert_failure - - run assert_files_equal "${BATS_TEST_TMPDIR}/fixture1.png" "${BATS_TEST_TMPDIR}/fixture3.png" - assert_failure -} - -@test "assert_files_not_equal" { - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/fixture1.png" - echo "some other file" >"${BATS_TEST_TMPDIR}/fixture2.png" - - assert_files_not_equal "${BATS_TEST_TMPDIR}/fixture1.png" "${BATS_TEST_TMPDIR}/fixture2.png" - - run assert_files_not_equal "${BATS_TEST_TMPDIR}/fixture1.png" "${BATS_TEST_TMPDIR}/fixture1.png" - assert_failure - - run assert_files_not_equal "${BATS_TEST_TMPDIR}/fixture3.png" "${BATS_TEST_TMPDIR}/fixture1.png" - assert_failure - - run assert_files_not_equal "${BATS_TEST_TMPDIR}/fixture1.png" "${BATS_TEST_TMPDIR}/fixture3.png" - assert_failure -} - -@test "assert_dirs_equal" { - # Assert that files in the root are equal. - mkdir -p "${BATS_TEST_TMPDIR}/t11" - mkdir -p "${BATS_TEST_TMPDIR}/t12" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t11/fixture1.png" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t12/fixture1.png" - assert_dirs_equal "${BATS_TEST_TMPDIR}/t11" "${BATS_TEST_TMPDIR}/t12" - - # Assert that files in the root are not equal. - echo "some other file" >"${BATS_TEST_TMPDIR}/t12/fixture1.png" - run assert_dirs_equal "${BATS_TEST_TMPDIR}/t11" "${BATS_TEST_TMPDIR}/t12" - assert_failure - - # Assert that files in the subdirs are equal. - mkdir -p "${BATS_TEST_TMPDIR}/t31/subdir" - mkdir -p "${BATS_TEST_TMPDIR}/t32/subdir" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t31/subdir/fixture1.png" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t32/subdir/fixture1.png" - assert_dirs_equal "${BATS_TEST_TMPDIR}/t31" "${BATS_TEST_TMPDIR}/t32" - - # Assert that files in the subdirs are not equal. - echo "some other file" >"${BATS_TEST_TMPDIR}/t32/subdir/fixture1.png" - run assert_dirs_equal "${BATS_TEST_TMPDIR}/t31" "${BATS_TEST_TMPDIR}/t32" - assert_failure - - # Assert that files in the root and subdirs are equal. - mkdir -p "${BATS_TEST_TMPDIR}/t41/subdir" - mkdir -p "${BATS_TEST_TMPDIR}/t42/subdir" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t41/fixture1.png" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t41/.hidden" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t41/subdir/fixture1.png" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t42/fixture1.png" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t42/.hidden" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t42/subdir/fixture1.png" - assert_dirs_equal "${BATS_TEST_TMPDIR}/t41" "${BATS_TEST_TMPDIR}/t42" - - # Assert that files in the root and subdirs are not equal. - echo "some other file" >"${BATS_TEST_TMPDIR}/t42/subdir/fixture1.png" - run assert_dirs_equal "${BATS_TEST_TMPDIR}/t41" "${BATS_TEST_TMPDIR}/t42" - assert_failure - - # Assert that missing files trigger a failure. - mkdir -p "${BATS_TEST_TMPDIR}/t51/subdir" - mkdir -p "${BATS_TEST_TMPDIR}/t52/subdir" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t51/fixture1.png" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t51/.hidden" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t51/subdir/fixture1.png" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t51/subdir/fixture2.png" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t52/fixture1.png" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t52/.hidden" - cp "${BATS_TEST_DIRNAME}/fixtures/fixture.png" "${BATS_TEST_TMPDIR}/t52/subdir/fixture1.png" - run assert_dirs_equal "${BATS_TEST_TMPDIR}/t51" "${BATS_TEST_TMPDIR}/t52" - assert_failure - - # Assert non-existing dirs are failing. - run assert_dirs_equal "${BATS_TEST_TMPDIR}/t61" "${BATS_TEST_TMPDIR}/t62" - assert_failure -} - -@test "mktouch" { - assert_file_not_exists "${BATS_TEST_TMPDIR}/dir1/dir2/dir3/file.txt" - mktouch "${BATS_TEST_TMPDIR}/dir1/dir2/dir3/file.txt" - assert_file_exists "${BATS_TEST_TMPDIR}/dir1/dir2/dir3/file.txt" -} - -@test "read_env" { - pushd "${BATS_TEST_TMPDIR}" - - assert_file_not_exists ".env" - - echo "VAR1=val1" >>.env - echo "VAR2=val2" >>.env - run read_env "\$VAR1" - assert_output_contains "val1" - run read_env "\$VAR2" - assert_output_contains "val2" - - popd -} - -@test "trim_file" { - echo "line1" >>"${BATS_TEST_TMPDIR}/file.txt" - echo "line2" >>"${BATS_TEST_TMPDIR}/file.txt" - echo "line3" >>"${BATS_TEST_TMPDIR}/file.txt" - - trim_file "${BATS_TEST_TMPDIR}/file.txt" - - assert_file_contains "${BATS_TEST_TMPDIR}/file.txt" "line1" - assert_file_contains "${BATS_TEST_TMPDIR}/file.txt" "line2" - assert_file_not_contains "${BATS_TEST_TMPDIR}/file.txt" "line3" - - trim_file "${BATS_TEST_TMPDIR}/file.txt" - - assert_file_contains "${BATS_TEST_TMPDIR}/file.txt" "line1" - assert_file_not_contains "${BATS_TEST_TMPDIR}/file.txt" "line2" - assert_file_not_contains "${BATS_TEST_TMPDIR}/file.txt" "line3" -} - -@test "add_var_to_file and restore_file" { - rm -fr /tmp/bkp - - echo "line1" >>"${BATS_TEST_TMPDIR}/.env" - echo "line2" >>"${BATS_TEST_TMPDIR}/.env" - - add_var_to_file "${BATS_TEST_TMPDIR}/.env" "VAR" "value" - - assert_file_exists "${BATS_TEST_TMPDIR}/.env" - assert_file_contains "${BATS_TEST_TMPDIR}/.env" "line1" - assert_file_contains "${BATS_TEST_TMPDIR}/.env" "line2" - assert_file_contains "${BATS_TEST_TMPDIR}/.env" "VAR=value" - - assert_file_exists "/tmp/bkp/${BATS_TEST_TMPDIR}/.env" - assert_file_contains "/tmp/bkp/${BATS_TEST_TMPDIR}/.env" "line1" - assert_file_contains "/tmp/bkp/${BATS_TEST_TMPDIR}/.env" "line2" - assert_file_not_contains "/tmp/bkp/${BATS_TEST_TMPDIR}/.env" "VAR=value" - - restore_file "${BATS_TEST_TMPDIR}/.env" - - assert_file_exists "${BATS_TEST_TMPDIR}/.env" - assert_file_contains "${BATS_TEST_TMPDIR}/.env" "line1" - assert_file_contains "${BATS_TEST_TMPDIR}/.env" "line2" - assert_file_not_contains "${BATS_TEST_TMPDIR}/.env" "VAR=value" -} diff --git a/tests/bats/mock.bats b/tests/bats/mock.bats deleted file mode 100644 index f77617d2c..000000000 --- a/tests/bats/mock.bats +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env bats -# -# Tests for Bats mock. -# -# shellcheck disable=SC2129 - -load _helper -load _helper_civictheme - -@test "Mock: calls and arguments" { - mock_curl=$(mock_command "curl") - - "${CUR_DIR}/tests/bats/fixtures/fixture.sh" - - assert_equal 2 "$(mock_get_call_num "${mock_curl}")" - - assert_equal "-L -s -o /dev/null -w %{http_code} example.com" "$(mock_get_call_args "${mock_curl}" 1)" - assert_equal "example.com" "$(mock_get_call_args "${mock_curl}" 2)" -} - -@test "Mock: output" { - mock_curl=$(mock_command "curl") - mock_set_output "${mock_curl}" "testoutput1" 1 - mock_set_output "${mock_curl}" "testoutput2" 2 - - run "${CUR_DIR}/tests/bats/fixtures/fixture.sh" - assert_success - assert_equal 2 "$(mock_get_call_num "${mock_curl}")" - assert_output_contains "testoutput1" - assert_output_contains "testoutput2" -} - -@test "Mock: exit status" { - mock_curl=$(mock_command "curl") - mock_set_status "${mock_curl}" 1 1 - - run "${CUR_DIR}/tests/bats/fixtures/fixture.sh" - assert_failure - assert_equal 1 "$(mock_get_call_num "${mock_curl}")" -} diff --git a/tests/bats/package-lock.json b/tests/bats/package-lock.json new file mode 100644 index 000000000..aad6b13f7 --- /dev/null +++ b/tests/bats/package-lock.json @@ -0,0 +1,52 @@ +{ + "name": "civictheme_source-tests", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "civictheme_source-tests", + "version": "1.0.0", + "license": "GPL-2.0-or-later", + "devDependencies": { + "bats-helpers": "npm:@drevops/bats-helpers@^1.2" + } + }, + "node_modules/bats": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/bats/-/bats-1.10.0.tgz", + "integrity": "sha512-yOQrC7npuCrN+Ic3TyjTjJlzHa0qlK3oEO6VAYPWwFeutx/GmpljIyB6uNSl/UTASyc2w4FgVuA/QMMf9OdsCw==", + "dev": true, + "bin": { + "bats": "bin/bats" + } + }, + "node_modules/bats-helpers": { + "name": "@drevops/bats-helpers", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@drevops/bats-helpers/-/bats-helpers-1.3.0.tgz", + "integrity": "sha512-2dQyexmp7fyVTzVKfN9PXKDqGxcdD8u5qGY1mObeNq4wJ98dGoCocA+2ORGUD1bseNyh0fSWrDPiSLvoN1YBCA==", + "dev": true, + "dependencies": { + "bats": "^1" + } + } + }, + "dependencies": { + "bats": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/bats/-/bats-1.10.0.tgz", + "integrity": "sha512-yOQrC7npuCrN+Ic3TyjTjJlzHa0qlK3oEO6VAYPWwFeutx/GmpljIyB6uNSl/UTASyc2w4FgVuA/QMMf9OdsCw==", + "dev": true + }, + "bats-helpers": { + "version": "npm:@drevops/bats-helpers@1.3.0", + "resolved": "https://registry.npmjs.org/@drevops/bats-helpers/-/bats-helpers-1.3.0.tgz", + "integrity": "sha512-2dQyexmp7fyVTzVKfN9PXKDqGxcdD8u5qGY1mObeNq4wJ98dGoCocA+2ORGUD1bseNyh0fSWrDPiSLvoN1YBCA==", + "dev": true, + "requires": { + "bats": "^1" + } + } + } +} diff --git a/tests/bats/package.json b/tests/bats/package.json new file mode 100644 index 000000000..8b5696b65 --- /dev/null +++ b/tests/bats/package.json @@ -0,0 +1,9 @@ +{ + "name": "civictheme_source-tests", + "version": "1.0.0", + "description": "Packages used for testing", + "license": "GPL-2.0-or-later", + "devDependencies": { + "bats-helpers": "npm:@drevops/bats-helpers@^1.2" + } +} diff --git a/tests/behat/features/homepage.feature b/tests/behat/features/homepage.feature index 9739afbdc..a3dba7931 100644 --- a/tests/behat/features/homepage.feature +++ b/tests/behat/features/homepage.feature @@ -1,15 +1,15 @@ -@smoke +@homepage @smoke Feature: Homepage Ensure that homepage is displayed as expected. - @api @p0 + @api Scenario: Anonymous user visits homepage Given I go to the homepage And I should be in the "" path Then I save screenshot - @api @javascript @p1 + @api @javascript Scenario: Anonymous user visits homepage Given I go to the homepage And I should be in the "" path diff --git a/tests/behat/features/login.feature b/tests/behat/features/login.feature index d6ec92459..d006637a6 100644 --- a/tests/behat/features/login.feature +++ b/tests/behat/features/login.feature @@ -1,15 +1,15 @@ -@smoke +@login @smoke Feature: Login Ensure that user can login. - @api @p0 + @api Scenario: Administrator user logs in Given I am logged in as a user with the "administer site configuration, access administration pages" permissions When I go to "admin" Then I save screenshot - @api @javascript @p1 + @api @javascript Scenario: Administrator user logs in Given I am logged in as a user with the "administer site configuration, access administration pages" permissions When I go to "admin" diff --git a/docroot/themes/contrib/civictheme/assets/fonts/.gitkeep b/tests/phpunit/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/assets/fonts/.gitkeep rename to tests/phpunit/.gitkeep diff --git a/tests/phpunit/unit/AddPhpcsExclusionsUnitTest.php b/tests/phpunit/AddPhpcsExclusionsUnitTest.php similarity index 92% rename from tests/phpunit/unit/AddPhpcsExclusionsUnitTest.php rename to tests/phpunit/AddPhpcsExclusionsUnitTest.php index 61ee39c22..82bea635b 100644 --- a/tests/phpunit/unit/AddPhpcsExclusionsUnitTest.php +++ b/tests/phpunit/AddPhpcsExclusionsUnitTest.php @@ -16,7 +16,7 @@ class AddPhpcsExclusionsUnitTest extends ScriptUnitTestBase { /** * {@inheritdoc} */ - protected $script = 'docroot/themes/contrib/civictheme/civictheme_starter_kit/scripts/add_phpcs_exclusions.php'; + protected $script = 'web/themes/contrib/civictheme/civictheme_starter_kit/scripts/add_phpcs_exclusions.php'; /** * @dataProvider dataProviderMain diff --git a/tests/phpunit/CircleCiConfigTest.php b/tests/phpunit/CircleCiConfigTest.php new file mode 100644 index 000000000..580ba7095 --- /dev/null +++ b/tests/phpunit/CircleCiConfigTest.php @@ -0,0 +1,176 @@ +config = Yaml::decode($file); + } + + /** + * Tests for deploy branch regex. + * + * @see https://semver.org/ + * + * @dataProvider dataProviderDeployBranchRegex + */ + public function testDeployBranchRegex(string $branch, bool $expected = TRUE): void { + $job = array_column($this->config['workflows']['commit']['jobs'], 'deploy')[0]; + $this->assertEquals($expected, preg_match($job['filters']['branches']['only'], $branch)); + } + + /** + * Data provider for testDeployBranchRegex(). + */ + public function dataProviderDeployBranchRegex(): array { + return [ + // Positive branches. + ['main'], + ['master'], + ['develop'], + + ['ci'], + ['cisomething'], + + ['deps/something'], + + ['release/123.456.789'], + ['release/123.456.789-rc.123'], + ['hotfix/123.456.789'], + ['hotfix/123.456.789-rc.123'], + + ['release/2023-04-17'], + ['release/2023-04-17.1'], + ['hotfix/2023-04-17'], + ['hotfix/2023-04-17.1'], + + ['feature/description'], + ['feature/Description'], + ['feature/Description-With-Hyphens'], + ['feature/123-description'], + ['feature/123-Description'], + ['feature/1.x'], + ['feature/0.x'], + ['feature/0.1.x'], + ['feature/0.1.2.x'], + ['feature/1.x-description'], + ['feature/0.x-description'], + ['feature/0.1.x-description'], + ['feature/0.1.2.x-description'], + + // Negative branches. + ['something', FALSE], + ['premain', FALSE], + ['premaster', FALSE], + ['predevelop', FALSE], + ['mainpost', FALSE], + ['masterpost', FALSE], + ['developpost', FALSE], + ['premainpost', FALSE], + ['premasterpost', FALSE], + ['predeveloppost', FALSE], + + ['preci', FALSE], + ['precipost', FALSE], + + ['deps', FALSE], + ['predeps', FALSE], + ['depspost', FALSE], + ['predepspost', FALSE], + + ['feature', FALSE], + ['release', FALSE], + ['hotfix', FALSE], + ['prefeature', FALSE], + ['prerelease', FALSE], + ['prehotfix', FALSE], + ['featurepost', FALSE], + ['releasepost', FALSE], + ['hotfixpost', FALSE], + ['prefeaturepost', FALSE], + ['prereleasepost', FALSE], + ['prehotfixpost', FALSE], + + ['release/123', FALSE], + ['release/123.456', FALSE], + ['hotfix/123', FALSE], + ['hotfix/123.456', FALSE], + + ['release/202-04-17', FALSE], + ['release/2023-4-17', FALSE], + ['release/2023-04-1', FALSE], + ['release/pre2023-04-17', FALSE], + ['release/2023-04-17post', FALSE], + ['release/pre2023-04-17post', FALSE], + + ['hotfix/202-04-17', FALSE], + ['hotfix/2023-4-17', FALSE], + ['hotfix/2023-04-1', FALSE], + ['hotfix/pre2023-04-17', FALSE], + ['hotfix/2023-04-17post', FALSE], + ['hotfix/pre2023-04-17post', FALSE], + + ['release/123.456.789-something', FALSE], + ['release/123.456.789-rc', FALSE], + ['release/123.456.789-rc123', FALSE], + ['release/123.456.789-rc-123', FALSE], + ['release/123.456.789-prerc123', FALSE], + ['release/123.456.789-rcpost123', FALSE], + ['release/123.456.789-prercpost123', FALSE], + ['release/123.456.789-rc123something', FALSE], + ['release/123.456.789-rc.123something', FALSE], + ['release/123.456.789-rc.123-something', FALSE], + + ['hotfix/123.456.789-something', FALSE], + ['hotfix/123.456.789-rc', FALSE], + ['hotfix/123.456.789-rc123', FALSE], + ['hotfix/123.456.789-rc-123', FALSE], + ['hotfix/123.456.789-prerc123', FALSE], + ['hotfix/123.456.789-rcpost123', FALSE], + ['hotfix/123.456.789-prercpost123', FALSE], + ['hotfix/123.456.789-rc123something', FALSE], + ['hotfix/123.456.789-rc.123something', FALSE], + ['hotfix/123.456.789-rc.123-something', FALSE], + + ['prefeature/something', FALSE], + ['prerelease/something', FALSE], + ['prehotfix/something', FALSE], + ['featurepost/something', FALSE], + ['releasepost/something', FALSE], + ['hotfixpost/something', FALSE], + ['prefeaturepost/something', FALSE], + ['prereleasepost/something', FALSE], + ['prehotfixpost/something', FALSE], + ]; + } + +} diff --git a/tests/phpunit/unit/CivicthemeCreateSubthemeScriptUnitTest.php b/tests/phpunit/CivicthemeCreateSubthemeScriptUnitTest.php similarity index 95% rename from tests/phpunit/unit/CivicthemeCreateSubthemeScriptUnitTest.php rename to tests/phpunit/CivicthemeCreateSubthemeScriptUnitTest.php index f5e4f83b2..eae57cefa 100644 --- a/tests/phpunit/unit/CivicthemeCreateSubthemeScriptUnitTest.php +++ b/tests/phpunit/CivicthemeCreateSubthemeScriptUnitTest.php @@ -16,14 +16,14 @@ class CivicthemeCreateSubthemeScriptUnitTest extends ScriptUnitTestBase { /** * {@inheritdoc} */ - protected $script = 'docroot/themes/contrib/civictheme/civictheme_create_subtheme.php'; + protected $script = 'web/themes/contrib/civictheme/civictheme_create_subtheme.php'; /** * CivicTheme dir. * * @var string */ - protected $civicthemeDir = 'docroot/themes/contrib/civictheme'; + protected $civicthemeDir = 'web/themes/contrib/civictheme'; /** * @dataProvider dataProviderMain @@ -163,30 +163,30 @@ public function dataProviderTestLocation() { // CivicTheme in 'contrib', new theme in 'custom' dir. // No new_theme_directory specified - use default one. [ - 'docroot/themes/contrib/civictheme', + 'web/themes/contrib/civictheme', '', - 'docroot/themes/custom/new_theme', + 'web/themes/custom/new_theme', '../../contrib/civictheme/', ], // CivicTheme in 'contrib', new theme in 'custom' dir. Same as default. [ - 'docroot/themes/contrib/civictheme', + 'web/themes/contrib/civictheme', '../../custom/new_theme', - 'docroot/themes/custom/new_theme', + 'web/themes/custom/new_theme', '../../contrib/civictheme/', ], // CivicTheme in 'contrib', new theme not in 'custom' dir. [ - 'docroot/themes/contrib/civictheme', + 'web/themes/contrib/civictheme', '../../new_theme', - 'docroot/themes/new_theme', + 'web/themes/new_theme', '../contrib/civictheme/', ], // CivicTheme not in 'contrib', new theme not in 'custom' dir. [ - 'docroot/themes/civictheme', + 'web/themes/civictheme', '../new_theme', - 'docroot/themes/new_theme', + 'web/themes/new_theme', '../civictheme/', ], // CivicTheme in root, new theme in root dir. @@ -210,10 +210,10 @@ public function dataProviderTestLocation() { * @runInSeparateProcess */ public function testExamplesRemoval() { - $civictheme_dir = 'docroot/themes/contrib/civictheme'; + $civictheme_dir = 'web/themes/contrib/civictheme'; $newtheme_rel_dir = ''; $newtheme_name = 'new_theme'; - $expected_newtheme_dir = 'docroot/themes/custom/new_theme'; + $expected_newtheme_dir = 'web/themes/custom/new_theme'; $expected_rel_path = '../../contrib/civictheme/'; $this->prepareSut($civictheme_dir); diff --git a/tests/phpunit/Drupal/DatabaseSettingsTest.php b/tests/phpunit/Drupal/DatabaseSettingsTest.php new file mode 100644 index 000000000..5f4418df2 --- /dev/null +++ b/tests/phpunit/Drupal/DatabaseSettingsTest.php @@ -0,0 +1,74 @@ +setEnvVars($vars); + + $this->requireSettingsFile(); + + $this->assertEquals($expected, $this->databases); + } + + /** + * Data provider for resulting database settings. + */ + public function dataProviderDatabases(): array { + return [ + [ + [], + [ + 'default' => [ + 'default' => [ + 'database' => 'drupal', + 'username' => 'drupal', + 'password' => 'drupal', + 'host' => 'localhost', + 'port' => '', + 'driver' => 'mysql', + 'prefix' => '', + ], + ], + ], + ], + + [ + [ + 'MARIADB_DATABASE' => 'test_db_name', + 'MARIADB_USERNAME' => 'test_db_user', + 'MARIADB_PASSWORD' => 'test_db_pass', + 'MARIADB_HOST' => 'test_db_host', + 'MARIADB_PORT' => 'test_db_port', + ], + [ + 'default' => [ + 'default' => [ + 'database' => 'test_db_name', + 'username' => 'test_db_user', + 'password' => 'test_db_pass', + 'host' => 'test_db_host', + 'port' => 'test_db_port', + 'driver' => 'mysql', + 'prefix' => '', + ], + ], + ], + ], + ]; + } + +} diff --git a/tests/phpunit/Drupal/EnvironmentSettingsTest.php b/tests/phpunit/Drupal/EnvironmentSettingsTest.php new file mode 100644 index 000000000..6ba98120f --- /dev/null +++ b/tests/phpunit/Drupal/EnvironmentSettingsTest.php @@ -0,0 +1,521 @@ +setEnvVars($vars); + + $this->requireSettingsFile(); + + $this->assertEquals($expected_env, $this->settings['environment']); + } + + /** + * Data provider for testing of the resulting environment. + */ + public function dataProviderEnvironmentTypeResolution(): array { + $this->requireSettingsFile(); + + return [ + // By default, the default environment type is local. + [[], static::ENVIRONMENT_LOCAL], + + // CI. + [ + [ + 'CI' => 1, + ], + static::ENVIRONMENT_CI, + ], + + // Lagoon. + [ + [ + 'LAGOON' => 1, + ], + static::ENVIRONMENT_LOCAL, + ], + + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'production', + ], + static::ENVIRONMENT_PROD, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_GIT_BRANCH' => 'main', + 'DREVOPS_LAGOON_PRODUCTION_BRANCH' => 'main', + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + ], + static::ENVIRONMENT_PROD, + ], + + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => 'release', + ], + static::ENVIRONMENT_DEV, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => 'release/1.2.3', + ], + static::ENVIRONMENT_TEST, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => 'hotfix', + ], + static::ENVIRONMENT_DEV, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => 'hotfix/1.2.3', + ], + static::ENVIRONMENT_TEST, + ], + + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => FALSE, + ], + static::ENVIRONMENT_DEV, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'DREVOPS_LAGOON_PRODUCTION_BRANCH' => FALSE, + ], + static::ENVIRONMENT_DEV, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => FALSE, + 'DREVOPS_LAGOON_PRODUCTION_BRANCH' => FALSE, + ], + static::ENVIRONMENT_DEV, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => 'somebranch', + 'DREVOPS_LAGOON_PRODUCTION_BRANCH' => FALSE, + ], + static::ENVIRONMENT_DEV, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => FALSE, + 'DREVOPS_LAGOON_PRODUCTION_BRANCH' => 'otherbranch', + ], + static::ENVIRONMENT_DEV, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => 'somebranch', + 'DREVOPS_LAGOON_PRODUCTION_BRANCH' => 'otherbranch', + ], + static::ENVIRONMENT_DEV, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => '', + 'DREVOPS_LAGOON_PRODUCTION_BRANCH' => '', + ], + static::ENVIRONMENT_DEV, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_GIT_BRANCH' => 'somebranch', + 'DREVOPS_LAGOON_PRODUCTION_BRANCH' => 'somebranch', + ], + static::ENVIRONMENT_PROD, + ], + [ + [ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + ], + static::ENVIRONMENT_DEV, + ], + ]; + } + + /** + * Test generic settings without any environment overrides. + */ + public function testEnvironmentGeneric(): void { + $this->setEnvVars([ + 'DRUPAL_ENVIRONMENT' => static::ENVIRONMENT_SUT, + ]); + + $this->requireSettingsFile(); + + $config['environment_indicator.indicator']['bg_color'] = '#006600'; + $config['environment_indicator.indicator']['fg_color'] = '#ffffff'; + $config['environment_indicator.indicator']['name'] = static::ENVIRONMENT_SUT; + $config['environment_indicator.settings']['favicon'] = TRUE; + $config['environment_indicator.settings']['toolbar_integration'] = [TRUE]; + $config['maintenance_theme'] = 'civictheme'; + $config['shield.settings']['shield_enable'] = TRUE; + $config['system.performance']['cache']['page']['max_age'] = 900; + $config['system.performance']['css']['preprocess'] = 1; + $config['system.performance']['js']['preprocess'] = 1; + $this->assertConfig($config); + + $settings['config_exclude_modules'] = []; + $settings['config_sync_directory'] = '../config/default'; + $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; + $settings['entity_update_batch_size'] = 50; + $settings['environment'] = static::ENVIRONMENT_SUT; + $settings['file_private_path'] = 'sites/default/files/private'; + $settings['file_scan_ignore_directories'] = [ + 'node_modules', + 'bower_components', + ]; + $settings['file_temp_path'] = static::TMP_PATH_TESTING; + $settings['hash_salt'] = hash('sha256', getenv('MARIADB_HOST') ?: 'localhost'); + $settings['trusted_host_patterns'] = [ + '^.+\.docker\.amazee\.io$', + '^nginx$', + ]; + $this->assertSettings($settings); + } + + /** + * Test per-environment settings for LOCAL environment. + */ + public function testEnvironmentLocal(): void { + $this->setEnvVars([ + 'DRUPAL_ENVIRONMENT' => static::ENVIRONMENT_LOCAL, + ]); + + $this->requireSettingsFile(); + + $config['automated_cron.settings']['interval'] = 0; + $config['environment_indicator.indicator']['bg_color'] = '#006600'; + $config['environment_indicator.indicator']['fg_color'] = '#ffffff'; + $config['environment_indicator.indicator']['name'] = static::ENVIRONMENT_LOCAL; + $config['environment_indicator.settings']['favicon'] = TRUE; + $config['environment_indicator.settings']['toolbar_integration'] = [TRUE]; + $config['maintenance_theme'] = 'civictheme'; + $config['shield.settings']['shield_enable'] = FALSE; + $config['system.logging']['error_level'] = 'all'; + $config['system.performance']['cache']['page']['max_age'] = 900; + $config['system.performance']['css']['preprocess'] = 1; + $config['system.performance']['js']['preprocess'] = 1; + $this->assertConfig($config); + + $settings['config_exclude_modules'] = []; + $settings['config_sync_directory'] = '../config/default'; + $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; + $settings['entity_update_batch_size'] = 50; + $settings['environment'] = static::ENVIRONMENT_LOCAL; + $settings['file_private_path'] = 'sites/default/files/private'; + $settings['file_scan_ignore_directories'] = [ + 'node_modules', + 'bower_components', + ]; + $settings['file_temp_path'] = static::TMP_PATH_TESTING; + $settings['hash_salt'] = hash('sha256', getenv('MARIADB_HOST') ?: 'localhost'); + $settings['skip_permissions_hardening'] = TRUE; + $settings['trusted_host_patterns'] = [ + '^.+\.docker\.amazee\.io$', + '^nginx$', + ]; + $this->assertSettings($settings); + } + + /** + * Test per-environment settings for CI environment. + */ + public function testEnvironmentCi(): void { + $this->setEnvVars([ + 'CI' => TRUE, + ]); + + $this->requireSettingsFile(); + + $config['automated_cron.settings']['interval'] = 0; + $config['environment_indicator.indicator']['bg_color'] = '#006600'; + $config['environment_indicator.indicator']['fg_color'] = '#ffffff'; + $config['environment_indicator.indicator']['name'] = static::ENVIRONMENT_CI; + $config['environment_indicator.settings']['favicon'] = TRUE; + $config['environment_indicator.settings']['toolbar_integration'] = [TRUE]; + $config['maintenance_theme'] = 'civictheme'; + $config['shield.settings']['shield_enable'] = FALSE; + $config['system.performance']['cache']['page']['max_age'] = 900; + $config['system.performance']['css']['preprocess'] = 1; + $config['system.performance']['js']['preprocess'] = 1; + $this->assertConfig($config); + + $settings['config_exclude_modules'] = []; + $settings['config_sync_directory'] = '../config/default'; + $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; + $settings['entity_update_batch_size'] = 50; + $settings['environment'] = static::ENVIRONMENT_CI; + $settings['file_private_path'] = 'sites/default/files/private'; + $settings['file_scan_ignore_directories'] = [ + 'node_modules', + 'bower_components', + ]; + $settings['file_temp_path'] = static::TMP_PATH_TESTING; + $settings['hash_salt'] = hash('sha256', getenv('MARIADB_HOST') ?: 'localhost'); + $settings['skip_permissions_hardening'] = TRUE; + $settings['suspend_mail_send'] = TRUE; + $settings['trusted_host_patterns'] = [ + '^.+\.docker\.amazee\.io$', + '^nginx$', + ]; + + $this->assertSettings($settings); + } + + /** + * Test per-environment settings for dynamic environment. + */ + public function testEnvironmentLagoonDynamic(): void { + $this->setEnvVars([ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_ROUTES' => 'http://example1.com,https://example2/com', + 'LAGOON_PROJECT' => 'test_project', + 'LAGOON_GIT_BRANCH' => 'test_branch', + 'LAGOON_GIT_SAFE_BRANCH' => 'test_branch', + ]); + + $this->requireSettingsFile(); + + $config['environment_indicator.indicator']['bg_color'] = '#4caf50'; + $config['environment_indicator.indicator']['fg_color'] = '#000000'; + $config['environment_indicator.indicator']['name'] = static::ENVIRONMENT_DEV; + $config['environment_indicator.settings']['favicon'] = TRUE; + $config['environment_indicator.settings']['toolbar_integration'] = [TRUE]; + $config['maintenance_theme'] = 'civictheme'; + $config['shield.settings']['shield_enable'] = TRUE; + $config['system.performance']['cache']['page']['max_age'] = 900; + $config['system.performance']['css']['preprocess'] = 1; + $config['system.performance']['js']['preprocess'] = 1; + $this->assertConfig($config); + + $settings['cache_prefix']['default'] = 'test_project_test_branch'; + $settings['config_exclude_modules'] = []; + $settings['config_sync_directory'] = '../config/default'; + $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; + $settings['entity_update_batch_size'] = 50; + $settings['environment'] = static::ENVIRONMENT_DEV; + $settings['file_private_path'] = 'sites/default/files/private'; + $settings['file_scan_ignore_directories'] = [ + 'node_modules', + 'bower_components', + ]; + $settings['file_temp_path'] = static::TMP_PATH_TESTING; + $settings['hash_salt'] = hash('sha256', getenv('MARIADB_HOST') ?: 'localhost'); + $settings['reverse_proxy'] = TRUE; + $settings['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP'; + $settings['trusted_host_patterns'][] = '^.+\.docker\.amazee\.io$'; + $settings['trusted_host_patterns'][] = '^nginx$'; + $settings['trusted_host_patterns'][] = '^nginx\-php$'; + $settings['trusted_host_patterns'][] = '^.+\.au\.amazee\.io$'; + $settings['trusted_host_patterns'][] = '^example1\.com|example2/com$'; + $this->assertSettings($settings); + } + + /** + * Test per-environment settings for Dev environment. + */ + public function testEnvironmentLagoonDev(): void { + $this->setEnvVars([ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_ROUTES' => 'http://example1.com,https://example2/com', + 'LAGOON_PROJECT' => 'test_project', + 'LAGOON_GIT_BRANCH' => 'develop', + 'LAGOON_GIT_SAFE_BRANCH' => 'develop', + ]); + + $this->requireSettingsFile(); + + $config['environment_indicator.indicator']['bg_color'] = '#4caf50'; + $config['environment_indicator.indicator']['fg_color'] = '#000000'; + $config['environment_indicator.indicator']['name'] = static::ENVIRONMENT_DEV; + $config['environment_indicator.settings']['favicon'] = TRUE; + $config['environment_indicator.settings']['toolbar_integration'] = [TRUE]; + $config['maintenance_theme'] = 'civictheme'; + $config['shield.settings']['shield_enable'] = TRUE; + $config['system.performance']['cache']['page']['max_age'] = 900; + $config['system.performance']['css']['preprocess'] = 1; + $config['system.performance']['js']['preprocess'] = 1; + $this->assertConfig($config); + + $settings['cache_prefix']['default'] = 'test_project_develop'; + $settings['config_exclude_modules'] = []; + $settings['config_sync_directory'] = '../config/default'; + $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; + $settings['entity_update_batch_size'] = 50; + $settings['environment'] = static::ENVIRONMENT_DEV; + $settings['file_private_path'] = 'sites/default/files/private'; + $settings['file_scan_ignore_directories'] = [ + 'node_modules', + 'bower_components', + ]; + $settings['file_temp_path'] = static::TMP_PATH_TESTING; + $settings['hash_salt'] = hash('sha256', getenv('MARIADB_HOST') ?: 'localhost'); + $settings['reverse_proxy'] = TRUE; + $settings['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP'; + $settings['trusted_host_patterns'][] = '^.+\.docker\.amazee\.io$'; + $settings['trusted_host_patterns'][] = '^nginx$'; + $settings['trusted_host_patterns'][] = '^nginx\-php$'; + $settings['trusted_host_patterns'][] = '^.+\.au\.amazee\.io$'; + $settings['trusted_host_patterns'][] = '^example1\.com|example2/com$'; + $this->assertSettings($settings); + } + + /** + * Test per-environment settings for Test environment. + */ + public function testEnvironmentLagoonTest(): void { + $this->setEnvVars([ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'development', + 'LAGOON_ROUTES' => 'http://example1.com,https://example2/com', + 'LAGOON_PROJECT' => 'test_project', + 'LAGOON_GIT_BRANCH' => 'master', + 'LAGOON_GIT_SAFE_BRANCH' => 'master', + ]); + + $this->requireSettingsFile(); + + $config['environment_indicator.indicator']['bg_color'] = '#fff176'; + $config['environment_indicator.indicator']['fg_color'] = '#000000'; + $config['environment_indicator.indicator']['name'] = static::ENVIRONMENT_TEST; + $config['environment_indicator.settings']['favicon'] = TRUE; + $config['environment_indicator.settings']['toolbar_integration'] = [TRUE]; + $config['maintenance_theme'] = 'civictheme'; + $config['shield.settings']['shield_enable'] = TRUE; + $config['system.performance']['cache']['page']['max_age'] = 900; + $config['system.performance']['css']['preprocess'] = 1; + $config['system.performance']['js']['preprocess'] = 1; + $this->assertConfig($config); + + $settings['cache_prefix']['default'] = 'test_project_master'; + $settings['config_exclude_modules'] = []; + $settings['config_sync_directory'] = '../config/default'; + $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; + $settings['entity_update_batch_size'] = 50; + $settings['environment'] = static::ENVIRONMENT_TEST; + $settings['file_private_path'] = 'sites/default/files/private'; + $settings['file_scan_ignore_directories'] = [ + 'node_modules', + 'bower_components', + ]; + $settings['file_temp_path'] = static::TMP_PATH_TESTING; + $settings['hash_salt'] = hash('sha256', getenv('MARIADB_HOST') ?: 'localhost'); + $settings['reverse_proxy'] = TRUE; + $settings['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP'; + $settings['trusted_host_patterns'][] = '^.+\.docker\.amazee\.io$'; + $settings['trusted_host_patterns'][] = '^nginx$'; + $settings['trusted_host_patterns'][] = '^nginx\-php$'; + $settings['trusted_host_patterns'][] = '^.+\.au\.amazee\.io$'; + $settings['trusted_host_patterns'][] = '^example1\.com|example2/com$'; + $this->assertSettings($settings); + } + + /** + * Test per-environment settings for Prod environment. + */ + public function testEnvironmentLagoonProd(): void { + $this->setEnvVars([ + 'LAGOON' => 1, + 'LAGOON_ENVIRONMENT_TYPE' => 'production', + 'LAGOON_ROUTES' => 'http://example1.com,https://example2/com', + 'LAGOON_PROJECT' => 'test_project', + 'LAGOON_GIT_BRANCH' => 'production', + 'LAGOON_GIT_SAFE_BRANCH' => 'production', + 'DREVOPS_LAGOON_PRODUCTION_BRANCH' => 'production', + ]); + + $this->requireSettingsFile(); + + $config['environment_indicator.indicator']['bg_color'] = '#ef5350'; + $config['environment_indicator.indicator']['fg_color'] = '#000000'; + $config['environment_indicator.indicator']['name'] = static::ENVIRONMENT_PROD; + $config['environment_indicator.settings']['favicon'] = TRUE; + $config['environment_indicator.settings']['toolbar_integration'] = [TRUE]; + $config['maintenance_theme'] = 'civictheme'; + $config['system.performance']['cache']['page']['max_age'] = 900; + $config['system.performance']['css']['preprocess'] = 1; + $config['system.performance']['js']['preprocess'] = 1; + $this->assertConfig($config); + + $settings['cache_prefix']['default'] = 'test_project_production'; + $settings['config_exclude_modules'] = []; + $settings['config_sync_directory'] = '../config/default'; + $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; + $settings['entity_update_batch_size'] = 50; + $settings['environment'] = static::ENVIRONMENT_PROD; + $settings['file_private_path'] = 'sites/default/files/private'; + $settings['file_scan_ignore_directories'] = [ + 'node_modules', + 'bower_components', + ]; + $settings['file_temp_path'] = static::TMP_PATH_TESTING; + $settings['hash_salt'] = hash('sha256', getenv('MARIADB_HOST') ?: 'localhost'); + $settings['reverse_proxy'] = TRUE; + $settings['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP'; + $settings['trusted_host_patterns'][] = '^.+\.docker\.amazee\.io$'; + $settings['trusted_host_patterns'][] = '^nginx$'; + $settings['trusted_host_patterns'][] = '^nginx\-php$'; + $settings['trusted_host_patterns'][] = '^.+\.au\.amazee\.io$'; + $settings['trusted_host_patterns'][] = '^example1\.com|example2/com$'; + $this->assertSettings($settings); + } + +} diff --git a/tests/phpunit/Drupal/SettingsTestCase.php b/tests/phpunit/Drupal/SettingsTestCase.php new file mode 100644 index 000000000..6b84c4cee --- /dev/null +++ b/tests/phpunit/Drupal/SettingsTestCase.php @@ -0,0 +1,351 @@ +unsetEnvVars(); + + parent::tearDown(); + } + + /** + * Set environment variables. + * + * @param array $vars + * Array of environment variables. + * + * @SuppressWarnings(PHPMD.ElseExpression) + */ + protected function setEnvVars(array $vars): void { + if (!isset($vars['CI'])) { + $vars['CI'] = FALSE; + } + + if (!isset($vars['LAGOON'])) { + $vars['LAGOON'] = FALSE; + } + + $vars['TMP'] = static::TMP_PATH_TESTING; + + // Filtered real vars without a value to unset them in the lines below. + $vars_real = self::getRealEnvVarsFilteredNoValues([ + // Service variables. + 'MARIADB_', + 'REDIS_', + 'COMPOSE_', + 'GITHUB_', + 'DOCKER_', + // DrevOps and Drupal variables. + 'DREVOPS_', + 'DRUPAL_', + ]); + + // Passed vars + existing vars + filtered real vars. + $this->envVars = $vars + $this->envVars + $vars_real; + + foreach ($this->envVars as $name => $value) { + // Unset the variable if it has a value of NULL. + if (is_null($value)) { + putenv("$name"); + } + else { + putenv("$name=$value"); + } + } + } + + /** + * Get real environment variables with no values. + * + * @param array $prefixes + * Array of prefixes to filter the variables by. + * + * @return array + * Array of environment variables. + */ + protected static function getRealEnvVarsFilteredNoValues(array $prefixes = []): array { + $vars = getenv(); + + $vars = array_filter(array_keys($vars), function ($key) use ($prefixes) { + foreach ($prefixes as $prefix) { + if (str_starts_with($key, $prefix)) { + return TRUE; + } + } + + return FALSE; + }); + + return array_fill_keys($vars, NULL); + } + + /** + * Set environment variables. + */ + protected function unsetEnvVars(): void { + foreach (array_keys($this->envVars) as $name) { + putenv("$name"); + } + } + + /** + * Require settings file. + */ + protected function requireSettingsFile(): void { + $app_root = './web'; + $site_path = 'sites/default'; + $config = []; + $settings = []; + $databases = []; + + require getcwd() . DIRECTORY_SEPARATOR . $app_root . '/' . $site_path . '/settings.php'; + + $this->app_root = $app_root; + $this->site_path = $site_path; + $this->config = $config; + $this->settings = $settings; + $this->databases = $databases; + } + + /** + * Assert that config retrieved from the real settings file match test data. + * + * @param array $expected + * Array of expected configs. + * @param array $expected_keys_only + * Array of expected configs that will be asserted by keys and data type + * only. This is used for cases when the data should exist but the value + * is static. Supports only top-level keys. + */ + protected function assertConfig(array $expected, array $expected_keys_only = []): void { + $actual_keys_only = array_intersect_key($this->config, $expected_keys_only); + $actual = array_diff_key($this->config, $expected_keys_only); + + $this->assertEquals($expected, $actual, 'Configs'); + $this->assertArrayContainsKeysTypes($expected_keys_only, $actual_keys_only, 'Config'); + } + + /** + * Assert that config contains partial data. + * + * @param array $expected + * Array of expected configs. + */ + protected function assertConfigContains(array $expected): void { + $this->assertArraySubset($expected, $this->config, 'Config array contains'); + } + + /** + * Assert that config does not contain partial data. + * + * @param array $expected + * Array of expected configs. + */ + protected function assertConfigNotContains(array $expected): void { + $this->assertArrayNotSubset($expected, $this->config, 'Config array does not contain'); + } + + /** + * Assert that settings retrieved from the real settings file match test data. + * + * @param array $expected + * Array of expected setting. + * @param array $expected_keys_only + * Array of expected setting that will be asserted by keys and data type + * only. This is used for cases when the data should exist but the value + * is static. Supports only top-level keys. + */ + protected function assertSettings(array $expected, array $expected_keys_only = []): void { + $actual_keys_only = array_intersect_key($this->settings, $expected_keys_only); + $actual = array_diff_key($this->settings, $expected_keys_only); + + $this->assertEquals($expected, $actual, 'Settings'); + $this->assertArrayContainsKeysTypes($expected_keys_only, $actual_keys_only, 'Settings'); + } + + /** + * Assert that settings contain partial data. + * + * @param array $expected + * Array of expected settings. + */ + protected function assertSettingsContains(array $expected): void { + $this->assertArraySubset($expected, $this->settings, 'Settings array contains'); + } + + /** + * Assert that settings do not contain partial data. + * + * @param array $expected + * Array of expected settings. + */ + protected function assertSettingsNotContains(array $expected): void { + $this->assertArrayNotSubset($expected, $this->settings, 'Settings array does not contain'); + } + + /** + * Assert that an array contains a subset. + * + * @param array $subset + * Array of subset to search for. + * @param array $haystack + * Array to search in. + * @param string $message + * Message to display on failure. + * + * @SuppressWarnings(PHPMD.ElseExpression) + */ + protected function assertArraySubset(array $subset, array $haystack, string $message = ''): void { + foreach ($subset as $key => $value) { + $this->assertTrue(array_key_exists($key, $haystack), $message . ": Key {$key} does not exist."); + + if (is_array($value)) { + $this->assertArraySubset($value, $haystack[$key], $message); + } + else { + $this->assertEquals($value, $haystack[$key], $message); + } + } + } + + /** + * Assert that an array does not contain a subset. + * + * This is not a mirror of the assertArraySubset: it does not check the value + * of the key, only the key itself. + * + * @param array $subset + * Array of subset to search for. + * @param array $haystack + * Array to search in. + * @param string $message + * Message to display on failure. + */ + protected function assertArrayNotSubset(array $subset, array $haystack, string $message = ''): void { + foreach ($subset as $key => $value) { + if (is_array($value)) { + $this->assertArrayNotSubset($value, $haystack[$key] ?? [], $message); + continue; + } + + $this->assertFalse(array_key_exists($key, $haystack), $message . ": Key {$key} exists at the deepest level."); + } + } + + /** + * Assert that an array contains a subset by keys and value data types. + * + * Used for cases when the data in array path should exist but the value + * itself does not matter. + * + * @param array $subset + * Array to search for. + * @param array $haystack + * Array to search in. + * @param string $message + * Message to display on failure. + */ + protected function assertArrayContainsKeysTypes(array $subset, array $haystack, string $message = ''): void { + $message = !empty($message) ? $message . ': ' : $message; + foreach ($subset as $key => $value) { + $this->assertArrayHasKey($key, $haystack, $message . 'Keys of key-only values match'); + $this->assertEquals(gettype($value), gettype($haystack[$key]), $message . 'Types of key-only values match'); + } + } + +} diff --git a/tests/phpunit/Drupal/SwitchableSettingsTest.php b/tests/phpunit/Drupal/SwitchableSettingsTest.php new file mode 100644 index 000000000..f59b2fac7 --- /dev/null +++ b/tests/phpunit/Drupal/SwitchableSettingsTest.php @@ -0,0 +1,202 @@ +setEnvVars([ + 'DRUPAL_ENVIRONMENT' => $env, + ]); + + $this->requireSettingsFile(); + + $this->assertConfigContains($expected_present); + $this->assertConfigNotContains($expected_absent); + } + + /** + * Data provider for testEntityPrint(). + */ + public function dataProviderEnvironmentIndicator(): array { + return [ + [ + static::ENVIRONMENT_LOCAL, + [ + 'environment_indicator.indicator' => ['name' => static::ENVIRONMENT_LOCAL, 'bg_color' => '#006600', 'fg_color' => '#ffffff'], + 'environment_indicator.settings' => ['toolbar_integration' => [TRUE], 'favicon' => TRUE], + ], + ], + [ + static::ENVIRONMENT_CI, + [ + 'environment_indicator.indicator' => ['name' => static::ENVIRONMENT_CI, 'bg_color' => '#006600', 'fg_color' => '#ffffff'], + 'environment_indicator.settings' => ['toolbar_integration' => [TRUE], 'favicon' => TRUE], + ], + ], + [ + static::ENVIRONMENT_DEV, + [ + 'environment_indicator.indicator' => ['name' => static::ENVIRONMENT_DEV, 'bg_color' => '#4caf50', 'fg_color' => '#000000'], + 'environment_indicator.settings' => ['toolbar_integration' => [TRUE], 'favicon' => TRUE], + ], + ], + [ + static::ENVIRONMENT_TEST, + [ + 'environment_indicator.indicator' => ['name' => static::ENVIRONMENT_TEST, 'bg_color' => '#fff176', 'fg_color' => '#000000'], + 'environment_indicator.settings' => ['toolbar_integration' => [TRUE], 'favicon' => TRUE], + ], + ], + [ + static::ENVIRONMENT_PROD, + [ + 'environment_indicator.indicator' => ['name' => static::ENVIRONMENT_PROD, 'bg_color' => '#ef5350', 'fg_color' => '#000000'], + 'environment_indicator.settings' => ['toolbar_integration' => [TRUE], 'favicon' => TRUE], + ], + ], + [ + static::ENVIRONMENT_SUT, + [ + 'environment_indicator.indicator' => ['name' => static::ENVIRONMENT_SUT, 'bg_color' => '#006600', 'fg_color' => '#ffffff'], + 'environment_indicator.settings' => ['toolbar_integration' => [TRUE], 'favicon' => TRUE], + ], + ], + ]; + } + + /** + * Test Shield config. + * + * @dataProvider dataProviderShield + */ + public function testShield(string $env, array $vars, array $expected_present, array $expected_absent = []): void { + $this->setEnvVars($vars + ['DRUPAL_ENVIRONMENT' => $env]); + + $this->requireSettingsFile(); + + $this->assertConfigContains($expected_present); + $this->assertConfigNotContains($expected_absent); + } + + /** + * Data provider for testShield(). + */ + public function dataProviderShield(): array { + return [ + [ + static::ENVIRONMENT_LOCAL, + [], + [ + 'shield.settings' => ['shield_enable' => FALSE], + ], + [ + 'shield.settings' => ['credentials' => ['shield' => ['user' => 'drupal_shield_user', 'pass' => 'drupal_shield_pass']], 'print' => 'drupal_shield_print'], + ], + ], + [ + static::ENVIRONMENT_LOCAL, + [ + 'DRUPAL_SHIELD_USER' => 'drupal_shield_user', + ], + [ + 'shield.settings' => ['shield_enable' => FALSE], + ], + [ + 'shield.settings' => ['credentials' => ['shield' => ['user' => 'drupal_shield_user', 'pass' => 'drupal_shield_pass']], 'print' => 'drupal_shield_print'], + ], + ], + [ + static::ENVIRONMENT_LOCAL, + [ + 'DRUPAL_SHIELD_USER' => 'drupal_shield_user', + 'DRUPAL_SHIELD_PASS' => 'drupal_shield_pass', + 'DRUPAL_SHIELD_PRINT' => 'drupal_shield_print', + ], + [ + 'shield.settings' => ['shield_enable' => FALSE, 'credentials' => ['shield' => ['user' => 'drupal_shield_user', 'pass' => 'drupal_shield_pass']], 'print' => 'drupal_shield_print'], + ], + ], + + [ + static::ENVIRONMENT_CI, + [ + 'DRUPAL_SHIELD_USER' => 'drupal_shield_user', + 'DRUPAL_SHIELD_PASS' => 'drupal_shield_pass', + 'DRUPAL_SHIELD_PRINT' => 'drupal_shield_print', + ], + [ + 'shield.settings' => ['shield_enable' => FALSE, 'credentials' => ['shield' => ['user' => 'drupal_shield_user', 'pass' => 'drupal_shield_pass']], 'print' => 'drupal_shield_print'], + ], + ], + + [ + static::ENVIRONMENT_DEV, + [ + 'DRUPAL_SHIELD_USER' => 'drupal_shield_user', + 'DRUPAL_SHIELD_PASS' => 'drupal_shield_pass', + 'DRUPAL_SHIELD_PRINT' => 'drupal_shield_print', + ], + [ + 'shield.settings' => ['shield_enable' => TRUE, 'credentials' => ['shield' => ['user' => 'drupal_shield_user', 'pass' => 'drupal_shield_pass']], 'print' => 'drupal_shield_print'], + ], + ], + + [ + static::ENVIRONMENT_TEST, + [ + 'DRUPAL_SHIELD_USER' => 'drupal_shield_user', + 'DRUPAL_SHIELD_PASS' => 'drupal_shield_pass', + 'DRUPAL_SHIELD_PRINT' => 'drupal_shield_print', + ], + [ + 'shield.settings' => ['shield_enable' => TRUE, 'credentials' => ['shield' => ['user' => 'drupal_shield_user', 'pass' => 'drupal_shield_pass']], 'print' => 'drupal_shield_print'], + ], + ], + + [ + static::ENVIRONMENT_PROD, + [ + 'DRUPAL_SHIELD_USER' => 'drupal_shield_user', + 'DRUPAL_SHIELD_PASS' => 'drupal_shield_pass', + 'DRUPAL_SHIELD_PRINT' => 'drupal_shield_print', + ], + [ + 'shield.settings' => ['credentials' => ['shield' => ['user' => 'drupal_shield_user', 'pass' => 'drupal_shield_pass']], 'print' => 'drupal_shield_print'], + ], + [ + 'shield.settings' => ['shield_enable' => FALSE], + ], + ], + + [ + static::ENVIRONMENT_SUT, + [ + 'DRUPAL_SHIELD_USER' => 'drupal_shield_user', + 'DRUPAL_SHIELD_PASS' => 'drupal_shield_pass', + 'DRUPAL_SHIELD_PRINT' => 'drupal_shield_print', + ], + [ + 'shield.settings' => ['shield_enable' => TRUE, 'credentials' => ['shield' => ['user' => 'drupal_shield_user', 'pass' => 'drupal_shield_pass']], 'print' => 'drupal_shield_print'], + ], + ], + ]; + } + +} diff --git a/tests/phpunit/unit/ExtractCssColorsToCsvScriptUnitTest.php b/tests/phpunit/ExtractCssColorsToCsvScriptUnitTest.php similarity index 99% rename from tests/phpunit/unit/ExtractCssColorsToCsvScriptUnitTest.php rename to tests/phpunit/ExtractCssColorsToCsvScriptUnitTest.php index f1418ea24..da41a7e80 100644 --- a/tests/phpunit/unit/ExtractCssColorsToCsvScriptUnitTest.php +++ b/tests/phpunit/ExtractCssColorsToCsvScriptUnitTest.php @@ -16,7 +16,7 @@ class ExtractCssColorsToCsvScriptUnitTest extends ScriptUnitTestBase { /** * {@inheritdoc} */ - protected $script = 'docroot/themes/contrib/civictheme/civictheme_library/scripts/extract_css_colors_to_csv.php'; + protected $script = 'web/themes/contrib/civictheme/civictheme_library/scripts/extract_css_colors_to_csv.php'; /** * @dataProvider dataProviderMain diff --git a/tests/phpunit/unit/ScriptUnitTestBase.php b/tests/phpunit/ScriptUnitTestBase.php similarity index 100% rename from tests/phpunit/unit/ScriptUnitTestBase.php rename to tests/phpunit/ScriptUnitTestBase.php diff --git a/docroot/.editorconfig b/web/.editorconfig similarity index 100% rename from docroot/.editorconfig rename to web/.editorconfig diff --git a/docroot/.eslintignore b/web/.eslintignore similarity index 100% rename from docroot/.eslintignore rename to web/.eslintignore diff --git a/docroot/.gitattributes b/web/.gitattributes similarity index 100% rename from docroot/.gitattributes rename to web/.gitattributes diff --git a/docroot/.htaccess b/web/.htaccess similarity index 99% rename from docroot/.htaccess rename to web/.htaccess index ef10d6549..3a99e15b2 100644 --- a/docroot/.htaccess +++ b/web/.htaccess @@ -109,7 +109,7 @@ AddEncoding gzip svgz RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Redirect to HTTPS. - # @todo: Uncomment below once the certificate is available. + # @todo: Uncomment once the certificate is available. # RewriteCond %{HTTPS} off # RewriteCond %{HTTP:X-Forwarded-Proto} !https # RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] diff --git a/docroot/autoload.php b/web/autoload.php similarity index 69% rename from docroot/autoload.php rename to web/autoload.php index 2c470f339..4722f6c9e 100644 --- a/docroot/autoload.php +++ b/web/autoload.php @@ -4,7 +4,8 @@ * @file * Includes the autoloader created by Composer. * - * This file was generated by drupal-scaffold. + * This file was generated by drupal-composer/drupal-scaffold. + * https://github.com/drupal-composer/drupal-scaffold * * @see composer.json * @see index.php diff --git a/docroot/index.php b/web/index.php similarity index 100% rename from docroot/index.php rename to web/index.php diff --git a/docroot/modules/custom/civictheme_admin/civictheme_admin.info.yml b/web/modules/custom/civictheme_admin/civictheme_admin.info.yml similarity index 100% rename from docroot/modules/custom/civictheme_admin/civictheme_admin.info.yml rename to web/modules/custom/civictheme_admin/civictheme_admin.info.yml diff --git a/docroot/modules/custom/civictheme_admin/civictheme_admin.libraries.yml b/web/modules/custom/civictheme_admin/civictheme_admin.libraries.yml similarity index 100% rename from docroot/modules/custom/civictheme_admin/civictheme_admin.libraries.yml rename to web/modules/custom/civictheme_admin/civictheme_admin.libraries.yml diff --git a/docroot/modules/custom/civictheme_admin/civictheme_admin.module b/web/modules/custom/civictheme_admin/civictheme_admin.module similarity index 100% rename from docroot/modules/custom/civictheme_admin/civictheme_admin.module rename to web/modules/custom/civictheme_admin/civictheme_admin.module diff --git a/docroot/modules/custom/civictheme_admin/composer.json b/web/modules/custom/civictheme_admin/composer.json similarity index 100% rename from docroot/modules/custom/civictheme_admin/composer.json rename to web/modules/custom/civictheme_admin/composer.json diff --git a/docroot/modules/custom/civictheme_admin/css/claro-node-form-overrides.css b/web/modules/custom/civictheme_admin/css/claro-node-form-overrides.css similarity index 100% rename from docroot/modules/custom/civictheme_admin/css/claro-node-form-overrides.css rename to web/modules/custom/civictheme_admin/css/claro-node-form-overrides.css diff --git a/docroot/modules/custom/civictheme_content/README.md b/web/modules/custom/civictheme_content/README.md similarity index 100% rename from docroot/modules/custom/civictheme_content/README.md rename to web/modules/custom/civictheme_content/README.md diff --git a/docroot/modules/custom/civictheme_content/civictheme_content.info.yml b/web/modules/custom/civictheme_content/civictheme_content.info.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/civictheme_content.info.yml rename to web/modules/custom/civictheme_content/civictheme_content.info.yml diff --git a/docroot/modules/custom/civictheme_content/civictheme_content.install b/web/modules/custom/civictheme_content/civictheme_content.install similarity index 100% rename from docroot/modules/custom/civictheme_content/civictheme_content.install rename to web/modules/custom/civictheme_content/civictheme_content.install diff --git a/docroot/modules/custom/civictheme_content/civictheme_content.module b/web/modules/custom/civictheme_content/civictheme_content.module similarity index 100% rename from docroot/modules/custom/civictheme_content/civictheme_content.module rename to web/modules/custom/civictheme_content/civictheme_content.module diff --git a/docroot/modules/custom/civictheme_content/composer.json b/web/modules/custom/civictheme_content/composer.json similarity index 100% rename from docroot/modules/custom/civictheme_content/composer.json rename to web/modules/custom/civictheme_content/composer.json diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.info.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.info.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.info.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.info.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.module b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.module similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.module rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.module diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.post_update.php b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.post_update.php similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.post_update.php rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/civictheme_content_corporate.post_update.php diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/block.block.civictheme_footer_menu_4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/civictheme.settings.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/civictheme.settings.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/civictheme.settings.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/config/optional/civictheme.settings.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/007b3ae2-abf2-4433-a24b-ca8ba79f0faa.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/007b3ae2-abf2-4433-a24b-ca8ba79f0faa.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/007b3ae2-abf2-4433-a24b-ca8ba79f0faa.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/007b3ae2-abf2-4433-a24b-ca8ba79f0faa.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/01a0a6a5-a850-41d8-92aa-ae9a8d74c246.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/01a0a6a5-a850-41d8-92aa-ae9a8d74c246.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/01a0a6a5-a850-41d8-92aa-ae9a8d74c246.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/01a0a6a5-a850-41d8-92aa-ae9a8d74c246.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/053b2b9a-5749-46ce-bb22-9099a6834a06.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/053b2b9a-5749-46ce-bb22-9099a6834a06.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/053b2b9a-5749-46ce-bb22-9099a6834a06.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/053b2b9a-5749-46ce-bb22-9099a6834a06.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/12e3b76e-5e63-43d2-bd99-6827a8c9ab2a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/12e3b76e-5e63-43d2-bd99-6827a8c9ab2a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/12e3b76e-5e63-43d2-bd99-6827a8c9ab2a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/12e3b76e-5e63-43d2-bd99-6827a8c9ab2a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/191f9e3a-a6fb-4bbd-87af-6e3bba478137.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/191f9e3a-a6fb-4bbd-87af-6e3bba478137.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/191f9e3a-a6fb-4bbd-87af-6e3bba478137.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/191f9e3a-a6fb-4bbd-87af-6e3bba478137.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/1f1a4e3d-78a0-45af-a8c8-8eb593fc6268.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/1f1a4e3d-78a0-45af-a8c8-8eb593fc6268.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/1f1a4e3d-78a0-45af-a8c8-8eb593fc6268.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/1f1a4e3d-78a0-45af-a8c8-8eb593fc6268.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/26e57960-218e-475d-a8c6-dc8479949be4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/26e57960-218e-475d-a8c6-dc8479949be4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/26e57960-218e-475d-a8c6-dc8479949be4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/26e57960-218e-475d-a8c6-dc8479949be4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/26e7545a-e4c1-428a-b26e-426503dfd65b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/26e7545a-e4c1-428a-b26e-426503dfd65b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/26e7545a-e4c1-428a-b26e-426503dfd65b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/26e7545a-e4c1-428a-b26e-426503dfd65b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/2bc80ea6-0298-425d-b208-fbdfb28c8f4f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/2bc80ea6-0298-425d-b208-fbdfb28c8f4f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/2bc80ea6-0298-425d-b208-fbdfb28c8f4f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/2bc80ea6-0298-425d-b208-fbdfb28c8f4f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/2d198020-d27e-4282-b716-cc436c2dd893.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/2d198020-d27e-4282-b716-cc436c2dd893.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/2d198020-d27e-4282-b716-cc436c2dd893.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/2d198020-d27e-4282-b716-cc436c2dd893.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/360f9b1c-e7b9-4760-a308-a94d04bad54a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/360f9b1c-e7b9-4760-a308-a94d04bad54a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/360f9b1c-e7b9-4760-a308-a94d04bad54a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/360f9b1c-e7b9-4760-a308-a94d04bad54a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/3bea3131-85bd-4eac-aeaf-702733630f62.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/3bea3131-85bd-4eac-aeaf-702733630f62.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/3bea3131-85bd-4eac-aeaf-702733630f62.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/3bea3131-85bd-4eac-aeaf-702733630f62.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/4ddb8852-8fcb-4b78-8e8e-72c66006acae.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/4ddb8852-8fcb-4b78-8e8e-72c66006acae.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/4ddb8852-8fcb-4b78-8e8e-72c66006acae.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/4ddb8852-8fcb-4b78-8e8e-72c66006acae.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/587355c9-c76b-459d-adf8-8829c2fe4181.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/587355c9-c76b-459d-adf8-8829c2fe4181.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/587355c9-c76b-459d-adf8-8829c2fe4181.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/587355c9-c76b-459d-adf8-8829c2fe4181.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/82f5b00f-1b04-4dfe-9e50-c466bd3fedd2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/82f5b00f-1b04-4dfe-9e50-c466bd3fedd2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/82f5b00f-1b04-4dfe-9e50-c466bd3fedd2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/82f5b00f-1b04-4dfe-9e50-c466bd3fedd2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/883ede75-67e4-43c6-9945-9818dc31b543.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/883ede75-67e4-43c6-9945-9818dc31b543.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/883ede75-67e4-43c6-9945-9818dc31b543.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/883ede75-67e4-43c6-9945-9818dc31b543.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/8883d22c-effe-45ae-b13e-9fd5e7df6481.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/8883d22c-effe-45ae-b13e-9fd5e7df6481.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/8883d22c-effe-45ae-b13e-9fd5e7df6481.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/8883d22c-effe-45ae-b13e-9fd5e7df6481.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/8e3e4ca6-a85a-4e67-a550-58ebde6a2cb9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/8e3e4ca6-a85a-4e67-a550-58ebde6a2cb9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/8e3e4ca6-a85a-4e67-a550-58ebde6a2cb9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/8e3e4ca6-a85a-4e67-a550-58ebde6a2cb9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/933037cf-e8cb-46a0-8132-4668036e90a0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/933037cf-e8cb-46a0-8132-4668036e90a0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/933037cf-e8cb-46a0-8132-4668036e90a0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/933037cf-e8cb-46a0-8132-4668036e90a0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/93b3fe72-f6fe-4608-b904-cdf6d8037397.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/93b3fe72-f6fe-4608-b904-cdf6d8037397.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/93b3fe72-f6fe-4608-b904-cdf6d8037397.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/93b3fe72-f6fe-4608-b904-cdf6d8037397.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/9f9718c6-9f12-4e44-be68-cf82e94ab271.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/9f9718c6-9f12-4e44-be68-cf82e94ab271.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/9f9718c6-9f12-4e44-be68-cf82e94ab271.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/9f9718c6-9f12-4e44-be68-cf82e94ab271.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a6e06ca7-a003-4089-9a92-f8716ed8a210.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a6e06ca7-a003-4089-9a92-f8716ed8a210.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a6e06ca7-a003-4089-9a92-f8716ed8a210.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a6e06ca7-a003-4089-9a92-f8716ed8a210.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a804e5e0-4ede-47fd-8307-08d1a18c7455.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a804e5e0-4ede-47fd-8307-08d1a18c7455.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a804e5e0-4ede-47fd-8307-08d1a18c7455.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a804e5e0-4ede-47fd-8307-08d1a18c7455.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a8235202-f85a-48b8-b90c-380ea5587f96.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a8235202-f85a-48b8-b90c-380ea5587f96.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a8235202-f85a-48b8-b90c-380ea5587f96.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/a8235202-f85a-48b8-b90c-380ea5587f96.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ae7d79af-9aa4-455d-a415-26191e3ba7c4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ae7d79af-9aa4-455d-a415-26191e3ba7c4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ae7d79af-9aa4-455d-a415-26191e3ba7c4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ae7d79af-9aa4-455d-a415-26191e3ba7c4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/af42e607-0099-4be4-b695-05795ac1a1e2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/af42e607-0099-4be4-b695-05795ac1a1e2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/af42e607-0099-4be4-b695-05795ac1a1e2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/af42e607-0099-4be4-b695-05795ac1a1e2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b1778031-4905-4f37-a8bd-5652f0382822.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b1778031-4905-4f37-a8bd-5652f0382822.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b1778031-4905-4f37-a8bd-5652f0382822.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b1778031-4905-4f37-a8bd-5652f0382822.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b19ce70e-881e-422f-b03d-70c9677b0892.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b19ce70e-881e-422f-b03d-70c9677b0892.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b19ce70e-881e-422f-b03d-70c9677b0892.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b19ce70e-881e-422f-b03d-70c9677b0892.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b44c9271-2aab-432e-bac7-f228b60e9c72.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b44c9271-2aab-432e-bac7-f228b60e9c72.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b44c9271-2aab-432e-bac7-f228b60e9c72.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/b44c9271-2aab-432e-bac7-f228b60e9c72.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/bde928ff-d995-4831-bd0e-ad03e08e48aa.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/bde928ff-d995-4831-bd0e-ad03e08e48aa.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/bde928ff-d995-4831-bd0e-ad03e08e48aa.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/bde928ff-d995-4831-bd0e-ad03e08e48aa.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/c77ca2da-b928-4f98-a39d-9b56b646bcd6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/c77ca2da-b928-4f98-a39d-9b56b646bcd6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/c77ca2da-b928-4f98-a39d-9b56b646bcd6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/c77ca2da-b928-4f98-a39d-9b56b646bcd6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/civictheme_demo_background_1.png b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/civictheme_demo_background_1.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/civictheme_demo_background_1.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/civictheme_demo_background_1.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_banner_background.png b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_banner_background.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_banner_background.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_banner_background.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_bottles.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_bottles.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_bottles.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_bottles.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_clown-fish_2.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_clown-fish_2.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_clown-fish_2.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_clown-fish_2.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_clown-fish_3.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_clown-fish_3.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_clown-fish_3.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_clown-fish_3.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_document.pdf b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_document.pdf similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_document.pdf rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_document.pdf diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_dsd.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_dsd.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_dsd.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_dsd.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fire-silhouettes.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fire-silhouettes.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fire-silhouettes.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fire-silhouettes.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fire.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fire.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fire.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fire.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fish-in-water.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fish-in-water.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fish-in-water.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fish-in-water.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fish-plastic.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fish-plastic.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fish-plastic.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_fish-plastic.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_glacier.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_glacier.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_glacier.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_glacier.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_great-barrier-reef.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_great-barrier-reef.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_great-barrier-reef.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_great-barrier-reef.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_iceberg.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_iceberg.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_iceberg.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_iceberg.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_download.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_download.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_download.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_download.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_facebook.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_facebook.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_facebook.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_facebook.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_linkedin.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_linkedin.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_linkedin.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_linkedin.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_twitter.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_twitter.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_twitter.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_icon_twitter.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_image.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_image.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_image.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_image.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_koala.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_koala.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_koala.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_koala.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_microscope.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_microscope.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_microscope.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_microscope.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_power-plant.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_power-plant.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_power-plant.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_power-plant.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_rainforest.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_rainforest.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_rainforest.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_rainforest.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_science-beakers.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_science-beakers.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_science-beakers.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_science-beakers.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_scientist.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_scientist.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_scientist.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_scientist.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_seals.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_seals.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_seals.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_seals.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_seedling.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_seedling.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_seedling.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_seedling.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_solar-panels.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_solar-panels.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_solar-panels.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_solar-panels.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_starfish.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_starfish.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_starfish.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_starfish.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_tree.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_tree.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_tree.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_tree.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_turtle.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_turtle.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_turtle.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_turtle.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_twelve-apostles.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_twelve-apostles.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_twelve-apostles.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_twelve-apostles.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_underwater.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_underwater.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_underwater.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_underwater.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_windfarm.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_windfarm.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_windfarm.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_windfarm.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_woman-flowers.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_woman-flowers.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_woman-flowers.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_woman-flowers.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_woman.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_woman.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_woman.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/corporate_woman.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/d091e99a-55b9-4f80-80c1-b188186537da.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/d091e99a-55b9-4f80-80c1-b188186537da.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/d091e99a-55b9-4f80-80c1-b188186537da.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/d091e99a-55b9-4f80-80c1-b188186537da.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/d415ede9-ef24-420d-bb6d-7ccfc40b4694.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/d415ede9-ef24-420d-bb6d-7ccfc40b4694.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/d415ede9-ef24-420d-bb6d-7ccfc40b4694.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/d415ede9-ef24-420d-bb6d-7ccfc40b4694.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/dca5f3cf-f9a1-4f56-a0ed-9e06dd9cc320.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/dca5f3cf-f9a1-4f56-a0ed-9e06dd9cc320.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/dca5f3cf-f9a1-4f56-a0ed-9e06dd9cc320.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/dca5f3cf-f9a1-4f56-a0ed-9e06dd9cc320.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/de13d35d-8d49-4a7c-9ea7-8f21b0964176.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/de13d35d-8d49-4a7c-9ea7-8f21b0964176.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/de13d35d-8d49-4a7c-9ea7-8f21b0964176.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/de13d35d-8d49-4a7c-9ea7-8f21b0964176.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/e153aace-9481-405a-b544-87a40034bb0a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/e153aace-9481-405a-b544-87a40034bb0a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/e153aace-9481-405a-b544-87a40034bb0a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/e153aace-9481-405a-b544-87a40034bb0a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/e9b4a5d5-ef8d-4cdb-bb87-834f46c7ca0f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/e9b4a5d5-ef8d-4cdb-bb87-834f46c7ca0f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/e9b4a5d5-ef8d-4cdb-bb87-834f46c7ca0f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/e9b4a5d5-ef8d-4cdb-bb87-834f46c7ca0f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ed8e9a4c-f7bf-4bd1-905f-450330b22859.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ed8e9a4c-f7bf-4bd1-905f-450330b22859.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ed8e9a4c-f7bf-4bd1-905f-450330b22859.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ed8e9a4c-f7bf-4bd1-905f-450330b22859.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ee83d96e-d783-4db6-9149-3db4e9cab340.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ee83d96e-d783-4db6-9149-3db4e9cab340.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ee83d96e-d783-4db6-9149-3db4e9cab340.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/ee83d96e-d783-4db6-9149-3db4e9cab340.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/facebook.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/facebook.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/facebook.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/facebook.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/generic.png b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/generic.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/generic.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/generic.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/linkedin.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/linkedin.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/linkedin.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/linkedin.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/twitter.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/twitter.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/twitter.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/file/twitter.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/00156c6c-d949-4382-b7d0-78d15fa49b38.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/00156c6c-d949-4382-b7d0-78d15fa49b38.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/00156c6c-d949-4382-b7d0-78d15fa49b38.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/00156c6c-d949-4382-b7d0-78d15fa49b38.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/04ee0921-1bea-4795-b670-3b0f75b17645.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/04ee0921-1bea-4795-b670-3b0f75b17645.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/04ee0921-1bea-4795-b670-3b0f75b17645.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/04ee0921-1bea-4795-b670-3b0f75b17645.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/0eb512d0-d116-48f7-83bb-ae07c3eb2c91.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/0eb512d0-d116-48f7-83bb-ae07c3eb2c91.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/0eb512d0-d116-48f7-83bb-ae07c3eb2c91.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/0eb512d0-d116-48f7-83bb-ae07c3eb2c91.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/1273590e-5a80-45ee-9172-0e1b9343ddb3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/1273590e-5a80-45ee-9172-0e1b9343ddb3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/1273590e-5a80-45ee-9172-0e1b9343ddb3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/1273590e-5a80-45ee-9172-0e1b9343ddb3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/2283dfc9-d10f-40d6-8cf5-4a3a2d2ef158.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/2283dfc9-d10f-40d6-8cf5-4a3a2d2ef158.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/2283dfc9-d10f-40d6-8cf5-4a3a2d2ef158.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/2283dfc9-d10f-40d6-8cf5-4a3a2d2ef158.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/26820d38-aabc-4c1d-a6df-09fa62a3fe8a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/26820d38-aabc-4c1d-a6df-09fa62a3fe8a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/26820d38-aabc-4c1d-a6df-09fa62a3fe8a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/26820d38-aabc-4c1d-a6df-09fa62a3fe8a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/429966d5-50c7-433a-bdcf-5d58e1e6e21c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/429966d5-50c7-433a-bdcf-5d58e1e6e21c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/429966d5-50c7-433a-bdcf-5d58e1e6e21c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/429966d5-50c7-433a-bdcf-5d58e1e6e21c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/4729baf2-63ab-48e2-9c47-ce82acc1f0d1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/4729baf2-63ab-48e2-9c47-ce82acc1f0d1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/4729baf2-63ab-48e2-9c47-ce82acc1f0d1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/4729baf2-63ab-48e2-9c47-ce82acc1f0d1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/485fc9fd-b6ce-4ff1-a0ac-88ea2fe7fdb9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/485fc9fd-b6ce-4ff1-a0ac-88ea2fe7fdb9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/485fc9fd-b6ce-4ff1-a0ac-88ea2fe7fdb9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/485fc9fd-b6ce-4ff1-a0ac-88ea2fe7fdb9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/48a4995f-75fc-4bb4-b43b-8dcd81f3f68b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/48a4995f-75fc-4bb4-b43b-8dcd81f3f68b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/48a4995f-75fc-4bb4-b43b-8dcd81f3f68b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/48a4995f-75fc-4bb4-b43b-8dcd81f3f68b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6ce72705-bab7-4dce-9ca5-4a3ae097faa3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6ce72705-bab7-4dce-9ca5-4a3ae097faa3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6ce72705-bab7-4dce-9ca5-4a3ae097faa3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6ce72705-bab7-4dce-9ca5-4a3ae097faa3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6d127a84-70f5-43d3-a0dc-ee2872d97c8b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6d127a84-70f5-43d3-a0dc-ee2872d97c8b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6d127a84-70f5-43d3-a0dc-ee2872d97c8b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6d127a84-70f5-43d3-a0dc-ee2872d97c8b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6eb923f5-2fa8-49b1-ac4c-46d587ec25eb.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6eb923f5-2fa8-49b1-ac4c-46d587ec25eb.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6eb923f5-2fa8-49b1-ac4c-46d587ec25eb.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/6eb923f5-2fa8-49b1-ac4c-46d587ec25eb.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/7238591b-bca0-46bf-b6df-534a1fdb2ddf.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/7238591b-bca0-46bf-b6df-534a1fdb2ddf.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/7238591b-bca0-46bf-b6df-534a1fdb2ddf.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/7238591b-bca0-46bf-b6df-534a1fdb2ddf.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/78eb0cf4-882f-47e4-8607-1f254809e9e8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/78eb0cf4-882f-47e4-8607-1f254809e9e8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/78eb0cf4-882f-47e4-8607-1f254809e9e8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/78eb0cf4-882f-47e4-8607-1f254809e9e8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/86c71cbb-5ab3-41f9-bf7c-f30cd426dbf0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/86c71cbb-5ab3-41f9-bf7c-f30cd426dbf0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/86c71cbb-5ab3-41f9-bf7c-f30cd426dbf0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/86c71cbb-5ab3-41f9-bf7c-f30cd426dbf0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/87adbef4-9cbd-4c1a-b0d7-bca60377d755.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/87adbef4-9cbd-4c1a-b0d7-bca60377d755.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/87adbef4-9cbd-4c1a-b0d7-bca60377d755.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/87adbef4-9cbd-4c1a-b0d7-bca60377d755.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8810505e-9c28-43b9-b019-a0a034701b3a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8810505e-9c28-43b9-b019-a0a034701b3a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8810505e-9c28-43b9-b019-a0a034701b3a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8810505e-9c28-43b9-b019-a0a034701b3a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/889585ce-c08e-4957-9c33-75025e910242.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/889585ce-c08e-4957-9c33-75025e910242.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/889585ce-c08e-4957-9c33-75025e910242.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/889585ce-c08e-4957-9c33-75025e910242.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8c64e0b7-9541-4191-868c-42d5adeb2828.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8c64e0b7-9541-4191-868c-42d5adeb2828.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8c64e0b7-9541-4191-868c-42d5adeb2828.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8c64e0b7-9541-4191-868c-42d5adeb2828.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8f8df77d-5b85-48d9-a1f7-b85782d47a78.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8f8df77d-5b85-48d9-a1f7-b85782d47a78.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8f8df77d-5b85-48d9-a1f7-b85782d47a78.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/8f8df77d-5b85-48d9-a1f7-b85782d47a78.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/971cc0f7-9e06-4f64-b58b-32d68848d5b3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/971cc0f7-9e06-4f64-b58b-32d68848d5b3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/971cc0f7-9e06-4f64-b58b-32d68848d5b3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/971cc0f7-9e06-4f64-b58b-32d68848d5b3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/9dd16162-6e1b-43f7-821e-003f0711b0a9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/9dd16162-6e1b-43f7-821e-003f0711b0a9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/9dd16162-6e1b-43f7-821e-003f0711b0a9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/9dd16162-6e1b-43f7-821e-003f0711b0a9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/a8b62c0c-3e6c-450b-93b4-df5956b87cce.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/a8b62c0c-3e6c-450b-93b4-df5956b87cce.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/a8b62c0c-3e6c-450b-93b4-df5956b87cce.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/a8b62c0c-3e6c-450b-93b4-df5956b87cce.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ab44a2e7-acd4-4276-bf83-3c6fd3e71271.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ab44a2e7-acd4-4276-bf83-3c6fd3e71271.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ab44a2e7-acd4-4276-bf83-3c6fd3e71271.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ab44a2e7-acd4-4276-bf83-3c6fd3e71271.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ba705a5b-91ca-4f48-9d82-feeabb645cff.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ba705a5b-91ca-4f48-9d82-feeabb645cff.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ba705a5b-91ca-4f48-9d82-feeabb645cff.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ba705a5b-91ca-4f48-9d82-feeabb645cff.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/bd746089-5c3c-4fb4-aab5-fe9f5cacc821.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/bd746089-5c3c-4fb4-aab5-fe9f5cacc821.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/bd746089-5c3c-4fb4-aab5-fe9f5cacc821.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/bd746089-5c3c-4fb4-aab5-fe9f5cacc821.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/c66b84d0-bd69-4330-96d2-71e1ecddebf0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/c66b84d0-bd69-4330-96d2-71e1ecddebf0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/c66b84d0-bd69-4330-96d2-71e1ecddebf0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/c66b84d0-bd69-4330-96d2-71e1ecddebf0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/cde35fb7-b01d-4074-ba94-bb62303e27d9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/cde35fb7-b01d-4074-ba94-bb62303e27d9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/cde35fb7-b01d-4074-ba94-bb62303e27d9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/cde35fb7-b01d-4074-ba94-bb62303e27d9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/d862309a-96ab-4961-9e69-28ccc203a5ff.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/d862309a-96ab-4961-9e69-28ccc203a5ff.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/d862309a-96ab-4961-9e69-28ccc203a5ff.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/d862309a-96ab-4961-9e69-28ccc203a5ff.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e0a78fef-3e3a-4b96-b303-974ac8fec445.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e0a78fef-3e3a-4b96-b303-974ac8fec445.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e0a78fef-3e3a-4b96-b303-974ac8fec445.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e0a78fef-3e3a-4b96-b303-974ac8fec445.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e5c0b1c2-b993-40e6-a760-5a0f5565fe10.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e5c0b1c2-b993-40e6-a760-5a0f5565fe10.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e5c0b1c2-b993-40e6-a760-5a0f5565fe10.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e5c0b1c2-b993-40e6-a760-5a0f5565fe10.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e7ab9bae-edec-4639-b196-9dece305235d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e7ab9bae-edec-4639-b196-9dece305235d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e7ab9bae-edec-4639-b196-9dece305235d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/e7ab9bae-edec-4639-b196-9dece305235d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/eb524ad3-657f-4287-bafd-7b76b3619831.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/eb524ad3-657f-4287-bafd-7b76b3619831.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/eb524ad3-657f-4287-bafd-7b76b3619831.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/eb524ad3-657f-4287-bafd-7b76b3619831.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ec6f5030-d733-45c9-bd47-50de3d053e5c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ec6f5030-d733-45c9-bd47-50de3d053e5c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ec6f5030-d733-45c9-bd47-50de3d053e5c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/ec6f5030-d733-45c9-bd47-50de3d053e5c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/f06a9e48-e4bc-4e1d-9646-047d984c36ca.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/f06a9e48-e4bc-4e1d-9646-047d984c36ca.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/f06a9e48-e4bc-4e1d-9646-047d984c36ca.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/f06a9e48-e4bc-4e1d-9646-047d984c36ca.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/f9278a83-d921-4890-ad30-e0d3050ef74a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/f9278a83-d921-4890-ad30-e0d3050ef74a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/f9278a83-d921-4890-ad30-e0d3050ef74a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/f9278a83-d921-4890-ad30-e0d3050ef74a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/fcd683b6-ea34-4310-aedd-7731ff476cbc.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/fcd683b6-ea34-4310-aedd-7731ff476cbc.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/fcd683b6-ea34-4310-aedd-7731ff476cbc.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/media/fcd683b6-ea34-4310-aedd-7731ff476cbc.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0457b4f7-1a43-4719-8493-c1aa9d92464e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0457b4f7-1a43-4719-8493-c1aa9d92464e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0457b4f7-1a43-4719-8493-c1aa9d92464e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0457b4f7-1a43-4719-8493-c1aa9d92464e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/047776b6-e8cc-45e1-8798-c50ecca06bcb.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/047776b6-e8cc-45e1-8798-c50ecca06bcb.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/047776b6-e8cc-45e1-8798-c50ecca06bcb.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/047776b6-e8cc-45e1-8798-c50ecca06bcb.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/058a0544-81c7-4312-baa0-fae4025ec5bf.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/058a0544-81c7-4312-baa0-fae4025ec5bf.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/058a0544-81c7-4312-baa0-fae4025ec5bf.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/058a0544-81c7-4312-baa0-fae4025ec5bf.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0db77bba-adbf-472e-bbf3-cbe5baff553b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0db77bba-adbf-472e-bbf3-cbe5baff553b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0db77bba-adbf-472e-bbf3-cbe5baff553b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0db77bba-adbf-472e-bbf3-cbe5baff553b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0f2b95c3-af99-44ae-b51c-14322d9d9fb8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0f2b95c3-af99-44ae-b51c-14322d9d9fb8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0f2b95c3-af99-44ae-b51c-14322d9d9fb8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/0f2b95c3-af99-44ae-b51c-14322d9d9fb8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/2541114b-22fd-4fda-aa02-2999c9895777.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/2541114b-22fd-4fda-aa02-2999c9895777.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/2541114b-22fd-4fda-aa02-2999c9895777.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/2541114b-22fd-4fda-aa02-2999c9895777.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/30f111fc-59b1-490e-a535-5383420b55e8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/30f111fc-59b1-490e-a535-5383420b55e8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/30f111fc-59b1-490e-a535-5383420b55e8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/30f111fc-59b1-490e-a535-5383420b55e8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/36e960e5-0a31-4809-a04c-647084058466.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/36e960e5-0a31-4809-a04c-647084058466.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/36e960e5-0a31-4809-a04c-647084058466.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/36e960e5-0a31-4809-a04c-647084058466.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/416ade67-7806-49d2-84db-fc6cce4f1f2e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/416ade67-7806-49d2-84db-fc6cce4f1f2e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/416ade67-7806-49d2-84db-fc6cce4f1f2e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/416ade67-7806-49d2-84db-fc6cce4f1f2e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/4777a693-bdae-43ce-9e09-c5ef60d56a88.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/4777a693-bdae-43ce-9e09-c5ef60d56a88.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/4777a693-bdae-43ce-9e09-c5ef60d56a88.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/4777a693-bdae-43ce-9e09-c5ef60d56a88.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/4d1becca-390e-425a-82f1-7a837683aea7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/4d1becca-390e-425a-82f1-7a837683aea7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/4d1becca-390e-425a-82f1-7a837683aea7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/4d1becca-390e-425a-82f1-7a837683aea7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/59667b00-1356-476f-9323-5436bb5be692.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/59667b00-1356-476f-9323-5436bb5be692.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/59667b00-1356-476f-9323-5436bb5be692.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/59667b00-1356-476f-9323-5436bb5be692.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/84a103bd-a203-42a2-aa47-8087596b4159.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/84a103bd-a203-42a2-aa47-8087596b4159.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/84a103bd-a203-42a2-aa47-8087596b4159.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/84a103bd-a203-42a2-aa47-8087596b4159.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/871e1957-f44a-4adc-a6ae-d7bef561ad12.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/871e1957-f44a-4adc-a6ae-d7bef561ad12.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/871e1957-f44a-4adc-a6ae-d7bef561ad12.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/871e1957-f44a-4adc-a6ae-d7bef561ad12.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/8b2fa8a0-ade0-48a1-a072-d545d36d9ebb.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/8b2fa8a0-ade0-48a1-a072-d545d36d9ebb.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/8b2fa8a0-ade0-48a1-a072-d545d36d9ebb.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/8b2fa8a0-ade0-48a1-a072-d545d36d9ebb.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/8cced355-c841-4e0f-a6b6-f59d801f6d0c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/8cced355-c841-4e0f-a6b6-f59d801f6d0c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/8cced355-c841-4e0f-a6b6-f59d801f6d0c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/8cced355-c841-4e0f-a6b6-f59d801f6d0c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/9635dce4-d427-4114-ac1c-7dc6d45a978f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/9635dce4-d427-4114-ac1c-7dc6d45a978f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/9635dce4-d427-4114-ac1c-7dc6d45a978f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/9635dce4-d427-4114-ac1c-7dc6d45a978f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/a2107071-edef-49ed-8a22-e1a07d45ae2b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/a2107071-edef-49ed-8a22-e1a07d45ae2b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/a2107071-edef-49ed-8a22-e1a07d45ae2b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/a2107071-edef-49ed-8a22-e1a07d45ae2b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b3a3dda4-3901-4cc8-817a-91ecb1b74e2f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b3a3dda4-3901-4cc8-817a-91ecb1b74e2f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b3a3dda4-3901-4cc8-817a-91ecb1b74e2f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b3a3dda4-3901-4cc8-817a-91ecb1b74e2f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b718cfb0-071b-44e6-9d38-039e5e10152e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b718cfb0-071b-44e6-9d38-039e5e10152e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b718cfb0-071b-44e6-9d38-039e5e10152e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b718cfb0-071b-44e6-9d38-039e5e10152e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b90028d5-337e-4b40-8f15-898c4a2a1c2a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b90028d5-337e-4b40-8f15-898c4a2a1c2a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b90028d5-337e-4b40-8f15-898c4a2a1c2a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/b90028d5-337e-4b40-8f15-898c4a2a1c2a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/bde7a36d-4776-4a4e-a21c-c1562252ddde.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/bde7a36d-4776-4a4e-a21c-c1562252ddde.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/bde7a36d-4776-4a4e-a21c-c1562252ddde.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/bde7a36d-4776-4a4e-a21c-c1562252ddde.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d0a13a17-530e-4b39-a5f4-9067b3b88781.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d0a13a17-530e-4b39-a5f4-9067b3b88781.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d0a13a17-530e-4b39-a5f4-9067b3b88781.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d0a13a17-530e-4b39-a5f4-9067b3b88781.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d55b5b63-3364-44fe-bab9-5135a43118b8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d55b5b63-3364-44fe-bab9-5135a43118b8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d55b5b63-3364-44fe-bab9-5135a43118b8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d55b5b63-3364-44fe-bab9-5135a43118b8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d9afa100-6d13-419f-85b0-961e7acdb6e1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d9afa100-6d13-419f-85b0-961e7acdb6e1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d9afa100-6d13-419f-85b0-961e7acdb6e1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/d9afa100-6d13-419f-85b0-961e7acdb6e1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/dca3afe1-b9ab-468d-8b7a-f9ececeba2a7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/dca3afe1-b9ab-468d-8b7a-f9ececeba2a7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/dca3afe1-b9ab-468d-8b7a-f9ececeba2a7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/dca3afe1-b9ab-468d-8b7a-f9ececeba2a7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/de247e03-0ea1-4d32-bbb0-06aa34123279.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/de247e03-0ea1-4d32-bbb0-06aa34123279.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/de247e03-0ea1-4d32-bbb0-06aa34123279.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/de247e03-0ea1-4d32-bbb0-06aa34123279.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/ee89a67c-c256-479d-b85d-c2db725003a5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/ee89a67c-c256-479d-b85d-c2db725003a5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/ee89a67c-c256-479d-b85d-c2db725003a5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/ee89a67c-c256-479d-b85d-c2db725003a5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/eeed004b-9d43-48fe-b99e-74289614ad56.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/eeed004b-9d43-48fe-b99e-74289614ad56.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/eeed004b-9d43-48fe-b99e-74289614ad56.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/eeed004b-9d43-48fe-b99e-74289614ad56.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/f1f66752-e425-42a2-a966-09adc983b29c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/f1f66752-e425-42a2-a966-09adc983b29c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/f1f66752-e425-42a2-a966-09adc983b29c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/f1f66752-e425-42a2-a966-09adc983b29c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/f45bf798-cdf1-46fc-b27a-3fd6472fba25.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/f45bf798-cdf1-46fc-b27a-3fd6472fba25.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/f45bf798-cdf1-46fc-b27a-3fd6472fba25.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/f45bf798-cdf1-46fc-b27a-3fd6472fba25.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/ffcaaf1f-bcfa-458c-b938-5c1c1208a940.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/ffcaaf1f-bcfa-458c-b938-5c1c1208a940.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/ffcaaf1f-bcfa-458c-b938-5c1c1208a940.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/menu_link_content/ffcaaf1f-bcfa-458c-b938-5c1c1208a940.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/08cead14-37a7-476d-8526-4814867bdb76.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/08cead14-37a7-476d-8526-4814867bdb76.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/08cead14-37a7-476d-8526-4814867bdb76.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/08cead14-37a7-476d-8526-4814867bdb76.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/0a840065-4343-4868-9004-61442d313eac.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/0a840065-4343-4868-9004-61442d313eac.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/0a840065-4343-4868-9004-61442d313eac.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/0a840065-4343-4868-9004-61442d313eac.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/2da124a0-129a-4b03-9f02-dd33a90793b4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/2da124a0-129a-4b03-9f02-dd33a90793b4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/2da124a0-129a-4b03-9f02-dd33a90793b4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/2da124a0-129a-4b03-9f02-dd33a90793b4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/454edaba-477b-45fa-934d-1b2b2b7899fb.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/454edaba-477b-45fa-934d-1b2b2b7899fb.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/454edaba-477b-45fa-934d-1b2b2b7899fb.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/454edaba-477b-45fa-934d-1b2b2b7899fb.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/51efffb7-e00c-48ee-a5a4-8eabb7c9e903.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/51efffb7-e00c-48ee-a5a4-8eabb7c9e903.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/51efffb7-e00c-48ee-a5a4-8eabb7c9e903.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/51efffb7-e00c-48ee-a5a4-8eabb7c9e903.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/5c582abf-9d2b-4a03-a7b1-dd84e4cfedc9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/5c582abf-9d2b-4a03-a7b1-dd84e4cfedc9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/5c582abf-9d2b-4a03-a7b1-dd84e4cfedc9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/5c582abf-9d2b-4a03-a7b1-dd84e4cfedc9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/64931832-7e31-4493-81b4-a2a46061dda3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/64931832-7e31-4493-81b4-a2a46061dda3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/64931832-7e31-4493-81b4-a2a46061dda3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/64931832-7e31-4493-81b4-a2a46061dda3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/6ec9411b-6148-420b-ab02-87466c42db1f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/6ec9411b-6148-420b-ab02-87466c42db1f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/6ec9411b-6148-420b-ab02-87466c42db1f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/6ec9411b-6148-420b-ab02-87466c42db1f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/74076f33-5c1e-4b09-9522-bbafd6e43afb.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/74076f33-5c1e-4b09-9522-bbafd6e43afb.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/74076f33-5c1e-4b09-9522-bbafd6e43afb.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/74076f33-5c1e-4b09-9522-bbafd6e43afb.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/7a35464b-da5b-4edb-a490-6bcd54339f29.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/7a35464b-da5b-4edb-a490-6bcd54339f29.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/7a35464b-da5b-4edb-a490-6bcd54339f29.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/7a35464b-da5b-4edb-a490-6bcd54339f29.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/853e999d-a302-4cc0-baeb-f419c91bcf3f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/853e999d-a302-4cc0-baeb-f419c91bcf3f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/853e999d-a302-4cc0-baeb-f419c91bcf3f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/853e999d-a302-4cc0-baeb-f419c91bcf3f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/855f86ae-b6a9-477c-8827-6b13b5c8ff41.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/855f86ae-b6a9-477c-8827-6b13b5c8ff41.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/855f86ae-b6a9-477c-8827-6b13b5c8ff41.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/855f86ae-b6a9-477c-8827-6b13b5c8ff41.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/aa31c2e9-f0af-4e1b-9fde-088ec81403bb.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/aa31c2e9-f0af-4e1b-9fde-088ec81403bb.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/aa31c2e9-f0af-4e1b-9fde-088ec81403bb.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/aa31c2e9-f0af-4e1b-9fde-088ec81403bb.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/c8ee30e2-85e5-42db-b27a-92e508eacd0c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/c8ee30e2-85e5-42db-b27a-92e508eacd0c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/c8ee30e2-85e5-42db-b27a-92e508eacd0c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/c8ee30e2-85e5-42db-b27a-92e508eacd0c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/c99ffbb4-3782-498c-9d69-23419e9643e1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/c99ffbb4-3782-498c-9d69-23419e9643e1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/c99ffbb4-3782-498c-9d69-23419e9643e1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/c99ffbb4-3782-498c-9d69-23419e9643e1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/ce6b14c7-f782-40c6-884d-47724566ec60.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/ce6b14c7-f782-40c6-884d-47724566ec60.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/ce6b14c7-f782-40c6-884d-47724566ec60.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/ce6b14c7-f782-40c6-884d-47724566ec60.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/d044d201-6f40-41ed-bdbd-595bfa72cc4d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/d044d201-6f40-41ed-bdbd-595bfa72cc4d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/d044d201-6f40-41ed-bdbd-595bfa72cc4d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/d044d201-6f40-41ed-bdbd-595bfa72cc4d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/d073b4ba-18b3-49a2-97b6-b02cb22f1a40.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/d073b4ba-18b3-49a2-97b6-b02cb22f1a40.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/d073b4ba-18b3-49a2-97b6-b02cb22f1a40.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/d073b4ba-18b3-49a2-97b6-b02cb22f1a40.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/e2401264-b563-4b62-9d77-b5c107909bf4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/e2401264-b563-4b62-9d77-b5c107909bf4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/e2401264-b563-4b62-9d77-b5c107909bf4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/e2401264-b563-4b62-9d77-b5c107909bf4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/ef661701-2c8e-4ea4-b927-2d2ecad7617e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/ef661701-2c8e-4ea4-b927-2d2ecad7617e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/ef661701-2c8e-4ea4-b927-2d2ecad7617e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/node/ef661701-2c8e-4ea4-b927-2d2ecad7617e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/bb1443d2-3262-4f61-be2c-e9730424054f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/bb1443d2-3262-4f61-be2c-e9730424054f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/bb1443d2-3262-4f61-be2c-e9730424054f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/bb1443d2-3262-4f61-be2c-e9730424054f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/e1db1abb-7e92-482d-8acf-157b173885c2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/e1db1abb-7e92-482d-8acf-157b173885c2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/e1db1abb-7e92-482d-8acf-157b173885c2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_corporate/content/taxonomy_term/e1db1abb-7e92-482d-8acf-157b173885c2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.info.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.info.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.info.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.info.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.module b/web/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.module similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.module rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.module diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.post_update.php b/web/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.post_update.php similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.post_update.php rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/civictheme_content_default.post_update.php diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/config/optional/civictheme.settings.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/config/optional/civictheme.settings.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/config/optional/civictheme.settings.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/config/optional/civictheme.settings.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/044c817e-14ba-43ad-b98e-07f860d1bf1a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/044c817e-14ba-43ad-b98e-07f860d1bf1a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/044c817e-14ba-43ad-b98e-07f860d1bf1a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/044c817e-14ba-43ad-b98e-07f860d1bf1a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/2803908c-77d8-460b-b084-3185c392797e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/2803908c-77d8-460b-b084-3185c392797e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/2803908c-77d8-460b-b084-3185c392797e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/2803908c-77d8-460b-b084-3185c392797e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/2d26321f-07ae-44be-9dfc-58566e94cfc8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/2d26321f-07ae-44be-9dfc-58566e94cfc8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/2d26321f-07ae-44be-9dfc-58566e94cfc8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/2d26321f-07ae-44be-9dfc-58566e94cfc8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/33ec0e62-3317-435d-b1cb-1e42e42e3260.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/33ec0e62-3317-435d-b1cb-1e42e42e3260.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/33ec0e62-3317-435d-b1cb-1e42e42e3260.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/33ec0e62-3317-435d-b1cb-1e42e42e3260.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/4a5c5b53-bad3-4ac6-adb8-d07f3167bb28.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/4a5c5b53-bad3-4ac6-adb8-d07f3167bb28.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/4a5c5b53-bad3-4ac6-adb8-d07f3167bb28.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/4a5c5b53-bad3-4ac6-adb8-d07f3167bb28.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/570c6899-92bc-4317-aa07-274a431d618f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/570c6899-92bc-4317-aa07-274a431d618f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/570c6899-92bc-4317-aa07-274a431d618f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/570c6899-92bc-4317-aa07-274a431d618f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Adopt the DIY approach.png b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Adopt the DIY approach.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Adopt the DIY approach.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Adopt the DIY approach.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Do it yourself - The DIY approach.png b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Do it yourself - The DIY approach.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Do it yourself - The DIY approach.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Do it yourself - The DIY approach.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Facebook.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Facebook.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Facebook.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Facebook.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Linkedin.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Linkedin.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Linkedin.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Linkedin.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Tried and tested components.png b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Tried and tested components.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Tried and tested components.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Tried and tested components.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Twitter.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Twitter.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Twitter.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/Twitter.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/a7807b15-8d13-4d42-9615-d7756db3a11d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/a7807b15-8d13-4d42-9615-d7756db3a11d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/a7807b15-8d13-4d42-9615-d7756db3a11d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/a7807b15-8d13-4d42-9615-d7756db3a11d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/c31b572d-b1d2-441b-a491-b373d6c54e2f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/c31b572d-b1d2-441b-a491-b373d6c54e2f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/c31b572d-b1d2-441b-a491-b373d6c54e2f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/c31b572d-b1d2-441b-a491-b373d6c54e2f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/civictheme_demo_background_1.png b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/civictheme_demo_background_1.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/civictheme_demo_background_1.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/civictheme_demo_background_1.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_govcms-visual-white-paper.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_govcms-visual-white-paper.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_govcms-visual-white-paper.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_govcms-visual-white-paper.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_image.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_image.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_image.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_image.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_image_ricardo-esquivel.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_image_ricardo-esquivel.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_image_ricardo-esquivel.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_image_ricardo-esquivel.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_nature.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_nature.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_nature.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/demo_nature.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/generic.png b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/generic.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/generic.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/file/generic.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/209291bc-81be-41c7-912c-70d695e9376c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/209291bc-81be-41c7-912c-70d695e9376c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/209291bc-81be-41c7-912c-70d695e9376c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/209291bc-81be-41c7-912c-70d695e9376c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/2b8021df-e474-4b3a-8b91-62844aefe844.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/2b8021df-e474-4b3a-8b91-62844aefe844.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/2b8021df-e474-4b3a-8b91-62844aefe844.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/2b8021df-e474-4b3a-8b91-62844aefe844.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/35a65b40-b6a0-428d-bce3-3bd7c918f84b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/35a65b40-b6a0-428d-bce3-3bd7c918f84b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/35a65b40-b6a0-428d-bce3-3bd7c918f84b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/35a65b40-b6a0-428d-bce3-3bd7c918f84b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/4c9975b0-77ca-4f82-95d0-3fb2a1122978.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/4c9975b0-77ca-4f82-95d0-3fb2a1122978.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/4c9975b0-77ca-4f82-95d0-3fb2a1122978.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/4c9975b0-77ca-4f82-95d0-3fb2a1122978.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/68d50fea-aae4-4dde-832c-b385ff9731e1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/68d50fea-aae4-4dde-832c-b385ff9731e1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/68d50fea-aae4-4dde-832c-b385ff9731e1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/68d50fea-aae4-4dde-832c-b385ff9731e1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/81cd5226-50b8-4d4b-ab47-7b9a783cce85.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/81cd5226-50b8-4d4b-ab47-7b9a783cce85.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/81cd5226-50b8-4d4b-ab47-7b9a783cce85.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/81cd5226-50b8-4d4b-ab47-7b9a783cce85.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/846a6a20-2767-4b7f-9f92-4bbe7ad15ac2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/846a6a20-2767-4b7f-9f92-4bbe7ad15ac2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/846a6a20-2767-4b7f-9f92-4bbe7ad15ac2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/846a6a20-2767-4b7f-9f92-4bbe7ad15ac2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/e07cdb41-1bd4-463f-9e7c-126302b24740.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/e07cdb41-1bd4-463f-9e7c-126302b24740.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/e07cdb41-1bd4-463f-9e7c-126302b24740.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/e07cdb41-1bd4-463f-9e7c-126302b24740.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/e2b603ff-038b-4c31-bf8d-6e4eb7346b72.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/e2b603ff-038b-4c31-bf8d-6e4eb7346b72.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/e2b603ff-038b-4c31-bf8d-6e4eb7346b72.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/e2b603ff-038b-4c31-bf8d-6e4eb7346b72.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/faa70cfa-88f0-49e7-81ed-9523560bb0d5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/faa70cfa-88f0-49e7-81ed-9523560bb0d5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/faa70cfa-88f0-49e7-81ed-9523560bb0d5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/media/faa70cfa-88f0-49e7-81ed-9523560bb0d5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/180e120d-0755-466a-97d9-594b24fe120f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/180e120d-0755-466a-97d9-594b24fe120f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/180e120d-0755-466a-97d9-594b24fe120f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/180e120d-0755-466a-97d9-594b24fe120f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3078e95c-7129-4b39-a9ff-e5c80e966a56.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3078e95c-7129-4b39-a9ff-e5c80e966a56.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3078e95c-7129-4b39-a9ff-e5c80e966a56.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3078e95c-7129-4b39-a9ff-e5c80e966a56.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/38bf2e73-3fcc-44c1-ae36-20fece5bebce.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/38bf2e73-3fcc-44c1-ae36-20fece5bebce.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/38bf2e73-3fcc-44c1-ae36-20fece5bebce.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/38bf2e73-3fcc-44c1-ae36-20fece5bebce.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3cbb7e47-57c6-4944-a019-0b690ebd74a2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3cbb7e47-57c6-4944-a019-0b690ebd74a2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3cbb7e47-57c6-4944-a019-0b690ebd74a2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/3cbb7e47-57c6-4944-a019-0b690ebd74a2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/44e54046-2e1b-4602-8e64-178d92ce8553.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/44e54046-2e1b-4602-8e64-178d92ce8553.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/44e54046-2e1b-4602-8e64-178d92ce8553.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/44e54046-2e1b-4602-8e64-178d92ce8553.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/49620dbf-ea4e-4d07-87c5-be00114e809f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/49620dbf-ea4e-4d07-87c5-be00114e809f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/49620dbf-ea4e-4d07-87c5-be00114e809f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/49620dbf-ea4e-4d07-87c5-be00114e809f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/5d6e76f4-0043-44f8-beea-c193bec2bbb8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/5d6e76f4-0043-44f8-beea-c193bec2bbb8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/5d6e76f4-0043-44f8-beea-c193bec2bbb8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/5d6e76f4-0043-44f8-beea-c193bec2bbb8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/63fe1090-3a57-411c-adbf-40098e87fb02.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/63fe1090-3a57-411c-adbf-40098e87fb02.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/63fe1090-3a57-411c-adbf-40098e87fb02.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/63fe1090-3a57-411c-adbf-40098e87fb02.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/77dbc92c-a2e9-44c5-b17c-381b9370555b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/77dbc92c-a2e9-44c5-b17c-381b9370555b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/77dbc92c-a2e9-44c5-b17c-381b9370555b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/77dbc92c-a2e9-44c5-b17c-381b9370555b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/850a7ffd-1089-4938-a141-d000f40b6ce3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/850a7ffd-1089-4938-a141-d000f40b6ce3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/850a7ffd-1089-4938-a141-d000f40b6ce3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/850a7ffd-1089-4938-a141-d000f40b6ce3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8d2b105b-6cc3-4a46-beaf-699119814884.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8d2b105b-6cc3-4a46-beaf-699119814884.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8d2b105b-6cc3-4a46-beaf-699119814884.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/8d2b105b-6cc3-4a46-beaf-699119814884.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/9a4b114c-62fd-46d9-aba9-def076c423b9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/9a4b114c-62fd-46d9-aba9-def076c423b9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/9a4b114c-62fd-46d9-aba9-def076c423b9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/9a4b114c-62fd-46d9-aba9-def076c423b9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/a674f664-885b-4019-b72b-786d92dd2094.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/a674f664-885b-4019-b72b-786d92dd2094.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/a674f664-885b-4019-b72b-786d92dd2094.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/a674f664-885b-4019-b72b-786d92dd2094.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b5571f4e-0c5c-4ffe-8b3f-0e789b6581ad.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b5571f4e-0c5c-4ffe-8b3f-0e789b6581ad.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b5571f4e-0c5c-4ffe-8b3f-0e789b6581ad.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b5571f4e-0c5c-4ffe-8b3f-0e789b6581ad.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ce9669b2-ec36-46fe-98c9-c6f981b5dd34.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ce9669b2-ec36-46fe-98c9-c6f981b5dd34.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ce9669b2-ec36-46fe-98c9-c6f981b5dd34.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ce9669b2-ec36-46fe-98c9-c6f981b5dd34.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/d9abb0dc-5a6d-4fc0-ae0a-f4aa4147cd9b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/d9abb0dc-5a6d-4fc0-ae0a-f4aa4147cd9b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/d9abb0dc-5a6d-4fc0-ae0a-f4aa4147cd9b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/d9abb0dc-5a6d-4fc0-ae0a-f4aa4147cd9b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dc2e521d-556e-4ed5-933e-8fcd38f80f56.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dc2e521d-556e-4ed5-933e-8fcd38f80f56.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dc2e521d-556e-4ed5-933e-8fcd38f80f56.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dc2e521d-556e-4ed5-933e-8fcd38f80f56.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dd250ba1-51b2-4759-967c-55eb090a5e8e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dd250ba1-51b2-4759-967c-55eb090a5e8e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dd250ba1-51b2-4759-967c-55eb090a5e8e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/dd250ba1-51b2-4759-967c-55eb090a5e8e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e6ce2b2a-7948-466d-a57c-a619641c6356.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e6ce2b2a-7948-466d-a57c-a619641c6356.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e6ce2b2a-7948-466d-a57c-a619641c6356.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/e6ce2b2a-7948-466d-a57c-a619641c6356.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f13af664-68c6-4141-9fbb-bc21aab75a51.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f13af664-68c6-4141-9fbb-bc21aab75a51.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f13af664-68c6-4141-9fbb-bc21aab75a51.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f13af664-68c6-4141-9fbb-bc21aab75a51.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f7d8f0a9-3229-4bac-ae21-d700fdc1ad77.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f7d8f0a9-3229-4bac-ae21-d700fdc1ad77.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f7d8f0a9-3229-4bac-ae21-d700fdc1ad77.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f7d8f0a9-3229-4bac-ae21-d700fdc1ad77.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/100e4cfc-33b8-4980-9196-05d519a13dea.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/100e4cfc-33b8-4980-9196-05d519a13dea.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/100e4cfc-33b8-4980-9196-05d519a13dea.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/100e4cfc-33b8-4980-9196-05d519a13dea.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/2036a3bc-7988-4105-9c73-5eb14fb8e437.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/2036a3bc-7988-4105-9c73-5eb14fb8e437.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/2036a3bc-7988-4105-9c73-5eb14fb8e437.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/2036a3bc-7988-4105-9c73-5eb14fb8e437.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/416a4c14-20fc-4c12-ad96-aa27d584a554.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/416a4c14-20fc-4c12-ad96-aa27d584a554.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/416a4c14-20fc-4c12-ad96-aa27d584a554.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/416a4c14-20fc-4c12-ad96-aa27d584a554.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/6d2fbfa0-5402-461e-9357-9eb7efb850f5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/6d2fbfa0-5402-461e-9357-9eb7efb850f5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/6d2fbfa0-5402-461e-9357-9eb7efb850f5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/6d2fbfa0-5402-461e-9357-9eb7efb850f5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/9c4229fe-7dd7-4a10-a389-3868d27ae469.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/9c4229fe-7dd7-4a10-a389-3868d27ae469.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/9c4229fe-7dd7-4a10-a389-3868d27ae469.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/9c4229fe-7dd7-4a10-a389-3868d27ae469.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/db8e6781-f356-497d-9aba-ef0994b6268c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/db8e6781-f356-497d-9aba-ef0994b6268c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/db8e6781-f356-497d-9aba-ef0994b6268c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/node/db8e6781-f356-497d-9aba-ef0994b6268c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/75c3061b-50d7-42c4-8db5-7d06859c6725.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/75c3061b-50d7-42c4-8db5-7d06859c6725.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/75c3061b-50d7-42c4-8db5-7d06859c6725.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/75c3061b-50d7-42c4-8db5-7d06859c6725.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/dcbc66a3-946d-435b-8ce8-54a680bf3b18.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/dcbc66a3-946d-435b-8ce8-54a680bf3b18.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/dcbc66a3-946d-435b-8ce8-54a680bf3b18.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_default/content/taxonomy_term/dcbc66a3-946d-435b-8ce8-54a680bf3b18.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/favicon.ico b/web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/favicon.ico similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/favicon.ico rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/favicon.ico diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_dark_desktop.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_dark_desktop.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_dark_desktop.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_dark_desktop.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_dark_mobile.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_dark_mobile.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_dark_mobile.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_dark_mobile.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_light_desktop.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_light_desktop.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_light_desktop.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_light_desktop.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_light_mobile.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_light_mobile.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_light_mobile.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_primary_light_mobile.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_dark_desktop.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_dark_desktop.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_dark_desktop.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_dark_desktop.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_dark_mobile.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_dark_mobile.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_dark_mobile.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_dark_mobile.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_light_desktop.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_light_desktop.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_light_desktop.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_light_desktop.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_light_mobile.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_light_mobile.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_light_mobile.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/assets/logos/logo_secondary_light_mobile.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.info.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.info.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.info.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.info.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.module b/web/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.module similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.module rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.module diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.post_update.php b/web/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.post_update.php similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.post_update.php rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/civictheme_content_government.post_update.php diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_footer_menu_4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_side_navigation.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_side_navigation.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_side_navigation.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/block.block.civictheme_side_navigation.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/civictheme.settings.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/civictheme.settings.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/civictheme.settings.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/config/optional/civictheme.settings.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/02e8b931-63b9-4ba7-88c3-0ec21868268b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/02e8b931-63b9-4ba7-88c3-0ec21868268b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/02e8b931-63b9-4ba7-88c3-0ec21868268b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/02e8b931-63b9-4ba7-88c3-0ec21868268b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/0d621b6e-9375-47ee-8df1-d6e91e4314aa.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/0d621b6e-9375-47ee-8df1-d6e91e4314aa.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/0d621b6e-9375-47ee-8df1-d6e91e4314aa.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/0d621b6e-9375-47ee-8df1-d6e91e4314aa.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/0db708be-ca52-44f6-a9d9-ff5a24b0867d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/0db708be-ca52-44f6-a9d9-ff5a24b0867d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/0db708be-ca52-44f6-a9d9-ff5a24b0867d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/0db708be-ca52-44f6-a9d9-ff5a24b0867d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/1376d33e-fd5f-4dbd-af23-6279e7565829.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/1376d33e-fd5f-4dbd-af23-6279e7565829.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/1376d33e-fd5f-4dbd-af23-6279e7565829.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/1376d33e-fd5f-4dbd-af23-6279e7565829.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/19722339-a9a3-452f-b7ac-e48127be10c2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/19722339-a9a3-452f-b7ac-e48127be10c2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/19722339-a9a3-452f-b7ac-e48127be10c2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/19722339-a9a3-452f-b7ac-e48127be10c2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/212c79c5-e1b2-48f6-b0de-608799a2f5b0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/212c79c5-e1b2-48f6-b0de-608799a2f5b0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/212c79c5-e1b2-48f6-b0de-608799a2f5b0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/212c79c5-e1b2-48f6-b0de-608799a2f5b0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/2e83befe-9fcb-452e-871d-254b120385c3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/2e83befe-9fcb-452e-871d-254b120385c3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/2e83befe-9fcb-452e-871d-254b120385c3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/2e83befe-9fcb-452e-871d-254b120385c3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/38de3cdb-63b6-40f1-b60d-110c30a8a9fc.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/38de3cdb-63b6-40f1-b60d-110c30a8a9fc.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/38de3cdb-63b6-40f1-b60d-110c30a8a9fc.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/38de3cdb-63b6-40f1-b60d-110c30a8a9fc.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/3a8368f6-7bf7-4bb1-8691-a1cbfb1674f2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/3a8368f6-7bf7-4bb1-8691-a1cbfb1674f2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/3a8368f6-7bf7-4bb1-8691-a1cbfb1674f2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/3a8368f6-7bf7-4bb1-8691-a1cbfb1674f2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/42ad3ee5-1d76-4dbb-87c9-cdea3252e774.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/42ad3ee5-1d76-4dbb-87c9-cdea3252e774.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/42ad3ee5-1d76-4dbb-87c9-cdea3252e774.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/42ad3ee5-1d76-4dbb-87c9-cdea3252e774.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/533dd153-a9ad-48cb-8ddb-97b9050575d7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/533dd153-a9ad-48cb-8ddb-97b9050575d7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/533dd153-a9ad-48cb-8ddb-97b9050575d7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/533dd153-a9ad-48cb-8ddb-97b9050575d7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/5d20173e-6b13-4ada-9621-28dd1c65bcc3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/5d20173e-6b13-4ada-9621-28dd1c65bcc3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/5d20173e-6b13-4ada-9621-28dd1c65bcc3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/5d20173e-6b13-4ada-9621-28dd1c65bcc3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/65559b88-1418-471a-908d-6f440aa939b7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/65559b88-1418-471a-908d-6f440aa939b7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/65559b88-1418-471a-908d-6f440aa939b7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/65559b88-1418-471a-908d-6f440aa939b7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/6a16b860-5aac-40a4-a5e7-13d8bc051448.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/6a16b860-5aac-40a4-a5e7-13d8bc051448.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/6a16b860-5aac-40a4-a5e7-13d8bc051448.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/6a16b860-5aac-40a4-a5e7-13d8bc051448.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/79bffa90-f6fe-4fb6-a8e4-129d8abf4566.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/79bffa90-f6fe-4fb6-a8e4-129d8abf4566.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/79bffa90-f6fe-4fb6-a8e4-129d8abf4566.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/79bffa90-f6fe-4fb6-a8e4-129d8abf4566.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/82e396eb-aeb2-437f-ac75-891a4901b8cb.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/82e396eb-aeb2-437f-ac75-891a4901b8cb.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/82e396eb-aeb2-437f-ac75-891a4901b8cb.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/82e396eb-aeb2-437f-ac75-891a4901b8cb.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/8a4bb1cb-34e9-4c70-9923-8a78f1408980.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/8a4bb1cb-34e9-4c70-9923-8a78f1408980.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/8a4bb1cb-34e9-4c70-9923-8a78f1408980.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/8a4bb1cb-34e9-4c70-9923-8a78f1408980.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/8af122fe-6beb-42fa-92dd-f11c36aa5276.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/8af122fe-6beb-42fa-92dd-f11c36aa5276.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/8af122fe-6beb-42fa-92dd-f11c36aa5276.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/8af122fe-6beb-42fa-92dd-f11c36aa5276.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Facebook.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Facebook.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Facebook.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Facebook.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Linkedin.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Linkedin.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Linkedin.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Linkedin.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Twitter.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Twitter.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Twitter.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/Twitter.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/a11c8970-147e-4977-bff1-074882279be0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/a11c8970-147e-4977-bff1-074882279be0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/a11c8970-147e-4977-bff1-074882279be0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/a11c8970-147e-4977-bff1-074882279be0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/aged-man-hugs-aged-woman.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/aged-man-hugs-aged-woman.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/aged-man-hugs-aged-woman.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/aged-man-hugs-aged-woman.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/aged-woman-smiles.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/aged-woman-smiles.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/aged-woman-smiles.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/aged-woman-smiles.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/australian-flag-on-pole.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/australian-flag-on-pole.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/australian-flag-on-pole.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/australian-flag-on-pole.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/b0fd58d9-6ee5-4d72-8736-986cce424b88.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/b0fd58d9-6ee5-4d72-8736-986cce424b88.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/b0fd58d9-6ee5-4d72-8736-986cce424b88.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/b0fd58d9-6ee5-4d72-8736-986cce424b88.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/b8433893-9503-4154-a7c6-f6b5ff8fbc1d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/b8433893-9503-4154-a7c6-f6b5ff8fbc1d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/b8433893-9503-4154-a7c6-f6b5ff8fbc1d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/b8433893-9503-4154-a7c6-f6b5ff8fbc1d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/ba71dc95-1801-406f-880a-41b9da49dcea.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/ba71dc95-1801-406f-880a-41b9da49dcea.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/ba71dc95-1801-406f-880a-41b9da49dcea.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/ba71dc95-1801-406f-880a-41b9da49dcea.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/bottom-of-uluru-mountain.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/bottom-of-uluru-mountain.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/bottom-of-uluru-mountain.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/bottom-of-uluru-mountain.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/c4bd44cf-c983-4b72-a612-bd3826daae6b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/c4bd44cf-c983-4b72-a612-bd3826daae6b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/c4bd44cf-c983-4b72-a612-bd3826daae6b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/c4bd44cf-c983-4b72-a612-bd3826daae6b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/db85dd04-fddd-4ab4-b364-2d5a3460ad98.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/db85dd04-fddd-4ab4-b364-2d5a3460ad98.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/db85dd04-fddd-4ab4-b364-2d5a3460ad98.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/db85dd04-fddd-4ab4-b364-2d5a3460ad98.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.docx b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.docx similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.docx rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.docx diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.pdf b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.pdf similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.pdf rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.pdf diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.txt b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.txt similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.txt rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy1.txt diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.docx b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.docx similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.docx rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.docx diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.pdf b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.pdf similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.pdf rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.pdf diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.txt b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.txt similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.txt rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy2.txt diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy3.pdf b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy3.pdf similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy3.pdf rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/dummy3.pdf diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/ea71543e-bcb9-4407-8b95-8035ed2c336b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/ea71543e-bcb9-4407-8b95-8035ed2c336b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/ea71543e-bcb9-4407-8b95-8035ed2c336b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/ea71543e-bcb9-4407-8b95-8035ed2c336b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/f1180d16-b221-4efc-8815-7c2323410d09.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/f1180d16-b221-4efc-8815-7c2323410d09.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/f1180d16-b221-4efc-8815-7c2323410d09.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/f1180d16-b221-4efc-8815-7c2323410d09.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/f73a6c37-2c78-4850-aabd-cf46210beb58.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/f73a6c37-2c78-4850-aabd-cf46210beb58.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/f73a6c37-2c78-4850-aabd-cf46210beb58.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/f73a6c37-2c78-4850-aabd-cf46210beb58.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/female-customer-service-executive-talking-on-headset-in-a-modern-office.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/female-customer-service-executive-talking-on-headset-in-a-modern-office.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/female-customer-service-executive-talking-on-headset-in-a-modern-office.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/female-customer-service-executive-talking-on-headset-in-a-modern-office.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/four-young-people-looking-at-laptop-screen.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/four-young-people-looking-at-laptop-screen.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/four-young-people-looking-at-laptop-screen.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/four-young-people-looking-at-laptop-screen.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/generic.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/generic.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/generic.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/generic.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon1.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon1.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon1.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon1.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon2.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon2.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon2.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon2.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon3.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon3.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon3.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon3.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon4.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon4.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon4.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/icon4.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/large-australian-flag-on-pole.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/large-australian-flag-on-pole.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/large-australian-flag-on-pole.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/large-australian-flag-on-pole.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/man-with-microscope.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/man-with-microscope.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/man-with-microscope.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/man-with-microscope.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/office_building.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/office_building.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/office_building.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/office_building.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/parliament-building-in-the-evening.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/parliament-building-in-the-evening.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/parliament-building-in-the-evening.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/parliament-building-in-the-evening.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-adam-bontz-mp.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-adam-bontz-mp.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-adam-bontz-mp.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-adam-bontz-mp.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-john-smith-mp.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-john-smith-mp.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-john-smith-mp.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-john-smith-mp.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-judy-denn-mp.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-judy-denn-mp.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-judy-denn-mp.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/photo-of-hon-judy-denn-mp.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/small-car-moving-fast.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/small-car-moving-fast.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/small-car-moving-fast.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/small-car-moving-fast.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/two-asian-women-looking-at-the-screen.png b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/two-asian-women-looking-at-the-screen.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/two-asian-women-looking-at-the-screen.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/file/two-asian-women-looking-at-the-screen.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/02986a1f-61c6-4e26-9e74-373d2bc0c634.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/02986a1f-61c6-4e26-9e74-373d2bc0c634.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/02986a1f-61c6-4e26-9e74-373d2bc0c634.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/02986a1f-61c6-4e26-9e74-373d2bc0c634.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/07a20a20-f169-4050-9dfe-dde58117bcb3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/07a20a20-f169-4050-9dfe-dde58117bcb3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/07a20a20-f169-4050-9dfe-dde58117bcb3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/07a20a20-f169-4050-9dfe-dde58117bcb3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/128cf256-533b-4a10-bedb-e878deada4a5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/128cf256-533b-4a10-bedb-e878deada4a5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/128cf256-533b-4a10-bedb-e878deada4a5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/128cf256-533b-4a10-bedb-e878deada4a5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/146bdf1c-41ce-4ed4-a8e0-64d1c4f36ddc.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/146bdf1c-41ce-4ed4-a8e0-64d1c4f36ddc.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/146bdf1c-41ce-4ed4-a8e0-64d1c4f36ddc.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/146bdf1c-41ce-4ed4-a8e0-64d1c4f36ddc.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/16a68379-553e-4cd5-a2a1-d7539d15c2ba.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/16a68379-553e-4cd5-a2a1-d7539d15c2ba.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/16a68379-553e-4cd5-a2a1-d7539d15c2ba.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/16a68379-553e-4cd5-a2a1-d7539d15c2ba.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/17896e42-63c2-46db-bda4-a326904295b3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/17896e42-63c2-46db-bda4-a326904295b3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/17896e42-63c2-46db-bda4-a326904295b3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/17896e42-63c2-46db-bda4-a326904295b3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/1a2711fb-ca12-4835-9e1e-a8a63bd82ad0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/1a2711fb-ca12-4835-9e1e-a8a63bd82ad0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/1a2711fb-ca12-4835-9e1e-a8a63bd82ad0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/1a2711fb-ca12-4835-9e1e-a8a63bd82ad0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/2fbae552-33a2-406e-87a6-159e419faf85.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/2fbae552-33a2-406e-87a6-159e419faf85.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/2fbae552-33a2-406e-87a6-159e419faf85.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/2fbae552-33a2-406e-87a6-159e419faf85.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/37c33114-06dc-43a2-a6d0-6b6befc11fa2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/37c33114-06dc-43a2-a6d0-6b6befc11fa2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/37c33114-06dc-43a2-a6d0-6b6befc11fa2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/37c33114-06dc-43a2-a6d0-6b6befc11fa2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/3e31f933-303c-4fd1-bac7-4faab8100c1d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/3e31f933-303c-4fd1-bac7-4faab8100c1d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/3e31f933-303c-4fd1-bac7-4faab8100c1d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/3e31f933-303c-4fd1-bac7-4faab8100c1d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/4603fcc8-7b0c-4698-aba9-2a43508b1038.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/4603fcc8-7b0c-4698-aba9-2a43508b1038.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/4603fcc8-7b0c-4698-aba9-2a43508b1038.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/4603fcc8-7b0c-4698-aba9-2a43508b1038.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/4df3f04c-7529-4335-a9d2-0d48cc074376.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/4df3f04c-7529-4335-a9d2-0d48cc074376.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/4df3f04c-7529-4335-a9d2-0d48cc074376.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/4df3f04c-7529-4335-a9d2-0d48cc074376.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/50ea2910-e6f9-495e-9174-3b84e97426b7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/50ea2910-e6f9-495e-9174-3b84e97426b7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/50ea2910-e6f9-495e-9174-3b84e97426b7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/50ea2910-e6f9-495e-9174-3b84e97426b7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/66fcb842-06c3-4432-bd20-62918758e005.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/66fcb842-06c3-4432-bd20-62918758e005.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/66fcb842-06c3-4432-bd20-62918758e005.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/66fcb842-06c3-4432-bd20-62918758e005.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9896b6d9-c590-48af-a0ce-fed22a0ec861.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9896b6d9-c590-48af-a0ce-fed22a0ec861.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9896b6d9-c590-48af-a0ce-fed22a0ec861.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9896b6d9-c590-48af-a0ce-fed22a0ec861.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9a81d79d-79da-4bc4-8584-27c411248d3e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9a81d79d-79da-4bc4-8584-27c411248d3e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9a81d79d-79da-4bc4-8584-27c411248d3e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9a81d79d-79da-4bc4-8584-27c411248d3e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9e389925-f1f6-4d1c-8aee-03e4a91f6eb4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9e389925-f1f6-4d1c-8aee-03e4a91f6eb4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9e389925-f1f6-4d1c-8aee-03e4a91f6eb4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/9e389925-f1f6-4d1c-8aee-03e4a91f6eb4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/a172a439-0aea-42e1-b19c-7fdd3ba68bcf.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/a172a439-0aea-42e1-b19c-7fdd3ba68bcf.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/a172a439-0aea-42e1-b19c-7fdd3ba68bcf.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/a172a439-0aea-42e1-b19c-7fdd3ba68bcf.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/a5653abc-41de-4b8f-a9b7-cb48aeeacd5b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/a5653abc-41de-4b8f-a9b7-cb48aeeacd5b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/a5653abc-41de-4b8f-a9b7-cb48aeeacd5b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/a5653abc-41de-4b8f-a9b7-cb48aeeacd5b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/ab71f96c-d1b4-4a7f-be7d-7b5fa5b26925.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/ab71f96c-d1b4-4a7f-be7d-7b5fa5b26925.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/ab71f96c-d1b4-4a7f-be7d-7b5fa5b26925.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/ab71f96c-d1b4-4a7f-be7d-7b5fa5b26925.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/af43a085-7e4f-40d4-a8d7-79ddd18fbcf0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/af43a085-7e4f-40d4-a8d7-79ddd18fbcf0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/af43a085-7e4f-40d4-a8d7-79ddd18fbcf0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/af43a085-7e4f-40d4-a8d7-79ddd18fbcf0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/c16012a7-6fb9-40a4-8ccf-b4f3691e1feb.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/c16012a7-6fb9-40a4-8ccf-b4f3691e1feb.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/c16012a7-6fb9-40a4-8ccf-b4f3691e1feb.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/c16012a7-6fb9-40a4-8ccf-b4f3691e1feb.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/ccd6cc0e-c403-45a3-949d-216804250433.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/ccd6cc0e-c403-45a3-949d-216804250433.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/ccd6cc0e-c403-45a3-949d-216804250433.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/ccd6cc0e-c403-45a3-949d-216804250433.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e0c710e3-6eeb-4ea5-b656-0fa728b389b8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e0c710e3-6eeb-4ea5-b656-0fa728b389b8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e0c710e3-6eeb-4ea5-b656-0fa728b389b8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e0c710e3-6eeb-4ea5-b656-0fa728b389b8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e343a613-0b38-49f4-a4b5-f000b171b10d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e343a613-0b38-49f4-a4b5-f000b171b10d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e343a613-0b38-49f4-a4b5-f000b171b10d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e343a613-0b38-49f4-a4b5-f000b171b10d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e7acc411-519a-4735-80a6-c0bc7dfb61f3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e7acc411-519a-4735-80a6-c0bc7dfb61f3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e7acc411-519a-4735-80a6-c0bc7dfb61f3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/e7acc411-519a-4735-80a6-c0bc7dfb61f3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/f7f391de-797d-4345-90c4-46d1f01c468e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/f7f391de-797d-4345-90c4-46d1f01c468e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/f7f391de-797d-4345-90c4-46d1f01c468e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/f7f391de-797d-4345-90c4-46d1f01c468e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/fa15a8a9-f7c2-4e9c-a9d3-51cdb501d50b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/fa15a8a9-f7c2-4e9c-a9d3-51cdb501d50b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/fa15a8a9-f7c2-4e9c-a9d3-51cdb501d50b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/media/fa15a8a9-f7c2-4e9c-a9d3-51cdb501d50b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1fba0787-dc6b-4f85-a1b6-fe57793e88c9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1fba0787-dc6b-4f85-a1b6-fe57793e88c9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1fba0787-dc6b-4f85-a1b6-fe57793e88c9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/1fba0787-dc6b-4f85-a1b6-fe57793e88c9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/237efd9c-07ab-4667-9b2e-71e36a276422.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/237efd9c-07ab-4667-9b2e-71e36a276422.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/237efd9c-07ab-4667-9b2e-71e36a276422.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/237efd9c-07ab-4667-9b2e-71e36a276422.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2f378b27-3b67-441a-96a9-0a6de73fb1db.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2f378b27-3b67-441a-96a9-0a6de73fb1db.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2f378b27-3b67-441a-96a9-0a6de73fb1db.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/2f378b27-3b67-441a-96a9-0a6de73fb1db.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4968109e-0125-40e1-ab9d-b4fca8546ef3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4968109e-0125-40e1-ab9d-b4fca8546ef3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4968109e-0125-40e1-ab9d-b4fca8546ef3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4968109e-0125-40e1-ab9d-b4fca8546ef3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4b1d211b-63ab-41c6-82f9-d124d52417a3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4b1d211b-63ab-41c6-82f9-d124d52417a3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4b1d211b-63ab-41c6-82f9-d124d52417a3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/4b1d211b-63ab-41c6-82f9-d124d52417a3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/5affe220-42a6-4bab-86ce-c64cd9490cf7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/5affe220-42a6-4bab-86ce-c64cd9490cf7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/5affe220-42a6-4bab-86ce-c64cd9490cf7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/5affe220-42a6-4bab-86ce-c64cd9490cf7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6a865497-8c11-4d3c-ad9e-7bcec0bc173b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6a865497-8c11-4d3c-ad9e-7bcec0bc173b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6a865497-8c11-4d3c-ad9e-7bcec0bc173b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/6a865497-8c11-4d3c-ad9e-7bcec0bc173b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/77dbc92c-a2e9-44c5-b17c-381b9370555b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/77dbc92c-a2e9-44c5-b17c-381b9370555b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/77dbc92c-a2e9-44c5-b17c-381b9370555b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/77dbc92c-a2e9-44c5-b17c-381b9370555b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/82a5c45f-7594-4e11-bbec-e8fe0e040185.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/82a5c45f-7594-4e11-bbec-e8fe0e040185.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/82a5c45f-7594-4e11-bbec-e8fe0e040185.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/82a5c45f-7594-4e11-bbec-e8fe0e040185.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/910c07dc-8c95-436d-9434-5ae6f4ed46c1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/910c07dc-8c95-436d-9434-5ae6f4ed46c1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/910c07dc-8c95-436d-9434-5ae6f4ed46c1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/910c07dc-8c95-436d-9434-5ae6f4ed46c1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/a0c1ecde-9e39-4ca9-9342-943172622ae8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/a0c1ecde-9e39-4ca9-9342-943172622ae8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/a0c1ecde-9e39-4ca9-9342-943172622ae8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/a0c1ecde-9e39-4ca9-9342-943172622ae8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b879d56d-cc11-44a4-a0eb-af0d3dae1d1a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b879d56d-cc11-44a4-a0eb-af0d3dae1d1a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b879d56d-cc11-44a4-a0eb-af0d3dae1d1a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/b879d56d-cc11-44a4-a0eb-af0d3dae1d1a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c3045aa0-6573-491f-8220-3c09b5e8dd7e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c3045aa0-6573-491f-8220-3c09b5e8dd7e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c3045aa0-6573-491f-8220-3c09b5e8dd7e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c3045aa0-6573-491f-8220-3c09b5e8dd7e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e66e8371-b802-4722-a078-5a19fc6b0f8c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e66e8371-b802-4722-a078-5a19fc6b0f8c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e66e8371-b802-4722-a078-5a19fc6b0f8c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/e66e8371-b802-4722-a078-5a19fc6b0f8c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/02831341-01cd-4d7d-80b7-20f01feb950b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/02831341-01cd-4d7d-80b7-20f01feb950b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/02831341-01cd-4d7d-80b7-20f01feb950b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/02831341-01cd-4d7d-80b7-20f01feb950b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/0d96ff66-61ff-44fc-a9e4-a8b174f6da95.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/0d96ff66-61ff-44fc-a9e4-a8b174f6da95.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/0d96ff66-61ff-44fc-a9e4-a8b174f6da95.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/0d96ff66-61ff-44fc-a9e4-a8b174f6da95.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/21d11ae0-2874-4663-9937-a48ce30a7ad7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/21d11ae0-2874-4663-9937-a48ce30a7ad7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/21d11ae0-2874-4663-9937-a48ce30a7ad7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/21d11ae0-2874-4663-9937-a48ce30a7ad7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/3554631b-63d2-461e-916e-217a18d1d298.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/3554631b-63d2-461e-916e-217a18d1d298.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/3554631b-63d2-461e-916e-217a18d1d298.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/3554631b-63d2-461e-916e-217a18d1d298.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/52a73eef-5883-4277-8e4e-e2e587670b59.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/52a73eef-5883-4277-8e4e-e2e587670b59.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/52a73eef-5883-4277-8e4e-e2e587670b59.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/52a73eef-5883-4277-8e4e-e2e587670b59.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/6f588571-e649-47dc-9911-c1723cb07e71.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/6f588571-e649-47dc-9911-c1723cb07e71.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/6f588571-e649-47dc-9911-c1723cb07e71.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/6f588571-e649-47dc-9911-c1723cb07e71.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/882a6c90-74f4-44c7-ab53-fb0a9937c678.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/882a6c90-74f4-44c7-ab53-fb0a9937c678.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/882a6c90-74f4-44c7-ab53-fb0a9937c678.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/882a6c90-74f4-44c7-ab53-fb0a9937c678.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/b7759fda-e55d-4a37-b6e6-fb1816e75365.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/b7759fda-e55d-4a37-b6e6-fb1816e75365.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/b7759fda-e55d-4a37-b6e6-fb1816e75365.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/b7759fda-e55d-4a37-b6e6-fb1816e75365.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/b7f32ddb-c81a-40ff-8389-a935cd317201.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/b7f32ddb-c81a-40ff-8389-a935cd317201.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/b7f32ddb-c81a-40ff-8389-a935cd317201.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/b7f32ddb-c81a-40ff-8389-a935cd317201.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/d40fd509-9fb5-4295-b3f3-65638aceeaf7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/d40fd509-9fb5-4295-b3f3-65638aceeaf7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/d40fd509-9fb5-4295-b3f3-65638aceeaf7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/d40fd509-9fb5-4295-b3f3-65638aceeaf7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/d82c4982-b334-43ed-bfad-32ce5e63cba6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/d82c4982-b334-43ed-bfad-32ce5e63cba6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/d82c4982-b334-43ed-bfad-32ce5e63cba6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/d82c4982-b334-43ed-bfad-32ce5e63cba6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/dbb6bfd1-8427-40f1-9ca6-96d21a368a65.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/dbb6bfd1-8427-40f1-9ca6-96d21a368a65.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/dbb6bfd1-8427-40f1-9ca6-96d21a368a65.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/dbb6bfd1-8427-40f1-9ca6-96d21a368a65.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/f3c7ec64-459f-4ea7-8060-f60b0d84901c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/f3c7ec64-459f-4ea7-8060-f60b0d84901c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/f3c7ec64-459f-4ea7-8060-f60b0d84901c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/f3c7ec64-459f-4ea7-8060-f60b0d84901c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/f5794802-f1a0-48ac-aaff-27acfd80d799.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/f5794802-f1a0-48ac-aaff-27acfd80d799.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/f5794802-f1a0-48ac-aaff-27acfd80d799.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/node/f5794802-f1a0-48ac-aaff-27acfd80d799.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/0a3a8fe4-4af3-4c18-9222-0cb3c76ee37c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/75c3061b-50d7-42c4-8db5-7d06859c6725.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/75c3061b-50d7-42c4-8db5-7d06859c6725.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/75c3061b-50d7-42c4-8db5-7d06859c6725.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/75c3061b-50d7-42c4-8db5-7d06859c6725.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/7f02fd6d-bda1-47a0-b463-f7cd975e026d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/7f02fd6d-bda1-47a0-b463-f7cd975e026d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/7f02fd6d-bda1-47a0-b463-f7cd975e026d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/7f02fd6d-bda1-47a0-b463-f7cd975e026d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/cc796ed1-1ae8-4c50-b462-c97f6773f2f3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/cc796ed1-1ae8-4c50-b462-c97f6773f2f3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/cc796ed1-1ae8-4c50-b462-c97f6773f2f3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/cc796ed1-1ae8-4c50-b462-c97f6773f2f3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_government/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/favicon.ico b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/favicon.ico similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/favicon.ico rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/favicon.ico diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_dark_desktop.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_dark_desktop.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_dark_desktop.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_dark_desktop.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_dark_mobile.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_dark_mobile.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_dark_mobile.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_dark_mobile.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_light_desktop.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_light_desktop.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_light_desktop.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_light_desktop.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_light_mobile.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_light_mobile.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_light_mobile.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_primary_light_mobile.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_dark_desktop.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_dark_desktop.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_dark_desktop.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_dark_desktop.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_dark_mobile.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_dark_mobile.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_dark_mobile.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_dark_mobile.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_light_desktop.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_light_desktop.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_light_desktop.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_light_desktop.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_light_mobile.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_light_mobile.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_light_mobile.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/assets/logos/logo_secondary_light_mobile.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.info.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.info.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.info.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.info.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.module b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.module similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.module rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.module diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.post_update.php b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.post_update.php similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.post_update.php rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/civictheme_content_highereducation.post_update.php diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_footer_menu_4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_side_navigation.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_side_navigation.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_side_navigation.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/block.block.civictheme_side_navigation.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/civictheme.settings.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/civictheme.settings.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/civictheme.settings.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/config/optional/civictheme.settings.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/286ff750-a9a9-423a-8a4e-515f79fc0a8f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/50c52459-c100-4e4d-92a4-9c4c77d8f8d0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/5508dc51-1cf8-4577-9038-b572fbd698ae.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/5c0ad15f-3e9c-4eeb-8525-7a064b06fc58.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/7cf65f98-cbae-4e9d-b6ea-7d6d1c437c1c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/b7f36176-620f-4178-aadd-9b448c610986.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/block_content/d7098a8c-3ba3-48f7-bc0c-5787ebaa0427.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/04f13054-5b92-4d9b-b2e5-4ccb7776cdf8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/04f13054-5b92-4d9b-b2e5-4ccb7776cdf8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/04f13054-5b92-4d9b-b2e5-4ccb7776cdf8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/04f13054-5b92-4d9b-b2e5-4ccb7776cdf8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/063ae3b8-fc10-4473-8b9d-675b50861e83.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/06649f54-e0ba-4cb3-a291-d07abecdf0f1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/06649f54-e0ba-4cb3-a291-d07abecdf0f1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/06649f54-e0ba-4cb3-a291-d07abecdf0f1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/06649f54-e0ba-4cb3-a291-d07abecdf0f1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/0c6e3eb6-6ee2-4c19-b27d-9b724797d809.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/0c6e3eb6-6ee2-4c19-b27d-9b724797d809.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/0c6e3eb6-6ee2-4c19-b27d-9b724797d809.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/0c6e3eb6-6ee2-4c19-b27d-9b724797d809.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/0eb831f5-9400-4563-9c0a-7fe15e48359b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/0eb831f5-9400-4563-9c0a-7fe15e48359b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/0eb831f5-9400-4563-9c0a-7fe15e48359b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/0eb831f5-9400-4563-9c0a-7fe15e48359b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/13cbd4d6-a1d3-468e-80ed-17ee2d97975d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/13cbd4d6-a1d3-468e-80ed-17ee2d97975d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/13cbd4d6-a1d3-468e-80ed-17ee2d97975d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/13cbd4d6-a1d3-468e-80ed-17ee2d97975d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/17043c65-8fbe-4447-a967-293bedca0dd4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/17043c65-8fbe-4447-a967-293bedca0dd4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/17043c65-8fbe-4447-a967-293bedca0dd4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/17043c65-8fbe-4447-a967-293bedca0dd4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/2280ddcf-ec73-49ae-8a02-3d6c69579504.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/2280ddcf-ec73-49ae-8a02-3d6c69579504.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/2280ddcf-ec73-49ae-8a02-3d6c69579504.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/2280ddcf-ec73-49ae-8a02-3d6c69579504.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/262c3484-7a1b-4c87-8b62-b4ed2aa6fdff.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/262c3484-7a1b-4c87-8b62-b4ed2aa6fdff.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/262c3484-7a1b-4c87-8b62-b4ed2aa6fdff.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/262c3484-7a1b-4c87-8b62-b4ed2aa6fdff.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/26c337ee-6ff6-4a2f-bc5c-8a2716b64f3c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/26c337ee-6ff6-4a2f-bc5c-8a2716b64f3c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/26c337ee-6ff6-4a2f-bc5c-8a2716b64f3c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/26c337ee-6ff6-4a2f-bc5c-8a2716b64f3c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/28ab7204-ffc3-4dfa-bae8-b15ff3eb806d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/28ab7204-ffc3-4dfa-bae8-b15ff3eb806d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/28ab7204-ffc3-4dfa-bae8-b15ff3eb806d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/28ab7204-ffc3-4dfa-bae8-b15ff3eb806d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/2dbb9ea9-fc71-45c8-8fc3-4fd5c4e47f69.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/2dbb9ea9-fc71-45c8-8fc3-4fd5c4e47f69.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/2dbb9ea9-fc71-45c8-8fc3-4fd5c4e47f69.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/2dbb9ea9-fc71-45c8-8fc3-4fd5c4e47f69.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/39d33114-a7ca-4960-8b72-0c616bcd57bc.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/39d33114-a7ca-4960-8b72-0c616bcd57bc.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/39d33114-a7ca-4960-8b72-0c616bcd57bc.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/39d33114-a7ca-4960-8b72-0c616bcd57bc.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/3e2f531a-7aa3-4f8c-92bb-4d2dfe886dac.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/3e2f531a-7aa3-4f8c-92bb-4d2dfe886dac.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/3e2f531a-7aa3-4f8c-92bb-4d2dfe886dac.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/3e2f531a-7aa3-4f8c-92bb-4d2dfe886dac.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/3faebecb-df49-490c-8231-8618caec2a22.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/3faebecb-df49-490c-8231-8618caec2a22.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/3faebecb-df49-490c-8231-8618caec2a22.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/3faebecb-df49-490c-8231-8618caec2a22.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/41c354ef-d5f3-4e68-9bdf-4085b47cdadf.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/43d131e1-0ed7-4df4-9666-2f97345b4e85.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/43d131e1-0ed7-4df4-9666-2f97345b4e85.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/43d131e1-0ed7-4df4-9666-2f97345b4e85.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/43d131e1-0ed7-4df4-9666-2f97345b4e85.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/4572afc3-72c9-4e94-a9ed-3c0525428da9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/4572afc3-72c9-4e94-a9ed-3c0525428da9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/4572afc3-72c9-4e94-a9ed-3c0525428da9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/4572afc3-72c9-4e94-a9ed-3c0525428da9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/485cc58d-a829-4462-8cec-ef747507f158.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/485cc58d-a829-4462-8cec-ef747507f158.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/485cc58d-a829-4462-8cec-ef747507f158.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/485cc58d-a829-4462-8cec-ef747507f158.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/4c54f9b2-ae04-442f-b830-4cbeed050d75.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/52c7c546-4010-44c0-aa09-7b1295255df8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/52c7c546-4010-44c0-aa09-7b1295255df8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/52c7c546-4010-44c0-aa09-7b1295255df8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/52c7c546-4010-44c0-aa09-7b1295255df8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/52cf5a8d-97bf-48cf-b106-e2249e2e705e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/52cf5a8d-97bf-48cf-b106-e2249e2e705e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/52cf5a8d-97bf-48cf-b106-e2249e2e705e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/52cf5a8d-97bf-48cf-b106-e2249e2e705e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5772c7bd-f9b8-4fea-9aab-ea23653e7bf5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5772c7bd-f9b8-4fea-9aab-ea23653e7bf5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5772c7bd-f9b8-4fea-9aab-ea23653e7bf5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5772c7bd-f9b8-4fea-9aab-ea23653e7bf5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5aae0577-f184-421f-9818-36c4c91f7268.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5aae0577-f184-421f-9818-36c4c91f7268.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5aae0577-f184-421f-9818-36c4c91f7268.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5aae0577-f184-421f-9818-36c4c91f7268.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5daffb0b-71e0-40cd-94ab-72cea6e15b30.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5daffb0b-71e0-40cd-94ab-72cea6e15b30.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5daffb0b-71e0-40cd-94ab-72cea6e15b30.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/5daffb0b-71e0-40cd-94ab-72cea6e15b30.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/64a4df06-0829-4e3e-89ba-0f8dcf296cd3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/64a4df06-0829-4e3e-89ba-0f8dcf296cd3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/64a4df06-0829-4e3e-89ba-0f8dcf296cd3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/64a4df06-0829-4e3e-89ba-0f8dcf296cd3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/661348df-1f8d-4fc2-9a86-7b79b7530ddc.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/661348df-1f8d-4fc2-9a86-7b79b7530ddc.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/661348df-1f8d-4fc2-9a86-7b79b7530ddc.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/661348df-1f8d-4fc2-9a86-7b79b7530ddc.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/71884454-94a4-4b31-b549-72457937caae.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/71884454-94a4-4b31-b549-72457937caae.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/71884454-94a4-4b31-b549-72457937caae.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/71884454-94a4-4b31-b549-72457937caae.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/74f3530d-17b6-45a6-be26-22204601cfce.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/74f3530d-17b6-45a6-be26-22204601cfce.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/74f3530d-17b6-45a6-be26-22204601cfce.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/74f3530d-17b6-45a6-be26-22204601cfce.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/75453091-c74a-4b07-b57a-e381d34c65de.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/75453091-c74a-4b07-b57a-e381d34c65de.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/75453091-c74a-4b07-b57a-e381d34c65de.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/75453091-c74a-4b07-b57a-e381d34c65de.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7c3adf49-2497-4781-a6d7-6caa16a5b9ab.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7c3adf49-2497-4781-a6d7-6caa16a5b9ab.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7c3adf49-2497-4781-a6d7-6caa16a5b9ab.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7c3adf49-2497-4781-a6d7-6caa16a5b9ab.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7d218cdd-73aa-4253-8e46-59c94197a943.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7d218cdd-73aa-4253-8e46-59c94197a943.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7d218cdd-73aa-4253-8e46-59c94197a943.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7d218cdd-73aa-4253-8e46-59c94197a943.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7d40a1d7-cb84-416d-b1de-d6bbdae4a4d8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7d40a1d7-cb84-416d-b1de-d6bbdae4a4d8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7d40a1d7-cb84-416d-b1de-d6bbdae4a4d8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7d40a1d7-cb84-416d-b1de-d6bbdae4a4d8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7dea2844-77b7-4f1a-bb77-5d61c9d0be28.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7dea2844-77b7-4f1a-bb77-5d61c9d0be28.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7dea2844-77b7-4f1a-bb77-5d61c9d0be28.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7dea2844-77b7-4f1a-bb77-5d61c9d0be28.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7ec668f1-cd7d-4111-967e-f2522817ff2f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7ec668f1-cd7d-4111-967e-f2522817ff2f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7ec668f1-cd7d-4111-967e-f2522817ff2f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/7ec668f1-cd7d-4111-967e-f2522817ff2f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/87f76de3-68e6-4e5e-b739-9dd448d1ba62.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/87f76de3-68e6-4e5e-b739-9dd448d1ba62.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/87f76de3-68e6-4e5e-b739-9dd448d1ba62.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/87f76de3-68e6-4e5e-b739-9dd448d1ba62.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/894ac492-60e6-4596-b171-4e3c03331076.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/894ac492-60e6-4596-b171-4e3c03331076.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/894ac492-60e6-4596-b171-4e3c03331076.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/894ac492-60e6-4596-b171-4e3c03331076.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8b15713a-ca0a-458a-a841-86e667f7e913.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8b15713a-ca0a-458a-a841-86e667f7e913.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8b15713a-ca0a-458a-a841-86e667f7e913.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8b15713a-ca0a-458a-a841-86e667f7e913.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8b42af88-5ca5-4272-8b4d-d9588778a92d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8b42af88-5ca5-4272-8b4d-d9588778a92d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8b42af88-5ca5-4272-8b4d-d9588778a92d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8b42af88-5ca5-4272-8b4d-d9588778a92d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8dcc82a3-004e-4a65-aab9-ec73f19b5862.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8dcc82a3-004e-4a65-aab9-ec73f19b5862.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8dcc82a3-004e-4a65-aab9-ec73f19b5862.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8dcc82a3-004e-4a65-aab9-ec73f19b5862.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8f3322b9-86c2-4ee9-8862-9af7890e436c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8f3322b9-86c2-4ee9-8862-9af7890e436c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8f3322b9-86c2-4ee9-8862-9af7890e436c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/8f3322b9-86c2-4ee9-8862-9af7890e436c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/9c35b490-2a57-458a-a298-4cbc0b0907d9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/9c35b490-2a57-458a-a298-4cbc0b0907d9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/9c35b490-2a57-458a-a298-4cbc0b0907d9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/9c35b490-2a57-458a-a298-4cbc0b0907d9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/9cea8871-e46e-4671-abf0-f2183a98e6bf.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/9cea8871-e46e-4671-abf0-f2183a98e6bf.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/9cea8871-e46e-4671-abf0-f2183a98e6bf.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/9cea8871-e46e-4671-abf0-f2183a98e6bf.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/AI and open data for COVID 1.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/AI and open data for COVID 1.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/AI and open data for COVID 1.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/AI and open data for COVID 1.png diff --git "a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Alzheimer\342\200\231s Association.png" "b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Alzheimer\342\200\231s Association.png" similarity index 100% rename from "docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Alzheimer\342\200\231s Association.png" rename to "web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Alzheimer\342\200\231s Association.png" diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/BCG.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/BCG.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/BCG.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/BCG.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Background Pattern.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Background Pattern.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Background Pattern.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Background Pattern.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Baker-McKenzie.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Baker-McKenzie.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Baker-McKenzie.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Baker-McKenzie.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Facebook.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Facebook.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Facebook.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Facebook.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Johnson Johnson.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Johnson Johnson.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Johnson Johnson.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Johnson Johnson.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Linkedin.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Linkedin.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Linkedin.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Linkedin.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/My University library.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/My University library.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/My University library.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/My University library.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Newbreakthrough.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Newbreakthrough.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Newbreakthrough.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Newbreakthrough.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Pfizer.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Pfizer.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Pfizer.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Pfizer.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Placeholder.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Placeholder.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Placeholder.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Placeholder.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Red Cross.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Red Cross.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Red Cross.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Red Cross.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Smithsonian Institute.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Smithsonian Institute.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Smithsonian Institute.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Smithsonian Institute.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/The Pine Island Glacier 1.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/The Pine Island Glacier 1.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/The Pine Island Glacier 1.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/The Pine Island Glacier 1.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Twitter.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Twitter.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Twitter.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/Twitter.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/United Nations.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/United Nations.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/United Nations.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/United Nations.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/WHO.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/WHO.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/WHO.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/WHO.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/World Vision.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/World Vision.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/World Vision.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/World Vision.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icon-1.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icon-1.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icon-1.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icon-1.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icon.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icon.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icon.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icon.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of architecture.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of architecture.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of architecture.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of architecture.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of art.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of art.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of art.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of art.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of banking.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of banking.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of banking.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of banking.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of chem engineering.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of chem engineering.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of chem engineering.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of chem engineering.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of civil engineering.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of civil engineering.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of civil engineering.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of civil engineering.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of cyber security.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of cyber security.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of cyber security.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of cyber security.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of economics.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of economics.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of economics.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of economics.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of emerging technologies.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of emerging technologies.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of emerging technologies.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of emerging technologies.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of marketing.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of marketing.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of marketing.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of marketing.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of mechanical engineering.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of mechanical engineering.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of mechanical engineering.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of mechanical engineering.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of political science.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of political science.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of political science.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of political science.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of software engineering.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of software engineering.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of software engineering.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of software engineering.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of structural engineering.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of structural engineering.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of structural engineering.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Icondept of structural engineering.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of biomedical sciences.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of biomedical sciences.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of biomedical sciences.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of biomedical sciences.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of english and creative writing.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of english and creative writing.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of english and creative writing.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of english and creative writing.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of languages.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of languages.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of languages.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of languages.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of law.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of law.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of law.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of law.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of med.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of med.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of med.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of med.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of media and journalism.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of media and journalism.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of media and journalism.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of media and journalism.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of social sciences.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of social sciences.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of social sciences.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/_Iconschool of social sciences.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/a2c9a5f4-bdff-46c3-86dc-dde0b7108e6b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/a2c9a5f4-bdff-46c3-86dc-dde0b7108e6b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/a2c9a5f4-bdff-46c3-86dc-dde0b7108e6b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/a2c9a5f4-bdff-46c3-86dc-dde0b7108e6b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/a9cc17a6-a67a-4785-9ac4-0dbd1ac184f6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/a9cc17a6-a67a-4785-9ac4-0dbd1ac184f6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/a9cc17a6-a67a-4785-9ac4-0dbd1ac184f6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/a9cc17a6-a67a-4785-9ac4-0dbd1ac184f6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/account.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/account.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/account.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/account.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/aecom.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/aecom.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/aecom.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/aecom.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/afif-ramdhasuma-lPjeFCIFJwk-unsplash 2.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/afif-ramdhasuma-lPjeFCIFJwk-unsplash 2.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/afif-ramdhasuma-lPjeFCIFJwk-unsplash 2.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/afif-ramdhasuma-lPjeFCIFJwk-unsplash 2.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/awardwinningresearchers.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/awardwinningresearchers.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/awardwinningresearchers.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/awardwinningresearchers.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/b7d04e5e-eb1d-4e7e-bb2e-a5fffa073a81.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/b7d04e5e-eb1d-4e7e-bb2e-a5fffa073a81.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/b7d04e5e-eb1d-4e7e-bb2e-a5fffa073a81.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/b7d04e5e-eb1d-4e7e-bb2e-a5fffa073a81.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/b934d372-e59b-4e7d-a0f1-d5c818ea4cef.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/b934d372-e59b-4e7d-a0f1-d5c818ea4cef.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/b934d372-e59b-4e7d-a0f1-d5c818ea4cef.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/b934d372-e59b-4e7d-a0f1-d5c818ea4cef.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/bff45f89-9d22-4558-ae6e-81570c708bb6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/c14f7e58-db26-4c8d-830a-4f4ce677f898.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/c14f7e58-db26-4c8d-830a-4f4ce677f898.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/c14f7e58-db26-4c8d-830a-4f4ce677f898.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/c14f7e58-db26-4c8d-830a-4f4ce677f898.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/c52989ca-ad3c-468b-b4a0-02aaab1dc7e8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/c52989ca-ad3c-468b-b4a0-02aaab1dc7e8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/c52989ca-ad3c-468b-b4a0-02aaab1dc7e8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/c52989ca-ad3c-468b-b4a0-02aaab1dc7e8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/cac181f2-fa1e-4a8e-9e30-6dc57124f8bc.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/cac181f2-fa1e-4a8e-9e30-6dc57124f8bc.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/cac181f2-fa1e-4a8e-9e30-6dc57124f8bc.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/cac181f2-fa1e-4a8e-9e30-6dc57124f8bc.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/civictheme_background_2 1.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/civictheme_background_2 1.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/civictheme_background_2 1.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/civictheme_background_2 1.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/clay-banks-Hf8n0RUk7g0-unsplash 1.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/clay-banks-Hf8n0RUk7g0-unsplash 1.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/clay-banks-Hf8n0RUk7g0-unsplash 1.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/clay-banks-Hf8n0RUk7g0-unsplash 1.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d3dec43b-f5bf-4785-8561-bea57237e02d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d3dec43b-f5bf-4785-8561-bea57237e02d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d3dec43b-f5bf-4785-8561-bea57237e02d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d3dec43b-f5bf-4785-8561-bea57237e02d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d5d082de-a211-4e13-b818-6f2e7dbc32f0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d5d082de-a211-4e13-b818-6f2e7dbc32f0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d5d082de-a211-4e13-b818-6f2e7dbc32f0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d5d082de-a211-4e13-b818-6f2e7dbc32f0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d838ac0c-5320-4e95-93e7-b1c8d1a7a0b2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d838ac0c-5320-4e95-93e7-b1c8d1a7a0b2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d838ac0c-5320-4e95-93e7-b1c8d1a7a0b2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d838ac0c-5320-4e95-93e7-b1c8d1a7a0b2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d9a4a6a1-808f-4d0f-b472-045f64b7bdf5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d9a4a6a1-808f-4d0f-b472-045f64b7bdf5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d9a4a6a1-808f-4d0f-b472-045f64b7bdf5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/d9a4a6a1-808f-4d0f-b472-045f64b7bdf5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/dc5c94dc-faea-4b7c-a079-3f8d9267e713.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/dc5c94dc-faea-4b7c-a079-3f8d9267e713.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/dc5c94dc-faea-4b7c-a079-3f8d9267e713.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/dc5c94dc-faea-4b7c-a079-3f8d9267e713.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/deloitte.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/deloitte.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/deloitte.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/deloitte.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/demo_image.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/demo_image.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/demo_image.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/demo_image.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/demo_lorem-ipsum.pdf b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/demo_lorem-ipsum.pdf similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/demo_lorem-ipsum.pdf rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/demo_lorem-ipsum.pdf diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/dose-media-bU6JyhSI6zo-unsplash 1.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/dose-media-bU6JyhSI6zo-unsplash 1.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/dose-media-bU6JyhSI6zo-unsplash 1.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/dose-media-bU6JyhSI6zo-unsplash 1.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/doubledegrees.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/doubledegrees.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/doubledegrees.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/doubledegrees.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/doubledegreesslider1.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/doubledegreesslider1.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/doubledegreesslider1.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/doubledegreesslider1.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e3080d9e-143f-458b-aed6-cf5fe97f3861.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e3080d9e-143f-458b-aed6-cf5fe97f3861.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e3080d9e-143f-458b-aed6-cf5fe97f3861.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e3080d9e-143f-458b-aed6-cf5fe97f3861.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e5b5afb3-e0b8-42f3-877e-011c0de89c95.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e5b5afb3-e0b8-42f3-877e-011c0de89c95.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e5b5afb3-e0b8-42f3-877e-011c0de89c95.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e5b5afb3-e0b8-42f3-877e-011c0de89c95.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e897e660-3b34-41ef-98f9-1160f2528a89.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e897e660-3b34-41ef-98f9-1160f2528a89.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e897e660-3b34-41ef-98f9-1160f2528a89.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/e897e660-3b34-41ef-98f9-1160f2528a89.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/eb4983ea-b3e7-47c2-a036-52aadeebadc1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/eb4983ea-b3e7-47c2-a036-52aadeebadc1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/eb4983ea-b3e7-47c2-a036-52aadeebadc1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/eb4983ea-b3e7-47c2-a036-52aadeebadc1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/eb8db1e8-1ccc-4c99-9a85-75b29eae4de6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/eb8db1e8-1ccc-4c99-9a85-75b29eae4de6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/eb8db1e8-1ccc-4c99-9a85-75b29eae4de6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/eb8db1e8-1ccc-4c99-9a85-75b29eae4de6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/f127cb9b-1d16-4213-acb1-021e8842e49d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/f127cb9b-1d16-4213-acb1-021e8842e49d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/f127cb9b-1d16-4213-acb1-021e8842e49d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/f127cb9b-1d16-4213-acb1-021e8842e49d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/f1d15bb3-6018-497d-a9bc-79ec0656793e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/f1d15bb3-6018-497d-a9bc-79ec0656793e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/f1d15bb3-6018-497d-a9bc-79ec0656793e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/f1d15bb3-6018-497d-a9bc-79ec0656793e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/fbbda862-b3ed-4b06-b8d7-b548a628a60f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/fbbda862-b3ed-4b06-b8d7-b548a628a60f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/fbbda862-b3ed-4b06-b8d7-b548a628a60f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/fbbda862-b3ed-4b06-b8d7-b548a628a60f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/frankie-lopez-lXy07zu3NN4-unsplash 1.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/frankie-lopez-lXy07zu3NN4-unsplash 1.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/frankie-lopez-lXy07zu3NN4-unsplash 1.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/frankie-lopez-lXy07zu3NN4-unsplash 1.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/generic.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/generic.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/generic.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/generic.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/group-of-young-people-looking-at-computer-screen.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/group-of-young-people-looking-at-computer-screen.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/group-of-young-people-looking-at-computer-screen.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/group-of-young-people-looking-at-computer-screen.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/helena-lopes-UZe35tk5UoA-unsplash 1.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/helena-lopes-UZe35tk5UoA-unsplash 1.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/helena-lopes-UZe35tk5UoA-unsplash 1.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/helena-lopes-UZe35tk5UoA-unsplash 1.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/janesmith.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/janesmith.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/janesmith.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/janesmith.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/melbourne_flinders_street.jpg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/melbourne_flinders_street.jpg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/melbourne_flinders_street.jpg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/melbourne_flinders_street.jpg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/open book.svg b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/open book.svg similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/open book.svg rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/open book.svg diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/scholarship.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/scholarship.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/scholarship.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/scholarship.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/strategicplan.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/strategicplan.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/strategicplan.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/strategicplan.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/universityranked.png b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/universityranked.png similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/universityranked.png rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/file/universityranked.png diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/02c5cb96-7bf6-4362-ad5a-0a562e996632.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/02c5cb96-7bf6-4362-ad5a-0a562e996632.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/02c5cb96-7bf6-4362-ad5a-0a562e996632.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/02c5cb96-7bf6-4362-ad5a-0a562e996632.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/052ab323-9e65-4c7b-8c5c-e16277731a30.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/052ab323-9e65-4c7b-8c5c-e16277731a30.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/052ab323-9e65-4c7b-8c5c-e16277731a30.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/052ab323-9e65-4c7b-8c5c-e16277731a30.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/128cf256-533b-4a10-bedb-e878deada4a5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/128cf256-533b-4a10-bedb-e878deada4a5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/128cf256-533b-4a10-bedb-e878deada4a5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/128cf256-533b-4a10-bedb-e878deada4a5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/12d28525-2e6c-4d9a-9bca-1e8758d0b706.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/12d28525-2e6c-4d9a-9bca-1e8758d0b706.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/12d28525-2e6c-4d9a-9bca-1e8758d0b706.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/12d28525-2e6c-4d9a-9bca-1e8758d0b706.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/143fe51b-83b1-4e43-a0d0-40476540abc3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/143fe51b-83b1-4e43-a0d0-40476540abc3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/143fe51b-83b1-4e43-a0d0-40476540abc3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/143fe51b-83b1-4e43-a0d0-40476540abc3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/1a1cbd4b-36f6-45ca-b71f-89bccb5d2e83.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/1a1cbd4b-36f6-45ca-b71f-89bccb5d2e83.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/1a1cbd4b-36f6-45ca-b71f-89bccb5d2e83.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/1a1cbd4b-36f6-45ca-b71f-89bccb5d2e83.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/205adb84-4add-4e30-92b8-e5c052aa0bc3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/205adb84-4add-4e30-92b8-e5c052aa0bc3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/205adb84-4add-4e30-92b8-e5c052aa0bc3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/205adb84-4add-4e30-92b8-e5c052aa0bc3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/20b3c516-3834-4eff-b24f-d67d17464c9c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/20b3c516-3834-4eff-b24f-d67d17464c9c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/20b3c516-3834-4eff-b24f-d67d17464c9c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/20b3c516-3834-4eff-b24f-d67d17464c9c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2293c43c-5b29-45f6-9b58-51344002758a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2293c43c-5b29-45f6-9b58-51344002758a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2293c43c-5b29-45f6-9b58-51344002758a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2293c43c-5b29-45f6-9b58-51344002758a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/23bc48fc-9abc-4e61-be57-f73be8ec5328.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/23bc48fc-9abc-4e61-be57-f73be8ec5328.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/23bc48fc-9abc-4e61-be57-f73be8ec5328.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/23bc48fc-9abc-4e61-be57-f73be8ec5328.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/286955ac-256e-480d-b914-dcad37fa96ff.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/286955ac-256e-480d-b914-dcad37fa96ff.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/286955ac-256e-480d-b914-dcad37fa96ff.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/286955ac-256e-480d-b914-dcad37fa96ff.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/29410ad3-295b-450e-bba4-c58d5a7e83ad.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/29410ad3-295b-450e-bba4-c58d5a7e83ad.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/29410ad3-295b-450e-bba4-c58d5a7e83ad.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/29410ad3-295b-450e-bba4-c58d5a7e83ad.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2cf05e2f-5d05-4e88-ae27-7248a11978c4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2cf05e2f-5d05-4e88-ae27-7248a11978c4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2cf05e2f-5d05-4e88-ae27-7248a11978c4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2cf05e2f-5d05-4e88-ae27-7248a11978c4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2e4ffce7-2f27-4196-9def-763b2657d951.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2e4ffce7-2f27-4196-9def-763b2657d951.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2e4ffce7-2f27-4196-9def-763b2657d951.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/2e4ffce7-2f27-4196-9def-763b2657d951.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/33025cb8-4e76-4122-8e56-48c04cb12c8f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/33025cb8-4e76-4122-8e56-48c04cb12c8f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/33025cb8-4e76-4122-8e56-48c04cb12c8f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/33025cb8-4e76-4122-8e56-48c04cb12c8f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/3a518ae8-054c-4b58-b673-3771f897dbd9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/3a518ae8-054c-4b58-b673-3771f897dbd9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/3a518ae8-054c-4b58-b673-3771f897dbd9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/3a518ae8-054c-4b58-b673-3771f897dbd9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/405e6f34-e721-473c-b3da-49d618e92105.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/405e6f34-e721-473c-b3da-49d618e92105.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/405e6f34-e721-473c-b3da-49d618e92105.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/405e6f34-e721-473c-b3da-49d618e92105.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/4a661a2b-f6cc-480c-99ed-1f9911b5d405.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/4a661a2b-f6cc-480c-99ed-1f9911b5d405.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/4a661a2b-f6cc-480c-99ed-1f9911b5d405.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/4a661a2b-f6cc-480c-99ed-1f9911b5d405.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/4c1ad737-0d04-4adc-a2b4-10a6b914cb1a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/4c1ad737-0d04-4adc-a2b4-10a6b914cb1a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/4c1ad737-0d04-4adc-a2b4-10a6b914cb1a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/4c1ad737-0d04-4adc-a2b4-10a6b914cb1a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/519c4e0c-acd5-4233-9628-8335ee7ce51f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/519c4e0c-acd5-4233-9628-8335ee7ce51f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/519c4e0c-acd5-4233-9628-8335ee7ce51f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/519c4e0c-acd5-4233-9628-8335ee7ce51f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/61e15cff-4f8f-4480-9c0a-8f11669c4374.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/61e15cff-4f8f-4480-9c0a-8f11669c4374.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/61e15cff-4f8f-4480-9c0a-8f11669c4374.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/61e15cff-4f8f-4480-9c0a-8f11669c4374.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/6e092085-4a97-4bd5-9711-ef0005ecdf4a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/6e092085-4a97-4bd5-9711-ef0005ecdf4a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/6e092085-4a97-4bd5-9711-ef0005ecdf4a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/6e092085-4a97-4bd5-9711-ef0005ecdf4a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/707c016d-26af-43c0-a999-c892e651917a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/707c016d-26af-43c0-a999-c892e651917a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/707c016d-26af-43c0-a999-c892e651917a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/707c016d-26af-43c0-a999-c892e651917a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/70debdf1-8d42-4ac2-94d3-3b1781181833.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/70debdf1-8d42-4ac2-94d3-3b1781181833.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/70debdf1-8d42-4ac2-94d3-3b1781181833.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/70debdf1-8d42-4ac2-94d3-3b1781181833.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/738f9580-7a92-4a92-9b0a-30d191f49737.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/738f9580-7a92-4a92-9b0a-30d191f49737.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/738f9580-7a92-4a92-9b0a-30d191f49737.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/738f9580-7a92-4a92-9b0a-30d191f49737.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/773a4ec5-1d27-4e1c-9b07-ef1b7cbc0cf4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/773a4ec5-1d27-4e1c-9b07-ef1b7cbc0cf4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/773a4ec5-1d27-4e1c-9b07-ef1b7cbc0cf4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/773a4ec5-1d27-4e1c-9b07-ef1b7cbc0cf4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7a47a1a3-d8c3-40e6-bb92-9fdea76de772.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7a47a1a3-d8c3-40e6-bb92-9fdea76de772.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7a47a1a3-d8c3-40e6-bb92-9fdea76de772.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7a47a1a3-d8c3-40e6-bb92-9fdea76de772.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7b02f9f8-0b74-475b-98cb-efb080b09929.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7b02f9f8-0b74-475b-98cb-efb080b09929.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7b02f9f8-0b74-475b-98cb-efb080b09929.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7b02f9f8-0b74-475b-98cb-efb080b09929.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7d8c80cb-6e45-4ba2-aad6-8e9bc132f88f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7d8c80cb-6e45-4ba2-aad6-8e9bc132f88f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7d8c80cb-6e45-4ba2-aad6-8e9bc132f88f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/7d8c80cb-6e45-4ba2-aad6-8e9bc132f88f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/807435c6-a632-4c5c-bf66-2ffdc9ab609f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/807435c6-a632-4c5c-bf66-2ffdc9ab609f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/807435c6-a632-4c5c-bf66-2ffdc9ab609f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/807435c6-a632-4c5c-bf66-2ffdc9ab609f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/8d96e514-518d-46fb-aa93-d0fb629035ee.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/8d96e514-518d-46fb-aa93-d0fb629035ee.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/8d96e514-518d-46fb-aa93-d0fb629035ee.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/8d96e514-518d-46fb-aa93-d0fb629035ee.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/90720509-6653-4acf-a96b-7154da530b88.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/90720509-6653-4acf-a96b-7154da530b88.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/90720509-6653-4acf-a96b-7154da530b88.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/90720509-6653-4acf-a96b-7154da530b88.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/9160afda-d35a-4538-9284-0148f87278e6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/9160afda-d35a-4538-9284-0148f87278e6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/9160afda-d35a-4538-9284-0148f87278e6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/9160afda-d35a-4538-9284-0148f87278e6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/930bbaa2-e37b-403a-86e6-c16d1aa79ad9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/9e21c1d1-284c-4fa4-8395-7495fb2dbb2d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/9e21c1d1-284c-4fa4-8395-7495fb2dbb2d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/9e21c1d1-284c-4fa4-8395-7495fb2dbb2d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/9e21c1d1-284c-4fa4-8395-7495fb2dbb2d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/a139973f-f02a-4838-bcb4-3a7e0e0c1556.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/a139973f-f02a-4838-bcb4-3a7e0e0c1556.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/a139973f-f02a-4838-bcb4-3a7e0e0c1556.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/a139973f-f02a-4838-bcb4-3a7e0e0c1556.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/aadedf42-c600-4397-9e6b-5b85e20f1d6a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/aadedf42-c600-4397-9e6b-5b85e20f1d6a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/aadedf42-c600-4397-9e6b-5b85e20f1d6a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/aadedf42-c600-4397-9e6b-5b85e20f1d6a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ac4255ad-ec69-47e9-9617-86b2e51872b8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ac4255ad-ec69-47e9-9617-86b2e51872b8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ac4255ad-ec69-47e9-9617-86b2e51872b8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ac4255ad-ec69-47e9-9617-86b2e51872b8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/afe262f2-18fb-4dd9-b4e2-4f4482766cde.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/afe262f2-18fb-4dd9-b4e2-4f4482766cde.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/afe262f2-18fb-4dd9-b4e2-4f4482766cde.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/afe262f2-18fb-4dd9-b4e2-4f4482766cde.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b1142872-23be-4b62-a4a8-37cdcd453bb6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b1142872-23be-4b62-a4a8-37cdcd453bb6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b1142872-23be-4b62-a4a8-37cdcd453bb6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b1142872-23be-4b62-a4a8-37cdcd453bb6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b2960675-19ac-4689-8fca-fd717c4b8163.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b2960675-19ac-4689-8fca-fd717c4b8163.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b2960675-19ac-4689-8fca-fd717c4b8163.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b2960675-19ac-4689-8fca-fd717c4b8163.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b4fa303d-042f-4b38-a06b-88c26d1a7eb3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b4fa303d-042f-4b38-a06b-88c26d1a7eb3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b4fa303d-042f-4b38-a06b-88c26d1a7eb3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b4fa303d-042f-4b38-a06b-88c26d1a7eb3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b7711963-ecc5-41b8-923f-692f4416f7d2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b7711963-ecc5-41b8-923f-692f4416f7d2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b7711963-ecc5-41b8-923f-692f4416f7d2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b7711963-ecc5-41b8-923f-692f4416f7d2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b968b4c6-58b1-4a90-a436-54f93d0d7af1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b968b4c6-58b1-4a90-a436-54f93d0d7af1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b968b4c6-58b1-4a90-a436-54f93d0d7af1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/b968b4c6-58b1-4a90-a436-54f93d0d7af1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ba25bcb8-b010-4d47-8765-1f9f2b1309a0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ba25bcb8-b010-4d47-8765-1f9f2b1309a0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ba25bcb8-b010-4d47-8765-1f9f2b1309a0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ba25bcb8-b010-4d47-8765-1f9f2b1309a0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/c4254aad-8fe9-4e9d-abba-1aab19dcec78.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/c4254aad-8fe9-4e9d-abba-1aab19dcec78.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/c4254aad-8fe9-4e9d-abba-1aab19dcec78.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/c4254aad-8fe9-4e9d-abba-1aab19dcec78.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/c62e73db-9388-4088-9da8-facd065a2d39.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/c62e73db-9388-4088-9da8-facd065a2d39.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/c62e73db-9388-4088-9da8-facd065a2d39.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/c62e73db-9388-4088-9da8-facd065a2d39.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d0ff700e-b452-4b72-a94d-7e509e2a8b80.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d1a149ce-4422-4767-aef1-1a22ae4e2193.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d1a149ce-4422-4767-aef1-1a22ae4e2193.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d1a149ce-4422-4767-aef1-1a22ae4e2193.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d1a149ce-4422-4767-aef1-1a22ae4e2193.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d40603f6-cf19-40da-812d-fbee32d8696d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d40603f6-cf19-40da-812d-fbee32d8696d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d40603f6-cf19-40da-812d-fbee32d8696d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d40603f6-cf19-40da-812d-fbee32d8696d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d4bd31b4-651a-4120-a7bf-e6d6832f722c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d4bd31b4-651a-4120-a7bf-e6d6832f722c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d4bd31b4-651a-4120-a7bf-e6d6832f722c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d4bd31b4-651a-4120-a7bf-e6d6832f722c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d6d58799-0fe0-47c8-8bda-153a48694b1b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d6d58799-0fe0-47c8-8bda-153a48694b1b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d6d58799-0fe0-47c8-8bda-153a48694b1b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/d6d58799-0fe0-47c8-8bda-153a48694b1b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e4f38f37-1947-4b47-8e9f-3b85ab96614a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e4f38f37-1947-4b47-8e9f-3b85ab96614a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e4f38f37-1947-4b47-8e9f-3b85ab96614a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e4f38f37-1947-4b47-8e9f-3b85ab96614a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e5120032-950d-422c-9d6e-3d562e633858.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e5120032-950d-422c-9d6e-3d562e633858.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e5120032-950d-422c-9d6e-3d562e633858.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e5120032-950d-422c-9d6e-3d562e633858.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e71dbfa0-a672-4c84-a4b7-3b7863e6268c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e71dbfa0-a672-4c84-a4b7-3b7863e6268c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e71dbfa0-a672-4c84-a4b7-3b7863e6268c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e71dbfa0-a672-4c84-a4b7-3b7863e6268c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e8ab5ef1-2f45-4937-8f0a-f63c22f52df9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e8ab5ef1-2f45-4937-8f0a-f63c22f52df9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e8ab5ef1-2f45-4937-8f0a-f63c22f52df9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/e8ab5ef1-2f45-4937-8f0a-f63c22f52df9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/eac50bb1-3e95-4be4-80cb-7c768fef1c09.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/eac50bb1-3e95-4be4-80cb-7c768fef1c09.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/eac50bb1-3e95-4be4-80cb-7c768fef1c09.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/eac50bb1-3e95-4be4-80cb-7c768fef1c09.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ece7dd42-dc11-4d3d-becf-1b0bfad61fb2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ece7dd42-dc11-4d3d-becf-1b0bfad61fb2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ece7dd42-dc11-4d3d-becf-1b0bfad61fb2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ece7dd42-dc11-4d3d-becf-1b0bfad61fb2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f6d32a80-22f2-4f4d-b4d5-09a1fc11b783.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f6d32a80-22f2-4f4d-b4d5-09a1fc11b783.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f6d32a80-22f2-4f4d-b4d5-09a1fc11b783.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f6d32a80-22f2-4f4d-b4d5-09a1fc11b783.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f7f391de-797d-4345-90c4-46d1f01c468e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f7f391de-797d-4345-90c4-46d1f01c468e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f7f391de-797d-4345-90c4-46d1f01c468e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f7f391de-797d-4345-90c4-46d1f01c468e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f8695f84-8fbb-4e7e-97b9-423efe719cda.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f8695f84-8fbb-4e7e-97b9-423efe719cda.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f8695f84-8fbb-4e7e-97b9-423efe719cda.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/f8695f84-8fbb-4e7e-97b9-423efe719cda.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/fd86cf0a-1055-4ae7-8358-0bf198723fe2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/fd86cf0a-1055-4ae7-8358-0bf198723fe2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/fd86cf0a-1055-4ae7-8358-0bf198723fe2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/fd86cf0a-1055-4ae7-8358-0bf198723fe2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ff9dd1cc-ab2e-468c-9b71-174b04ff3707.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ff9dd1cc-ab2e-468c-9b71-174b04ff3707.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ff9dd1cc-ab2e-468c-9b71-174b04ff3707.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/media/ff9dd1cc-ab2e-468c-9b71-174b04ff3707.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/02c12690-72aa-4f0d-bd3e-3380ecbebb2e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/082e6164-8c11-40e2-a127-8ae90a073db2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0985ec26-733f-4e36-959d-89bd54cb097e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0b391468-84ed-42dc-9709-a5da331f7984.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0dbac71b-04c0-4dfc-a2b0-e7c20bd4ed7d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0e38bee0-59ee-4898-8aef-4eddcb8c0ad3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/0ebd1fd8-5205-4a30-8809-a3ddf517a8a4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/17e25154-b1ae-4a54-abdf-893b083126d9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/191d400b-79ec-4129-85a1-d02558ac1dce.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/196a91fb-589a-439b-addf-47226a877fba.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/199ccc90-1158-4d44-b970-7dfa63958962.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1a52ef66-67f7-4774-9aca-22ade33f449f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1af42027-4063-4a52-869f-b34748f3ca75.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/1d86a26b-0e7b-4d8b-a3f2-c0c887c28442.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/20959401-8e59-45d9-83e8-58deebca4c5e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/2260317c-2be4-4a79-a4d9-0b74aad46af9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/23f6802d-c3bc-4fb0-ba17-9c5285aa95f5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/245cf97a-8982-421e-945b-e1aa096112b7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/2b0c79b9-0a00-4849-819d-a866238bac92.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/3078e95c-7129-4b39-a9ff-e5c80e966a56.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/3078e95c-7129-4b39-a9ff-e5c80e966a56.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/3078e95c-7129-4b39-a9ff-e5c80e966a56.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/3078e95c-7129-4b39-a9ff-e5c80e966a56.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/33b4cbaf-f8ef-4ba3-828f-691002e10b93.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/3464de7f-9880-496a-a7ad-cb7d2c369150.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/35be8705-b50e-4506-9a61-568ef0986318.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/38a4a9f5-ba8d-4e86-b239-5412a912b51d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/407d683e-5ea8-4717-937c-e77660c96de2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/44e54046-2e1b-4602-8e64-178d92ce8553.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/44e54046-2e1b-4602-8e64-178d92ce8553.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/44e54046-2e1b-4602-8e64-178d92ce8553.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/44e54046-2e1b-4602-8e64-178d92ce8553.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/49fb8cd6-a1cd-4a47-9b9a-db4685a5f9cd.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/4a6e5989-a8a6-4482-a094-f62a3cb50056.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/525ab979-42d4-49b3-8ffd-04427ea1afe2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/5ee86d4b-c426-460f-a27d-cc21c3fc12b4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/5f598858-36b9-44bc-a172-b5074dbf18e3.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/5f598858-36b9-44bc-a172-b5074dbf18e3.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/5f598858-36b9-44bc-a172-b5074dbf18e3.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/5f598858-36b9-44bc-a172-b5074dbf18e3.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/6381f8cf-1347-4958-ba5f-c0a5c64558fc.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/649a9842-82c8-4bf4-b8f2-565e065d7841.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/6902e85c-b2ad-4276-bac0-ffdc8e1f37b8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7042a6d6-3694-4529-bb30-56e2f0e9a3f0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/71ced34e-4aad-4635-9180-a413f9a9bfba.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/71ced34e-4aad-4635-9180-a413f9a9bfba.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/71ced34e-4aad-4635-9180-a413f9a9bfba.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/71ced34e-4aad-4635-9180-a413f9a9bfba.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/76138ee2-3dfc-44b7-a804-c1ff529b8c6c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/76fbce9a-8e80-4fa4-be4e-0f5b41c2a9eb.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7785a793-a8f2-4290-a0eb-4e7ddd7c650b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7cb125ae-d246-4e49-90d2-5d27ea4f3a96.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/7fd8ee00-98b6-4ce2-9d09-1f841dd4aec9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/811addc9-1926-48e1-a425-39e7ae375502.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/85facb10-dd94-47e4-b1a9-96b773707d6e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/87ea9eef-2aa0-4720-acd2-3d09e0c4719a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8973fd39-dcfd-4607-a356-f9869a231804.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8a251c00-43a4-42c4-b140-3f6b62bdc000.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8a27acb2-1c4c-4d41-8d7d-7b23ffa5d05b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8d47deda-5ee5-4dcc-9f85-80736ff4cfe9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8d47deda-5ee5-4dcc-9f85-80736ff4cfe9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8d47deda-5ee5-4dcc-9f85-80736ff4cfe9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8d47deda-5ee5-4dcc-9f85-80736ff4cfe9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8d77d5fa-32c2-4a49-bf6c-d4d29bffabd4.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8d77d5fa-32c2-4a49-bf6c-d4d29bffabd4.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8d77d5fa-32c2-4a49-bf6c-d4d29bffabd4.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/8d77d5fa-32c2-4a49-bf6c-d4d29bffabd4.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/91a6d91f-a42a-4e29-9c51-edcd7e058276.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/95e9576e-bf57-4d42-8277-86d6fba07024.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/95e9576e-bf57-4d42-8277-86d6fba07024.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/95e9576e-bf57-4d42-8277-86d6fba07024.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/95e9576e-bf57-4d42-8277-86d6fba07024.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/9d75a522-9956-47af-964c-cf9b482a2d65.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/a29bbfc3-74a7-4f20-b2fb-afc695b5604d.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/a29bbfc3-74a7-4f20-b2fb-afc695b5604d.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/a29bbfc3-74a7-4f20-b2fb-afc695b5604d.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/a29bbfc3-74a7-4f20-b2fb-afc695b5604d.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/b07f9704-b2cf-458a-82ab-db0e55a276e9.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/b76e1882-19e5-4d87-9da7-538e24b0c169.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/bd20cf1a-8f37-4d5a-83e8-7e86af2f1273.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/bf8e354b-1c39-485c-8860-10d35ae176b2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c1435477-5c3d-4479-8aa9-a77b74d1ef99.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c1dbdb6e-10c9-44bd-8e9b-0e4ab860496b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/c9db3cb1-9c9f-4af3-a713-58458503589b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ce0a363d-bd62-404c-b57e-087bc7ed7734.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/cf329ad7-38c3-41a6-82b5-f426b62a342b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/d43ff5d5-9a9d-49a4-9dd0-6656c4c16a61.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/dad0dc66-1d53-40e4-98bc-ad1a9d3784b2.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/db66a086-bc7a-46e4-9f4f-cca5f6b4bea0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e0776472-d1d6-4687-8b15-93e93ffbf63f.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e08c9fb0-dd29-4ef3-832f-e11e2c1becb7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e6ce2b2a-7948-466d-a57c-a619641c6356.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e6ce2b2a-7948-466d-a57c-a619641c6356.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e6ce2b2a-7948-466d-a57c-a619641c6356.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e6ce2b2a-7948-466d-a57c-a619641c6356.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e770653a-bfc1-4c88-a6b5-8a2baaf688c6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e770653a-bfc1-4c88-a6b5-8a2baaf688c6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e770653a-bfc1-4c88-a6b5-8a2baaf688c6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/e770653a-bfc1-4c88-a6b5-8a2baaf688c6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ea488546-38fa-421c-a9ff-585bf766b14b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/ed787a1d-abfb-4078-b2c3-6b101949d602.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/f24fef72-3bf5-46f8-957b-f7fedd05a7e8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/f802050e-0b18-4ac2-ae90-13dba9cf354a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fbf13c94-e50b-4966-a1ad-8d580dfeccff.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fd94bdf3-50c6-4a15-a5ec-7559c92ce041.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fdc9e7c9-fa12-4a50-a031-bdfd8b517bbd.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/menu_link_content/fff6ce32-3f1b-495a-8263-c08302c80a32.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/0900bcaa-2670-4ffa-b22e-f9fa667c45d0.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/0900bcaa-2670-4ffa-b22e-f9fa667c45d0.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/0900bcaa-2670-4ffa-b22e-f9fa667c45d0.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/0900bcaa-2670-4ffa-b22e-f9fa667c45d0.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/11575ae4-d804-4b68-a9e2-528dde78ca5e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/11575ae4-d804-4b68-a9e2-528dde78ca5e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/11575ae4-d804-4b68-a9e2-528dde78ca5e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/11575ae4-d804-4b68-a9e2-528dde78ca5e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2036a3bc-7988-4105-9c73-5eb14fb8e437.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2036a3bc-7988-4105-9c73-5eb14fb8e437.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2036a3bc-7988-4105-9c73-5eb14fb8e437.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2036a3bc-7988-4105-9c73-5eb14fb8e437.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2788e087-f610-435c-898b-996ace50bd11.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2788e087-f610-435c-898b-996ace50bd11.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2788e087-f610-435c-898b-996ace50bd11.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2788e087-f610-435c-898b-996ace50bd11.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2e309b77-8d77-40e8-95bb-1c1475955e67.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2e309b77-8d77-40e8-95bb-1c1475955e67.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2e309b77-8d77-40e8-95bb-1c1475955e67.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/2e309b77-8d77-40e8-95bb-1c1475955e67.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/35b75cc7-cf94-462f-9ee6-6bb69e895d8a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/35b75cc7-cf94-462f-9ee6-6bb69e895d8a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/35b75cc7-cf94-462f-9ee6-6bb69e895d8a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/35b75cc7-cf94-462f-9ee6-6bb69e895d8a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/439d44bc-bb57-44ac-b1b6-1fbcb0f7668c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/439d44bc-bb57-44ac-b1b6-1fbcb0f7668c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/439d44bc-bb57-44ac-b1b6-1fbcb0f7668c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/439d44bc-bb57-44ac-b1b6-1fbcb0f7668c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/45b59dbe-af6c-4b71-b12a-a79b39ee140c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/4cd88c26-8e03-415e-8d67-6d818b07a49b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/4cd88c26-8e03-415e-8d67-6d818b07a49b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/4cd88c26-8e03-415e-8d67-6d818b07a49b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/4cd88c26-8e03-415e-8d67-6d818b07a49b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/56b371ee-ceb6-473b-93d2-2c5ff5edaa76.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/570c4f75-363e-4cdc-980d-b0cc5172469e.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/570c4f75-363e-4cdc-980d-b0cc5172469e.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/570c4f75-363e-4cdc-980d-b0cc5172469e.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/570c4f75-363e-4cdc-980d-b0cc5172469e.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/5d9e4e6b-f957-42c3-8019-30b1ca190dd5.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/5d9e4e6b-f957-42c3-8019-30b1ca190dd5.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/5d9e4e6b-f957-42c3-8019-30b1ca190dd5.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/5d9e4e6b-f957-42c3-8019-30b1ca190dd5.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/6d9a4f8c-3dbf-4111-a642-ee7c088cdcc8.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/802f8c11-788b-44ac-b204-c8fde899532b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/802f8c11-788b-44ac-b204-c8fde899532b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/802f8c11-788b-44ac-b204-c8fde899532b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/802f8c11-788b-44ac-b204-c8fde899532b.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/82bdc4d8-e299-490e-92f8-2a0362724be1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/82bdc4d8-e299-490e-92f8-2a0362724be1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/82bdc4d8-e299-490e-92f8-2a0362724be1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/82bdc4d8-e299-490e-92f8-2a0362724be1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/866d2c87-0baa-4b54-839c-1e89d5ba6ab6.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/866d2c87-0baa-4b54-839c-1e89d5ba6ab6.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/866d2c87-0baa-4b54-839c-1e89d5ba6ab6.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/866d2c87-0baa-4b54-839c-1e89d5ba6ab6.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/8f45163f-252f-46e3-b3d3-7930b1d9b6c7.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/8f45163f-252f-46e3-b3d3-7930b1d9b6c7.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/8f45163f-252f-46e3-b3d3-7930b1d9b6c7.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/8f45163f-252f-46e3-b3d3-7930b1d9b6c7.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/baeb7d42-1e11-4d7a-abde-dc02cd89d417.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/baeb7d42-1e11-4d7a-abde-dc02cd89d417.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/baeb7d42-1e11-4d7a-abde-dc02cd89d417.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/baeb7d42-1e11-4d7a-abde-dc02cd89d417.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/bbd57889-e07c-4c4f-a223-868f9a441035.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/bbd57889-e07c-4c4f-a223-868f9a441035.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/bbd57889-e07c-4c4f-a223-868f9a441035.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/bbd57889-e07c-4c4f-a223-868f9a441035.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/c0dc5f2f-ce09-4c0f-8fae-db1689f622e1.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/c0dc5f2f-ce09-4c0f-8fae-db1689f622e1.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/c0dc5f2f-ce09-4c0f-8fae-db1689f622e1.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/c0dc5f2f-ce09-4c0f-8fae-db1689f622e1.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/c9a1fe64-f6d1-4492-ac7f-6444698cfb12.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/db8e6781-f356-497d-9aba-ef0994b6268c.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/db8e6781-f356-497d-9aba-ef0994b6268c.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/db8e6781-f356-497d-9aba-ef0994b6268c.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/db8e6781-f356-497d-9aba-ef0994b6268c.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/ee025f20-7976-47b2-aa62-a00b84b149de.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/ee025f20-7976-47b2-aa62-a00b84b149de.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/ee025f20-7976-47b2-aa62-a00b84b149de.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/node/ee025f20-7976-47b2-aa62-a00b84b149de.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/1c76b992-a37f-407a-b0b3-65784043454a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/1c76b992-a37f-407a-b0b3-65784043454a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/1c76b992-a37f-407a-b0b3-65784043454a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/1c76b992-a37f-407a-b0b3-65784043454a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/5f9ad45f-5aa9-45cd-838d-719f82b7417a.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/5f9ad45f-5aa9-45cd-838d-719f82b7417a.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/5f9ad45f-5aa9-45cd-838d-719f82b7417a.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/5f9ad45f-5aa9-45cd-838d-719f82b7417a.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/96d87429-9acf-4c03-9da6-3e8ba9cc3fab.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/96d87429-9acf-4c03-9da6-3e8ba9cc3fab.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/96d87429-9acf-4c03-9da6-3e8ba9cc3fab.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/96d87429-9acf-4c03-9da6-3e8ba9cc3fab.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/a54aec7d-5aaf-4709-a0ce-dab0ad436a33.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/a54aec7d-5aaf-4709-a0ce-dab0ad436a33.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/a54aec7d-5aaf-4709-a0ce-dab0ad436a33.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/a54aec7d-5aaf-4709-a0ce-dab0ad436a33.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/abe71fa3-1197-4bc6-abde-6c0fa270c196.yml diff --git a/docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml b/web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml similarity index 100% rename from docroot/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml rename to web/modules/custom/civictheme_content/modules/civictheme_content_highereducation/content/taxonomy_term/d95f5188-650c-4dea-abcb-df8ea008919b.yml diff --git a/docroot/modules/custom/civictheme_content/src/Helper.php b/web/modules/custom/civictheme_content/src/Helper.php similarity index 100% rename from docroot/modules/custom/civictheme_content/src/Helper.php rename to web/modules/custom/civictheme_content/src/Helper.php diff --git a/docroot/modules/custom/civictheme_dev/civictheme_dev.info.yml b/web/modules/custom/civictheme_dev/civictheme_dev.info.yml similarity index 100% rename from docroot/modules/custom/civictheme_dev/civictheme_dev.info.yml rename to web/modules/custom/civictheme_dev/civictheme_dev.info.yml diff --git a/docroot/modules/custom/civictheme_dev/civictheme_dev.install b/web/modules/custom/civictheme_dev/civictheme_dev.install similarity index 100% rename from docroot/modules/custom/civictheme_dev/civictheme_dev.install rename to web/modules/custom/civictheme_dev/civictheme_dev.install diff --git a/docroot/modules/custom/civictheme_dev/civictheme_dev.module b/web/modules/custom/civictheme_dev/civictheme_dev.module similarity index 100% rename from docroot/modules/custom/civictheme_dev/civictheme_dev.module rename to web/modules/custom/civictheme_dev/civictheme_dev.module diff --git a/docroot/modules/custom/civictheme_dev/civictheme_dev.post_update.php b/web/modules/custom/civictheme_dev/civictheme_dev.post_update.php similarity index 100% rename from docroot/modules/custom/civictheme_dev/civictheme_dev.post_update.php rename to web/modules/custom/civictheme_dev/civictheme_dev.post_update.php diff --git a/docroot/modules/custom/civictheme_dev/civictheme_dev.services.yml b/web/modules/custom/civictheme_dev/civictheme_dev.services.yml similarity index 100% rename from docroot/modules/custom/civictheme_dev/civictheme_dev.services.yml rename to web/modules/custom/civictheme_dev/civictheme_dev.services.yml diff --git a/docroot/modules/custom/civictheme_dev/composer.json b/web/modules/custom/civictheme_dev/composer.json similarity index 100% rename from docroot/modules/custom/civictheme_dev/composer.json rename to web/modules/custom/civictheme_dev/composer.json diff --git a/docroot/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_multiple_filters_exp.yml b/web/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_multiple_filters_exp.yml similarity index 100% rename from docroot/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_multiple_filters_exp.yml rename to web/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_multiple_filters_exp.yml diff --git a/docroot/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_one_filter_multi_select_exp.yml b/web/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_one_filter_multi_select_exp.yml similarity index 100% rename from docroot/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_one_filter_multi_select_exp.yml rename to web/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_one_filter_multi_select_exp.yml diff --git a/docroot/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_one_filter_single_select_exp.yml b/web/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_one_filter_single_select_exp.yml similarity index 100% rename from docroot/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_one_filter_single_select_exp.yml rename to web/modules/custom/civictheme_dev/config/install/block.block.civictheme_automated_list_examples_page_one_filter_single_select_exp.yml diff --git a/docroot/modules/custom/civictheme_dev/config/install/views.view.civictheme_automated_list_examples.yml b/web/modules/custom/civictheme_dev/config/install/views.view.civictheme_automated_list_examples.yml similarity index 100% rename from docroot/modules/custom/civictheme_dev/config/install/views.view.civictheme_automated_list_examples.yml rename to web/modules/custom/civictheme_dev/config/install/views.view.civictheme_automated_list_examples.yml diff --git a/docroot/modules/custom/civictheme_dev/config/install/views.view.civictheme_automated_list_test.yml b/web/modules/custom/civictheme_dev/config/install/views.view.civictheme_automated_list_test.yml similarity index 100% rename from docroot/modules/custom/civictheme_dev/config/install/views.view.civictheme_automated_list_test.yml rename to web/modules/custom/civictheme_dev/config/install/views.view.civictheme_automated_list_test.yml diff --git a/docroot/modules/custom/civictheme_dev/config/install/views.view.civictheme_table_examples.yml b/web/modules/custom/civictheme_dev/config/install/views.view.civictheme_table_examples.yml similarity index 100% rename from docroot/modules/custom/civictheme_dev/config/install/views.view.civictheme_table_examples.yml rename to web/modules/custom/civictheme_dev/config/install/views.view.civictheme_table_examples.yml diff --git a/docroot/modules/custom/civictheme_dev/config/optional/user.role.administrator.yml b/web/modules/custom/civictheme_dev/config/optional/user.role.administrator.yml similarity index 100% rename from docroot/modules/custom/civictheme_dev/config/optional/user.role.administrator.yml rename to web/modules/custom/civictheme_dev/config/optional/user.role.administrator.yml diff --git a/docroot/modules/custom/civictheme_dev/src/EventSubscriber/CivicthemeDevConfigDevelSubscriber.php b/web/modules/custom/civictheme_dev/src/EventSubscriber/CivicthemeDevConfigDevelSubscriber.php similarity index 100% rename from docroot/modules/custom/civictheme_dev/src/EventSubscriber/CivicthemeDevConfigDevelSubscriber.php rename to web/modules/custom/civictheme_dev/src/EventSubscriber/CivicthemeDevConfigDevelSubscriber.php diff --git a/docroot/modules/custom/civictheme_dev/src/Helper.php b/web/modules/custom/civictheme_dev/src/Helper.php similarity index 100% rename from docroot/modules/custom/civictheme_dev/src/Helper.php rename to web/modules/custom/civictheme_dev/src/Helper.php diff --git a/docroot/modules/custom/civictheme_dev/src/Plugin/ConfigFilter/CivicthemeDevIgnoreFilter.php b/web/modules/custom/civictheme_dev/src/Plugin/ConfigFilter/CivicthemeDevIgnoreFilter.php similarity index 100% rename from docroot/modules/custom/civictheme_dev/src/Plugin/ConfigFilter/CivicthemeDevIgnoreFilter.php rename to web/modules/custom/civictheme_dev/src/Plugin/ConfigFilter/CivicthemeDevIgnoreFilter.php diff --git a/docroot/modules/custom/civictheme_govcms/README.md b/web/modules/custom/civictheme_govcms/README.md similarity index 100% rename from docroot/modules/custom/civictheme_govcms/README.md rename to web/modules/custom/civictheme_govcms/README.md diff --git a/docroot/modules/custom/civictheme_govcms/civictheme_govcms.info.yml b/web/modules/custom/civictheme_govcms/civictheme_govcms.info.yml similarity index 100% rename from docroot/modules/custom/civictheme_govcms/civictheme_govcms.info.yml rename to web/modules/custom/civictheme_govcms/civictheme_govcms.info.yml diff --git a/docroot/modules/custom/civictheme_govcms/civictheme_govcms.services.yml b/web/modules/custom/civictheme_govcms/civictheme_govcms.services.yml similarity index 100% rename from docroot/modules/custom/civictheme_govcms/civictheme_govcms.services.yml rename to web/modules/custom/civictheme_govcms/civictheme_govcms.services.yml diff --git a/docroot/modules/custom/civictheme_govcms/composer.json b/web/modules/custom/civictheme_govcms/composer.json similarity index 100% rename from docroot/modules/custom/civictheme_govcms/composer.json rename to web/modules/custom/civictheme_govcms/composer.json diff --git a/docroot/modules/custom/civictheme_govcms/config/optional/user.role.administrator.yml b/web/modules/custom/civictheme_govcms/config/optional/user.role.administrator.yml similarity index 100% rename from docroot/modules/custom/civictheme_govcms/config/optional/user.role.administrator.yml rename to web/modules/custom/civictheme_govcms/config/optional/user.role.administrator.yml diff --git a/docroot/modules/custom/civictheme_govcms/drush.services.yml b/web/modules/custom/civictheme_govcms/drush.services.yml similarity index 100% rename from docroot/modules/custom/civictheme_govcms/drush.services.yml rename to web/modules/custom/civictheme_govcms/drush.services.yml diff --git a/docroot/modules/custom/civictheme_govcms/src/CivicthemeGovcmsManager.php b/web/modules/custom/civictheme_govcms/src/CivicthemeGovcmsManager.php similarity index 100% rename from docroot/modules/custom/civictheme_govcms/src/CivicthemeGovcmsManager.php rename to web/modules/custom/civictheme_govcms/src/CivicthemeGovcmsManager.php diff --git a/docroot/modules/custom/civictheme_govcms/src/Commands/CivicthemeGovcmsCommands.php b/web/modules/custom/civictheme_govcms/src/Commands/CivicthemeGovcmsCommands.php similarity index 100% rename from docroot/modules/custom/civictheme_govcms/src/Commands/CivicthemeGovcmsCommands.php rename to web/modules/custom/civictheme_govcms/src/Commands/CivicthemeGovcmsCommands.php diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.doc b/web/modules/custom/cs_generated_content/assets/dummy1.doc similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.doc rename to web/modules/custom/cs_generated_content/assets/dummy1.doc diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.docx b/web/modules/custom/cs_generated_content/assets/dummy1.docx similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.docx rename to web/modules/custom/cs_generated_content/assets/dummy1.docx diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.gif b/web/modules/custom/cs_generated_content/assets/dummy1.gif similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.gif rename to web/modules/custom/cs_generated_content/assets/dummy1.gif diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.jpeg b/web/modules/custom/cs_generated_content/assets/dummy1.jpeg similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.jpeg rename to web/modules/custom/cs_generated_content/assets/dummy1.jpeg diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.jpg b/web/modules/custom/cs_generated_content/assets/dummy1.jpg similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.jpg rename to web/modules/custom/cs_generated_content/assets/dummy1.jpg diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.mp3 b/web/modules/custom/cs_generated_content/assets/dummy1.mp3 similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.mp3 rename to web/modules/custom/cs_generated_content/assets/dummy1.mp3 diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.mp4 b/web/modules/custom/cs_generated_content/assets/dummy1.mp4 similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.mp4 rename to web/modules/custom/cs_generated_content/assets/dummy1.mp4 diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.pdf b/web/modules/custom/cs_generated_content/assets/dummy1.pdf similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.pdf rename to web/modules/custom/cs_generated_content/assets/dummy1.pdf diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.png b/web/modules/custom/cs_generated_content/assets/dummy1.png similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.png rename to web/modules/custom/cs_generated_content/assets/dummy1.png diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.svg b/web/modules/custom/cs_generated_content/assets/dummy1.svg similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.svg rename to web/modules/custom/cs_generated_content/assets/dummy1.svg diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.xls b/web/modules/custom/cs_generated_content/assets/dummy1.xls similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.xls rename to web/modules/custom/cs_generated_content/assets/dummy1.xls diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy1.xlsx b/web/modules/custom/cs_generated_content/assets/dummy1.xlsx similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy1.xlsx rename to web/modules/custom/cs_generated_content/assets/dummy1.xlsx diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy2.doc b/web/modules/custom/cs_generated_content/assets/dummy2.doc similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy2.doc rename to web/modules/custom/cs_generated_content/assets/dummy2.doc diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy2.docx b/web/modules/custom/cs_generated_content/assets/dummy2.docx similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy2.docx rename to web/modules/custom/cs_generated_content/assets/dummy2.docx diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy2.gif b/web/modules/custom/cs_generated_content/assets/dummy2.gif similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy2.gif rename to web/modules/custom/cs_generated_content/assets/dummy2.gif diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy2.jpeg b/web/modules/custom/cs_generated_content/assets/dummy2.jpeg similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy2.jpeg rename to web/modules/custom/cs_generated_content/assets/dummy2.jpeg diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy2.jpg b/web/modules/custom/cs_generated_content/assets/dummy2.jpg similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy2.jpg rename to web/modules/custom/cs_generated_content/assets/dummy2.jpg diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy2.pdf b/web/modules/custom/cs_generated_content/assets/dummy2.pdf similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy2.pdf rename to web/modules/custom/cs_generated_content/assets/dummy2.pdf diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy2.png b/web/modules/custom/cs_generated_content/assets/dummy2.png similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy2.png rename to web/modules/custom/cs_generated_content/assets/dummy2.png diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy2.svg b/web/modules/custom/cs_generated_content/assets/dummy2.svg similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy2.svg rename to web/modules/custom/cs_generated_content/assets/dummy2.svg diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy2.xls b/web/modules/custom/cs_generated_content/assets/dummy2.xls similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy2.xls rename to web/modules/custom/cs_generated_content/assets/dummy2.xls diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy2.xlsx b/web/modules/custom/cs_generated_content/assets/dummy2.xlsx similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy2.xlsx rename to web/modules/custom/cs_generated_content/assets/dummy2.xlsx diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy3.jpeg b/web/modules/custom/cs_generated_content/assets/dummy3.jpeg similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy3.jpeg rename to web/modules/custom/cs_generated_content/assets/dummy3.jpeg diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy3.jpg b/web/modules/custom/cs_generated_content/assets/dummy3.jpg similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy3.jpg rename to web/modules/custom/cs_generated_content/assets/dummy3.jpg diff --git a/docroot/modules/custom/cs_generated_content/assets/dummy3.png b/web/modules/custom/cs_generated_content/assets/dummy3.png similarity index 100% rename from docroot/modules/custom/cs_generated_content/assets/dummy3.png rename to web/modules/custom/cs_generated_content/assets/dummy3.png diff --git a/docroot/modules/custom/cs_generated_content/composer.json b/web/modules/custom/cs_generated_content/composer.json similarity index 100% rename from docroot/modules/custom/cs_generated_content/composer.json rename to web/modules/custom/cs_generated_content/composer.json diff --git a/docroot/modules/custom/cs_generated_content/config/optional/views.view.cs_generated_content_list.yml b/web/modules/custom/cs_generated_content/config/optional/views.view.cs_generated_content_list.yml similarity index 100% rename from docroot/modules/custom/cs_generated_content/config/optional/views.view.cs_generated_content_list.yml rename to web/modules/custom/cs_generated_content/config/optional/views.view.cs_generated_content_list.yml diff --git a/docroot/modules/custom/cs_generated_content/cs_generated_content.info.yml b/web/modules/custom/cs_generated_content/cs_generated_content.info.yml similarity index 100% rename from docroot/modules/custom/cs_generated_content/cs_generated_content.info.yml rename to web/modules/custom/cs_generated_content/cs_generated_content.info.yml diff --git a/docroot/modules/custom/cs_generated_content/cs_generated_content.install b/web/modules/custom/cs_generated_content/cs_generated_content.install similarity index 100% rename from docroot/modules/custom/cs_generated_content/cs_generated_content.install rename to web/modules/custom/cs_generated_content/cs_generated_content.install diff --git a/docroot/modules/custom/cs_generated_content/generated_content/file/file.inc b/web/modules/custom/cs_generated_content/generated_content/file/file.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/file/file.inc rename to web/modules/custom/cs_generated_content/generated_content/file/file.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/media/civictheme_document.inc b/web/modules/custom/cs_generated_content/generated_content/media/civictheme_document.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/media/civictheme_document.inc rename to web/modules/custom/cs_generated_content/generated_content/media/civictheme_document.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/media/civictheme_icon.inc b/web/modules/custom/cs_generated_content/generated_content/media/civictheme_icon.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/media/civictheme_icon.inc rename to web/modules/custom/cs_generated_content/generated_content/media/civictheme_icon.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/media/civictheme_image.inc b/web/modules/custom/cs_generated_content/generated_content/media/civictheme_image.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/media/civictheme_image.inc rename to web/modules/custom/cs_generated_content/generated_content/media/civictheme_image.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/media/civictheme_video.inc b/web/modules/custom/cs_generated_content/generated_content/media/civictheme_video.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/media/civictheme_video.inc rename to web/modules/custom/cs_generated_content/generated_content/media/civictheme_video.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_event.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_event.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_event.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_event.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/01.helpers.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/01.helpers.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/01.helpers.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/01.helpers.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/02.general.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/02.general.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/02.general.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/02.general.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/component.attachment.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/component.attachment.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/component.attachment.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/component.attachment.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/component.map.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/component.map.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/component.map.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_event_variations/component.map.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/01.helpers.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/01.helpers.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/01.helpers.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/01.helpers.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/02.general.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/02.general.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/02.general.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/02.general.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/03.banner.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/03.banner.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/03.banner.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/03.banner.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.accordion.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.accordion.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.accordion.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.accordion.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.attachment.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.attachment.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.attachment.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.attachment.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.automated_list.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.automated_list.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.automated_list.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.automated_list.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.callout.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.callout.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.callout.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.callout.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.campaign.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.campaign.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.campaign.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.campaign.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.cards.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.cards.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.cards.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.cards.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.content.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.content.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.content.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.content.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.iframe.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.iframe.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.iframe.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.iframe.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.manual_list.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.manual_list.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.manual_list.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.manual_list.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.map.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.map.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.map.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.map.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.next_step.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.next_step.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.next_step.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.next_step.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.promo.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.promo.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.promo.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.promo.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.quote.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.quote.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.quote.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.quote.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.slider.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.slider.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.slider.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.slider.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.webform.inc b/web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.webform.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.webform.inc rename to web/modules/custom/cs_generated_content/generated_content/node/civictheme_page_variations/component.webform.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/taxonomy_term/civictheme_site_sections.inc b/web/modules/custom/cs_generated_content/generated_content/taxonomy_term/civictheme_site_sections.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/taxonomy_term/civictheme_site_sections.inc rename to web/modules/custom/cs_generated_content/generated_content/taxonomy_term/civictheme_site_sections.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/taxonomy_term/civictheme_topics.inc b/web/modules/custom/cs_generated_content/generated_content/taxonomy_term/civictheme_topics.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/taxonomy_term/civictheme_topics.inc rename to web/modules/custom/cs_generated_content/generated_content/taxonomy_term/civictheme_topics.inc diff --git a/docroot/modules/custom/cs_generated_content/generated_content/user/user.inc b/web/modules/custom/cs_generated_content/generated_content/user/user.inc similarity index 100% rename from docroot/modules/custom/cs_generated_content/generated_content/user/user.inc rename to web/modules/custom/cs_generated_content/generated_content/user/user.inc diff --git a/docroot/modules/custom/cs_generated_content/src/CsGeneratedContentAssetGenerator.php b/web/modules/custom/cs_generated_content/src/CsGeneratedContentAssetGenerator.php similarity index 100% rename from docroot/modules/custom/cs_generated_content/src/CsGeneratedContentAssetGenerator.php rename to web/modules/custom/cs_generated_content/src/CsGeneratedContentAssetGenerator.php diff --git a/docroot/modules/custom/cs_generated_content/src/CsGeneratedContentCivicthemeTrait.php b/web/modules/custom/cs_generated_content/src/CsGeneratedContentCivicthemeTrait.php similarity index 100% rename from docroot/modules/custom/cs_generated_content/src/CsGeneratedContentCivicthemeTrait.php rename to web/modules/custom/cs_generated_content/src/CsGeneratedContentCivicthemeTrait.php diff --git a/docroot/modules/custom/cs_generated_content/src/CsGeneratedContentHelper.php b/web/modules/custom/cs_generated_content/src/CsGeneratedContentHelper.php similarity index 100% rename from docroot/modules/custom/cs_generated_content/src/CsGeneratedContentHelper.php rename to web/modules/custom/cs_generated_content/src/CsGeneratedContentHelper.php diff --git a/docroot/modules/custom/cs_generated_content/src/CsGeneratedContentServiceProvider.php b/web/modules/custom/cs_generated_content/src/CsGeneratedContentServiceProvider.php similarity index 100% rename from docroot/modules/custom/cs_generated_content/src/CsGeneratedContentServiceProvider.php rename to web/modules/custom/cs_generated_content/src/CsGeneratedContentServiceProvider.php diff --git a/docroot/robots.txt b/web/robots.txt similarity index 100% rename from docroot/robots.txt rename to web/robots.txt diff --git a/docroot/sites/default/default.services.local.yml b/web/sites/default/default.services.local.yml similarity index 100% rename from docroot/sites/default/default.services.local.yml rename to web/sites/default/default.services.local.yml diff --git a/docroot/sites/default/default.services.yml b/web/sites/default/default.services.yml similarity index 94% rename from docroot/sites/default/default.services.yml rename to web/sites/default/default.services.yml index b4d27e05a..8a6cdf2f7 100644 --- a/docroot/sites/default/default.services.yml +++ b/web/sites/default/default.services.yml @@ -37,6 +37,13 @@ parameters: # @default none # cookie_domain: '.example.com' # + # Set the SameSite cookie attribute: 'None', 'Lax', or 'Strict'. If set, + # this value will override the server value. See + # https://www.php.net/manual/en/session.security.ini.php for more + # information. + # @default no value + cookie_samesite: Lax + # # Set the session ID string length. The length can be between 22 to 256. The # PHP recommended value is 48. See # https://www.php.net/manual/session.security.ini.php for more information. @@ -213,3 +220,9 @@ parameters: maxAge: false # Sets the Access-Control-Allow-Credentials header. supportsCredentials: false + + queue.config: + # The maximum number of seconds to wait if a queue is temporarily suspended. + # This is not applicable when a queue is suspended but does not specify + # how long to wait before attempting to resume. + suspendMaximumWait: 30 diff --git a/docroot/sites/default/default.settings.local.php b/web/sites/default/default.settings.local.php similarity index 90% rename from docroot/sites/default/default.settings.local.php rename to web/sites/default/default.settings.local.php index 6705a59c4..764a9b3b2 100644 --- a/docroot/sites/default/default.settings.local.php +++ b/web/sites/default/default.settings.local.php @@ -21,8 +21,8 @@ // Disable JavaScript files aggregation. $config['system.performance']['js']['preprocess'] = FALSE; -// Skip permissions hardening. -$settings['skip_permissions_hardening'] = TRUE; +// Enable Livereload. +$settings['livereload'] = TRUE; // Hide admin toolbar. Useful for themeing while logged in as admin. // $settings['hide_admin_toolbar'] = TRUE; diff --git a/docroot/sites/default/default.settings.php b/web/sites/default/default.settings.php similarity index 96% rename from docroot/sites/default/default.settings.php rename to web/sites/default/default.settings.php index 20d789369..c0b18427a 100644 --- a/docroot/sites/default/default.settings.php +++ b/web/sites/default/default.settings.php @@ -256,7 +256,8 @@ * variable has the same value on each server. * * For enhanced security, you may set this variable to the contents of a file - * outside your document root; you should also ensure that this file is not + * outside your document root, and vary the value across environments (like + * production and development); you should also ensure that this file is not * stored with backups of your database. * * Example: @@ -486,6 +487,15 @@ # $settings['file_chmod_directory'] = 0775; # $settings['file_chmod_file'] = 0664; +/** + * Optimized assets path: + * + * A local file system path where optimized assets will be stored. This directory + * must exist and be writable by Drupal. This directory must be relative to + * the Drupal installation directory and be accessible over the web. + */ +# $settings['file_assets_path'] = 'sites/default/files'; + /** * Public file base URL: * @@ -550,6 +560,23 @@ */ # $settings['file_sa_core_2023_005_schemes'] = ['porcelain']; +/** + * Configuration for phpinfo() admin status report. + * + * Drupal's admin UI includes a report at admin/reports/status/php which shows + * the output of phpinfo(). The full output can contain sensitive information + * so by default Drupal removes some sections. + * + * This behaviour can be configured by setting this variable to a different + * value corresponding to the flags parameter of phpinfo(). + * + * If you need to expose more information in the report - for example to debug a + * problem - consider doing so temporarily. + * + * @see https://www.php.net/manual/function.phpinfo.php + */ +# $settings['sa_core_2023_004_phpinfo_flags'] = ~ (INFO_VARIABLES | INFO_ENVIRONMENT); + /** * Private file path: * @@ -599,7 +626,7 @@ * any added language. (eg locale_custom_strings_de for german). */ # $settings['locale_custom_strings_en'][''] = [ -# 'forum' => 'Discussion board', +# 'Home' => 'Front page', # '@count min' => '@count minutes', # ]; @@ -724,6 +751,7 @@ * * @see https://www.drupal.org/docs/installing-drupal/trusted-host-settings */ +# $settings['trusted_host_patterns'] = []; /** * The default list of directories that will be ignored by Drupal's file API. diff --git a/web/sites/default/includes/settings.environment_indicator.php b/web/sites/default/includes/settings.environment_indicator.php new file mode 100644 index 000000000..fa66d7337 --- /dev/null +++ b/web/sites/default/includes/settings.environment_indicator.php @@ -0,0 +1,29 @@ +404 Not Found

Not Found

The requested URL "@path" was not found on this server.

'; include_once $contrib_path . '/fast404/fast404.inc'; + // @phpstan-ignore-next-line fast404_preboot($settings); + // @codeCoverageIgnoreEnd } diff --git a/web/sites/default/includes/settings.shield.php b/web/sites/default/includes/settings.shield.php new file mode 100644 index 000000000..3eda28ff8 --- /dev/null +++ b/web/sites/default/includes/settings.shield.php @@ -0,0 +1,40 @@ + + [ + 'default' => + [ + 'database' => getenv('MARIADB_DATABASE') ?: 'drupal', + 'username' => getenv('MARIADB_USERNAME') ?: 'drupal', + 'password' => getenv('MARIADB_PASSWORD') ?: 'drupal', + 'host' => getenv('MARIADB_HOST') ?: 'localhost', + 'port' => getenv('MARIADB_PORT') ?: '', + 'prefix' => '', + 'driver' => 'mysql', + ], + ], +]; //////////////////////////////////////////////////////////////////////////////// -/// END OF SITE-SPECIFIC SETTINGS /// +/// ENVIRONMENT-SPECIFIC SETTINGS /// //////////////////////////////////////////////////////////////////////////////// // Initialise environment type in Lagoon environment. -if (getenv('LAGOON')) { +if (getenv('LAGOON') && getenv('LAGOON_ENVIRONMENT_TYPE') == 'production' || getenv('LAGOON_ENVIRONMENT_TYPE') == 'development') { + // Do not put any Lagoon-specific settings in this code block. It is used + // to explicitly map Lagoon environments to $settings['environment'] + // variable only. + // Instead, use 'PER-ENVIRONMENT SETTINGS' section below. + // + // Environment is marked as 'production' in Lagoon. if (getenv('LAGOON_ENVIRONMENT_TYPE') == 'production') { $settings['environment'] = ENVIRONMENT_PROD; } - // Use a dedicated branch to identify production environment. - // This is useful when 'production' Lagoon environment is not provisioned yet. - elseif (!empty(getenv('LAGOON_GIT_BRANCH')) && !empty(getenv('DREVOPS_PRODUCTION_BRANCH')) && getenv('LAGOON_GIT_BRANCH') == getenv('DREVOPS_PRODUCTION_BRANCH')) { - $settings['environment'] = ENVIRONMENT_PROD; - } - elseif (getenv('LAGOON_ENVIRONMENT_TYPE') == 'development') { + // All other environments running in Lagoon are considered 'development'. + else { + // Any other environment is considered 'development' in Lagoon. $settings['environment'] = ENVIRONMENT_DEV; + + // But try to identify production environment using a branch name for + // the cases when 'production' Lagoon environment is not provisioned yet. + if (!empty(getenv('LAGOON_GIT_BRANCH')) && !empty(getenv('DREVOPS_LAGOON_PRODUCTION_BRANCH')) && getenv('LAGOON_GIT_BRANCH') == getenv('DREVOPS_LAGOON_PRODUCTION_BRANCH')) { + $settings['environment'] = ENVIRONMENT_PROD; + } + // Dedicated test environment based on a branch name. + elseif (getenv('LAGOON_GIT_BRANCH') == 'master') { + $settings['environment'] = ENVIRONMENT_TEST; + } + // Test environment based on a branch prefix for release and + // hotfix branches. + elseif (!empty(getenv('LAGOON_GIT_BRANCH')) && (str_starts_with(getenv('LAGOON_GIT_BRANCH'), 'release/') || str_starts_with(getenv('LAGOON_GIT_BRANCH'), 'hotfix/'))) { + $settings['environment'] = ENVIRONMENT_TEST; + } } // Lagoon version. @@ -152,111 +167,85 @@ // Lagoon reverse proxy settings. $settings['reverse_proxy'] = TRUE; + // Reverse proxy settings. + $settings['reverse_proxy_header'] = 'HTTP_TRUE_CLIENT_IP'; + + // Cache prefix. + $settings['cache_prefix']['default'] = (getenv('LAGOON_PROJECT') ?: getenv('DREVOPS_PROJECT')) . '_' . (getenv('LAGOON_GIT_SAFE_BRANCH') ?: getenv('DREVOPS_LAGOON_PRODUCTION_BRANCH')); // Trusted host patterns for Lagoon internal routes. - // Do not add vanity domains here. Use the $settings['trusted_host_patterns'] - // array in a previous section. + // URL when accessed from PHP processes in Lagoon. + $settings['trusted_host_patterns'][] = '^nginx\-php$'; + // Lagoon URL. + $settings['trusted_host_patterns'][] = '^.+\.au\.amazee\.io$'; + // Lagoon routes. if (getenv('LAGOON_ROUTES')) { $patterns = str_replace(['.', 'https://', 'http://', ','], [ '\.', '', '', '|', ], getenv('LAGOON_ROUTES')); $settings['trusted_host_patterns'][] = '^' . $patterns . '$'; } +} - // Hash salt. - // MARIADB_HOST on Lagoon is a randomly generated service name. - $settings['hash_salt'] = hash('sha256', getenv('MARIADB_HOST')); +// Allow overriding of an environment type. +if (!empty(getenv('DRUPAL_ENVIRONMENT'))) { + $settings['environment'] = getenv('DRUPAL_ENVIRONMENT'); } //////////////////////////////////////////////////////////////////////////////// -/// PER-ENVIRONMENT SETTINGS /// +/// ENVIRONMENT DETECTION /// //////////////////////////////////////////////////////////////////////////////// -if ($settings['environment'] == ENVIRONMENT_PROD) { - $config['environment_indicator.indicator']['name'] = $settings['environment']; - $config['environment_indicator.indicator']['bg_color'] = '#ef5350'; - $config['environment_indicator.indicator']['fg_color'] = '#000000'; - $config['environment_indicator.settings']['toolbar_integration'] = [TRUE]; - $config['environment_indicator.settings']['favicon'] = TRUE; -} -else { - $config['stage_file_proxy.settings']['origin'] = sprintf('https://%s:%s@nginx-php.master.civic.au2.amazee.io/', getenv('DRUPAL_SHIELD_USER'), getenv('DRUPAL_SHIELD_PASS')); - $config['stage_file_proxy.settings']['hotlink'] = FALSE; - - $config['environment_indicator.indicator']['name'] = $settings['environment']; - $config['environment_indicator.indicator']['bg_color'] = '#006600'; - $config['environment_indicator.indicator']['fg_color'] = '#ffffff'; - $config['environment_indicator.settings']['toolbar_integration'] = [TRUE]; - $config['environment_indicator.settings']['favicon'] = TRUE; - - // Enforce shield. - $config['shield.settings']['shield_enable'] = TRUE; -} - -if ($settings['environment'] == ENVIRONMENT_TEST) { - $config['config_split.config_split.test']['status'] = TRUE; - - $config['environment_indicator.indicator']['bg_color'] = '#fff176'; - $config['environment_indicator.indicator']['fg_color'] = '#000000'; -} - -if ($settings['environment'] == ENVIRONMENT_DEV) { - $config['config_split.config_split.dev']['status'] = TRUE; - - $config['environment_indicator.indicator']['bg_color'] = '#4caf50'; - $config['environment_indicator.indicator']['fg_color'] = '#000000'; -} - if ($settings['environment'] == ENVIRONMENT_CI) { - $config['config_split.config_split.ci']['status'] = TRUE; - // Never harden permissions on sites/default/files. $settings['skip_permissions_hardening'] = TRUE; - // Bypass shield. - $config['shield.settings']['shield_enable'] = FALSE; + // Disable built-in cron trigger. + $config['automated_cron.settings']['interval'] = 0; // Disable mail send out. $settings['suspend_mail_send'] = TRUE; } if ($settings['environment'] == ENVIRONMENT_LOCAL) { - // Show all error messages on the site. - $config['system.logging']['error_level'] = 'all'; - - // Enable local split. - $config['config_split.config_split.local']['status'] = TRUE; - // Never harden permissions on sites/default/files during local development. $settings['skip_permissions_hardening'] = TRUE; - // Bypass shield. - $config['shield.settings']['shield_enable'] = FALSE; + // Disable built-in cron trigger. + $config['automated_cron.settings']['interval'] = 0; + + // Show all error messages on the site. + $config['system.logging']['error_level'] = 'all'; } //////////////////////////////////////////////////////////////////////////////// -/// END OF PER-ENVIRONMENT SETTINGS /// +/// PER-MODULE SETTINGS /// //////////////////////////////////////////////////////////////////////////////// -// Include generated settings file, if available. -if (file_exists($app_root . '/' . $site_path . '/settings.generated.php')) { - include $app_root . '/' . $site_path . '/settings.generated.php'; +if (file_exists($app_root . '/' . $site_path . '/includes')) { + $files = glob($app_root . '/' . $site_path . '/includes/settings.*.php'); + if ($files) { + foreach ($files as $filename) { + require $filename; + } + } } +//////////////////////////////////////////////////////////////////////////////// +/// LOCAL SETTINGS /// +//////////////////////////////////////////////////////////////////////////////// + // Load local development override configuration, if available. // -// Use settings.local.php to override variables on secondary (staging, -// development, etc.) installations of this site. Typically, used to disable -// caching, JavaScript/CSS compression, re-routing of outgoing emails, and -// other things that should not happen on development and testing sites. -// // Copy default.settings.local.php and default.services.local.yml to // settings.local.php and services.local.yml respectively. // // Keep this code block at the end of this file to take full effect. +// @codeCoverageIgnoreStart if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) { - include $app_root . '/' . $site_path . '/settings.local.php'; + require $app_root . '/' . $site_path . '/settings.local.php'; } if (file_exists($app_root . '/' . $site_path . '/services.local.yml')) { $settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.local.yml'; } +// @codeCoverageIgnoreEnd diff --git a/docroot/themes/contrib/civictheme/.ahoy.yml b/web/themes/contrib/civictheme/.ahoy.yml similarity index 100% rename from docroot/themes/contrib/civictheme/.ahoy.yml rename to web/themes/contrib/civictheme/.ahoy.yml diff --git a/docroot/themes/contrib/civictheme/.circleci/build.sh b/web/themes/contrib/civictheme/.circleci/build.sh similarity index 100% rename from docroot/themes/contrib/civictheme/.circleci/build.sh rename to web/themes/contrib/civictheme/.circleci/build.sh diff --git a/docroot/themes/contrib/civictheme/.circleci/config.yml b/web/themes/contrib/civictheme/.circleci/config.yml similarity index 100% rename from docroot/themes/contrib/civictheme/.circleci/config.yml rename to web/themes/contrib/civictheme/.circleci/config.yml diff --git a/docroot/themes/contrib/civictheme/.circleci/deploy.sh b/web/themes/contrib/civictheme/.circleci/deploy.sh similarity index 100% rename from docroot/themes/contrib/civictheme/.circleci/deploy.sh rename to web/themes/contrib/civictheme/.circleci/deploy.sh diff --git a/docroot/themes/contrib/civictheme/.circleci/lint.sh b/web/themes/contrib/civictheme/.circleci/lint.sh similarity index 100% rename from docroot/themes/contrib/civictheme/.circleci/lint.sh rename to web/themes/contrib/civictheme/.circleci/lint.sh diff --git a/docroot/themes/contrib/civictheme/.circleci/process-artifacts.sh b/web/themes/contrib/civictheme/.circleci/process-artifacts.sh similarity index 100% rename from docroot/themes/contrib/civictheme/.circleci/process-artifacts.sh rename to web/themes/contrib/civictheme/.circleci/process-artifacts.sh diff --git a/docroot/themes/contrib/civictheme/.circleci/test.sh b/web/themes/contrib/civictheme/.circleci/test.sh similarity index 100% rename from docroot/themes/contrib/civictheme/.circleci/test.sh rename to web/themes/contrib/civictheme/.circleci/test.sh diff --git a/docroot/themes/contrib/civictheme/.editorconfig b/web/themes/contrib/civictheme/.editorconfig similarity index 100% rename from docroot/themes/contrib/civictheme/.editorconfig rename to web/themes/contrib/civictheme/.editorconfig diff --git a/docroot/themes/contrib/civictheme/.eslintignore b/web/themes/contrib/civictheme/.eslintignore similarity index 100% rename from docroot/themes/contrib/civictheme/.eslintignore rename to web/themes/contrib/civictheme/.eslintignore diff --git a/docroot/themes/contrib/civictheme/.eslintrc.yml b/web/themes/contrib/civictheme/.eslintrc.yml similarity index 100% rename from docroot/themes/contrib/civictheme/.eslintrc.yml rename to web/themes/contrib/civictheme/.eslintrc.yml diff --git a/docroot/themes/contrib/civictheme/.gitattributes b/web/themes/contrib/civictheme/.gitattributes similarity index 100% rename from docroot/themes/contrib/civictheme/.gitattributes rename to web/themes/contrib/civictheme/.gitattributes diff --git a/web/themes/contrib/civictheme/.github/release-drafter.yml b/web/themes/contrib/civictheme/.github/release-drafter.yml new file mode 100644 index 000000000..699ff479c --- /dev/null +++ b/web/themes/contrib/civictheme/.github/release-drafter.yml @@ -0,0 +1,12 @@ +name-template: '$NEXT_MINOR_VERSION' +tag-template: '$NEXT_MINOR_VERSION' +change-template: '- $TITLE @$AUTHOR (#$NUMBER)' +change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. +template: | + ## What's new since $PREVIOUS_TAG + + $CHANGES + + **Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...$NEXT_MINOR_VERSION + + $CONTRIBUTORS diff --git a/docroot/themes/contrib/civictheme/.github/workflows/draft-release.yml b/web/themes/contrib/civictheme/.github/workflows/draft-release.yml similarity index 100% rename from docroot/themes/contrib/civictheme/.github/workflows/draft-release.yml rename to web/themes/contrib/civictheme/.github/workflows/draft-release.yml diff --git a/docroot/themes/contrib/civictheme/.gitignore b/web/themes/contrib/civictheme/.gitignore similarity index 100% rename from docroot/themes/contrib/civictheme/.gitignore rename to web/themes/contrib/civictheme/.gitignore diff --git a/docroot/themes/contrib/civictheme/.gitignore.release b/web/themes/contrib/civictheme/.gitignore.release similarity index 100% rename from docroot/themes/contrib/civictheme/.gitignore.release rename to web/themes/contrib/civictheme/.gitignore.release diff --git a/docroot/themes/contrib/civictheme/.nvmrc b/web/themes/contrib/civictheme/.nvmrc similarity index 100% rename from docroot/themes/contrib/civictheme/.nvmrc rename to web/themes/contrib/civictheme/.nvmrc diff --git a/docroot/themes/contrib/civictheme/.storybook/addon-config.js b/web/themes/contrib/civictheme/.storybook/addon-config.js similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/addon-config.js rename to web/themes/contrib/civictheme/.storybook/addon-config.js diff --git a/docroot/themes/contrib/civictheme/.storybook/components_css.stories.js b/web/themes/contrib/civictheme/.storybook/components_css.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/components_css.stories.js rename to web/themes/contrib/civictheme/.storybook/components_css.stories.js diff --git a/docroot/themes/contrib/civictheme/.storybook/drupal_behaviors.js b/web/themes/contrib/civictheme/.storybook/drupal_behaviors.js similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/drupal_behaviors.js rename to web/themes/contrib/civictheme/.storybook/drupal_behaviors.js diff --git a/docroot/themes/contrib/civictheme/.storybook/importer.scss_variables.js b/web/themes/contrib/civictheme/.storybook/importer.scss_variables.js similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/importer.scss_variables.js rename to web/themes/contrib/civictheme/.storybook/importer.scss_variables.js diff --git a/docroot/themes/contrib/civictheme/.storybook/main.js b/web/themes/contrib/civictheme/.storybook/main.js similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/main.js rename to web/themes/contrib/civictheme/.storybook/main.js diff --git a/docroot/themes/contrib/civictheme/.storybook/manager-head.html b/web/themes/contrib/civictheme/.storybook/manager-head.html similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/manager-head.html rename to web/themes/contrib/civictheme/.storybook/manager-head.html diff --git a/docroot/themes/contrib/civictheme/.storybook/manager.js b/web/themes/contrib/civictheme/.storybook/manager.js similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/manager.js rename to web/themes/contrib/civictheme/.storybook/manager.js diff --git a/docroot/themes/contrib/civictheme/.storybook/preview.js b/web/themes/contrib/civictheme/.storybook/preview.js similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/preview.js rename to web/themes/contrib/civictheme/.storybook/preview.js diff --git a/docroot/themes/contrib/civictheme/.storybook/setupTwig.js b/web/themes/contrib/civictheme/.storybook/setupTwig.js similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/setupTwig.js rename to web/themes/contrib/civictheme/.storybook/setupTwig.js diff --git a/docroot/themes/contrib/civictheme/.storybook/static/api/alerts1.json b/web/themes/contrib/civictheme/.storybook/static/api/alerts1.json similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/static/api/alerts1.json rename to web/themes/contrib/civictheme/.storybook/static/api/alerts1.json diff --git a/docroot/themes/contrib/civictheme/.storybook/static/api/alerts2.json b/web/themes/contrib/civictheme/.storybook/static/api/alerts2.json similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/static/api/alerts2.json rename to web/themes/contrib/civictheme/.storybook/static/api/alerts2.json diff --git a/docroot/themes/contrib/civictheme/.storybook/static/api/alerts3.json b/web/themes/contrib/civictheme/.storybook/static/api/alerts3.json similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/static/api/alerts3.json rename to web/themes/contrib/civictheme/.storybook/static/api/alerts3.json diff --git a/docroot/themes/contrib/civictheme/.storybook/theme.js b/web/themes/contrib/civictheme/.storybook/theme.js similarity index 100% rename from docroot/themes/contrib/civictheme/.storybook/theme.js rename to web/themes/contrib/civictheme/.storybook/theme.js diff --git a/docroot/themes/contrib/civictheme/.stylelintignore b/web/themes/contrib/civictheme/.stylelintignore similarity index 100% rename from docroot/themes/contrib/civictheme/.stylelintignore rename to web/themes/contrib/civictheme/.stylelintignore diff --git a/docroot/themes/contrib/civictheme/.stylelintrc.json b/web/themes/contrib/civictheme/.stylelintrc.json similarity index 100% rename from docroot/themes/contrib/civictheme/.stylelintrc.json rename to web/themes/contrib/civictheme/.stylelintrc.json diff --git a/docroot/themes/contrib/civictheme/README.md b/web/themes/contrib/civictheme/README.md similarity index 100% rename from docroot/themes/contrib/civictheme/README.md rename to web/themes/contrib/civictheme/README.md diff --git a/docroot/themes/contrib/civictheme/assets/backgrounds/civictheme_background_1.png b/web/themes/contrib/civictheme/assets/backgrounds/civictheme_background_1.png similarity index 100% rename from docroot/themes/contrib/civictheme/assets/backgrounds/civictheme_background_1.png rename to web/themes/contrib/civictheme/assets/backgrounds/civictheme_background_1.png diff --git a/docroot/themes/contrib/civictheme/assets/backgrounds/civictheme_background_2.png b/web/themes/contrib/civictheme/assets/backgrounds/civictheme_background_2.png similarity index 100% rename from docroot/themes/contrib/civictheme/assets/backgrounds/civictheme_background_2.png rename to web/themes/contrib/civictheme/assets/backgrounds/civictheme_background_2.png diff --git a/docroot/themes/contrib/civictheme/assets/favicon.ico b/web/themes/contrib/civictheme/assets/favicon.ico similarity index 100% rename from docroot/themes/contrib/civictheme/assets/favicon.ico rename to web/themes/contrib/civictheme/assets/favicon.ico diff --git a/docroot/themes/contrib/civictheme/assets/js/.gitkeep b/web/themes/contrib/civictheme/assets/fonts/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/assets/js/.gitkeep rename to web/themes/contrib/civictheme/assets/fonts/.gitkeep diff --git a/docroot/themes/contrib/civictheme/assets/icons/account.svg b/web/themes/contrib/civictheme/assets/icons/account.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/account.svg rename to web/themes/contrib/civictheme/assets/icons/account.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/approve.svg b/web/themes/contrib/civictheme/assets/icons/approve.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/approve.svg rename to web/themes/contrib/civictheme/assets/icons/approve.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/bars.svg b/web/themes/contrib/civictheme/assets/icons/bars.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/bars.svg rename to web/themes/contrib/civictheme/assets/icons/bars.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/bullet.svg b/web/themes/contrib/civictheme/assets/icons/bullet.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/bullet.svg rename to web/themes/contrib/civictheme/assets/icons/bullet.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/calendar-1.svg b/web/themes/contrib/civictheme/assets/icons/calendar-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/calendar-1.svg rename to web/themes/contrib/civictheme/assets/icons/calendar-1.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/calendar-2.svg b/web/themes/contrib/civictheme/assets/icons/calendar-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/calendar-2.svg rename to web/themes/contrib/civictheme/assets/icons/calendar-2.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/call.svg b/web/themes/contrib/civictheme/assets/icons/call.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/call.svg rename to web/themes/contrib/civictheme/assets/icons/call.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/cancel.svg b/web/themes/contrib/civictheme/assets/icons/cancel.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/cancel.svg rename to web/themes/contrib/civictheme/assets/icons/cancel.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/checked.svg b/web/themes/contrib/civictheme/assets/icons/checked.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/checked.svg rename to web/themes/contrib/civictheme/assets/icons/checked.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/close-outline.svg b/web/themes/contrib/civictheme/assets/icons/close-outline.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/close-outline.svg rename to web/themes/contrib/civictheme/assets/icons/close-outline.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/close.svg b/web/themes/contrib/civictheme/assets/icons/close.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/close.svg rename to web/themes/contrib/civictheme/assets/icons/close.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/down-arrow-1.svg b/web/themes/contrib/civictheme/assets/icons/down-arrow-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/down-arrow-1.svg rename to web/themes/contrib/civictheme/assets/icons/down-arrow-1.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/down-arrow-2.svg b/web/themes/contrib/civictheme/assets/icons/down-arrow-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/down-arrow-2.svg rename to web/themes/contrib/civictheme/assets/icons/down-arrow-2.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/down-arrow-large.svg b/web/themes/contrib/civictheme/assets/icons/down-arrow-large.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/down-arrow-large.svg rename to web/themes/contrib/civictheme/assets/icons/down-arrow-large.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/download-file.svg b/web/themes/contrib/civictheme/assets/icons/download-file.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/download-file.svg rename to web/themes/contrib/civictheme/assets/icons/download-file.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/download.svg b/web/themes/contrib/civictheme/assets/icons/download.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/download.svg rename to web/themes/contrib/civictheme/assets/icons/download.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/exclamation-mark-1.svg b/web/themes/contrib/civictheme/assets/icons/exclamation-mark-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/exclamation-mark-1.svg rename to web/themes/contrib/civictheme/assets/icons/exclamation-mark-1.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/exclamation-mark-2.svg b/web/themes/contrib/civictheme/assets/icons/exclamation-mark-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/exclamation-mark-2.svg rename to web/themes/contrib/civictheme/assets/icons/exclamation-mark-2.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/exclamation-mark-3.svg b/web/themes/contrib/civictheme/assets/icons/exclamation-mark-3.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/exclamation-mark-3.svg rename to web/themes/contrib/civictheme/assets/icons/exclamation-mark-3.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/eye.svg b/web/themes/contrib/civictheme/assets/icons/eye.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/eye.svg rename to web/themes/contrib/civictheme/assets/icons/eye.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/facebook.svg b/web/themes/contrib/civictheme/assets/icons/facebook.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/facebook.svg rename to web/themes/contrib/civictheme/assets/icons/facebook.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/help.svg b/web/themes/contrib/civictheme/assets/icons/help.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/help.svg rename to web/themes/contrib/civictheme/assets/icons/help.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/image.svg b/web/themes/contrib/civictheme/assets/icons/image.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/image.svg rename to web/themes/contrib/civictheme/assets/icons/image.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/information-mark.svg b/web/themes/contrib/civictheme/assets/icons/information-mark.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/information-mark.svg rename to web/themes/contrib/civictheme/assets/icons/information-mark.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/left-arrow-outline.svg b/web/themes/contrib/civictheme/assets/icons/left-arrow-outline.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/left-arrow-outline.svg rename to web/themes/contrib/civictheme/assets/icons/left-arrow-outline.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/left-arrow.svg b/web/themes/contrib/civictheme/assets/icons/left-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/left-arrow.svg rename to web/themes/contrib/civictheme/assets/icons/left-arrow.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/linkedin.svg b/web/themes/contrib/civictheme/assets/icons/linkedin.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/linkedin.svg rename to web/themes/contrib/civictheme/assets/icons/linkedin.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/magnifier.svg b/web/themes/contrib/civictheme/assets/icons/magnifier.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/magnifier.svg rename to web/themes/contrib/civictheme/assets/icons/magnifier.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/map.svg b/web/themes/contrib/civictheme/assets/icons/map.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/map.svg rename to web/themes/contrib/civictheme/assets/icons/map.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/megaphone.svg b/web/themes/contrib/civictheme/assets/icons/megaphone.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/megaphone.svg rename to web/themes/contrib/civictheme/assets/icons/megaphone.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/mortarboard.svg b/web/themes/contrib/civictheme/assets/icons/mortarboard.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/mortarboard.svg rename to web/themes/contrib/civictheme/assets/icons/mortarboard.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/newspaper.svg b/web/themes/contrib/civictheme/assets/icons/newspaper.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/newspaper.svg rename to web/themes/contrib/civictheme/assets/icons/newspaper.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/pdf-file.svg b/web/themes/contrib/civictheme/assets/icons/pdf-file.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/pdf-file.svg rename to web/themes/contrib/civictheme/assets/icons/pdf-file.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/progress.svg b/web/themes/contrib/civictheme/assets/icons/progress.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/progress.svg rename to web/themes/contrib/civictheme/assets/icons/progress.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/right-arrow-1.svg b/web/themes/contrib/civictheme/assets/icons/right-arrow-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/right-arrow-1.svg rename to web/themes/contrib/civictheme/assets/icons/right-arrow-1.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/right-arrow-2.svg b/web/themes/contrib/civictheme/assets/icons/right-arrow-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/right-arrow-2.svg rename to web/themes/contrib/civictheme/assets/icons/right-arrow-2.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/select-box.svg b/web/themes/contrib/civictheme/assets/icons/select-box.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/select-box.svg rename to web/themes/contrib/civictheme/assets/icons/select-box.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/share.svg b/web/themes/contrib/civictheme/assets/icons/share.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/share.svg rename to web/themes/contrib/civictheme/assets/icons/share.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/square.svg b/web/themes/contrib/civictheme/assets/icons/square.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/square.svg rename to web/themes/contrib/civictheme/assets/icons/square.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/to-do.svg b/web/themes/contrib/civictheme/assets/icons/to-do.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/to-do.svg rename to web/themes/contrib/civictheme/assets/icons/to-do.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/twitter.svg b/web/themes/contrib/civictheme/assets/icons/twitter.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/twitter.svg rename to web/themes/contrib/civictheme/assets/icons/twitter.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/up-arrow-large.svg b/web/themes/contrib/civictheme/assets/icons/up-arrow-large.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/up-arrow-large.svg rename to web/themes/contrib/civictheme/assets/icons/up-arrow-large.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/up-arrow.svg b/web/themes/contrib/civictheme/assets/icons/up-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/up-arrow.svg rename to web/themes/contrib/civictheme/assets/icons/up-arrow.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/upper-arrow.svg b/web/themes/contrib/civictheme/assets/icons/upper-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/upper-arrow.svg rename to web/themes/contrib/civictheme/assets/icons/upper-arrow.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/upper-right-arrow.svg b/web/themes/contrib/civictheme/assets/icons/upper-right-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/upper-right-arrow.svg rename to web/themes/contrib/civictheme/assets/icons/upper-right-arrow.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/watch.svg b/web/themes/contrib/civictheme/assets/icons/watch.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/watch.svg rename to web/themes/contrib/civictheme/assets/icons/watch.svg diff --git a/docroot/themes/contrib/civictheme/assets/icons/word-file.svg b/web/themes/contrib/civictheme/assets/icons/word-file.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/icons/word-file.svg rename to web/themes/contrib/civictheme/assets/icons/word-file.svg diff --git a/docroot/themes/contrib/civictheme/assets/images/demo1.jpg b/web/themes/contrib/civictheme/assets/images/demo1.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/images/demo1.jpg rename to web/themes/contrib/civictheme/assets/images/demo1.jpg diff --git a/docroot/themes/contrib/civictheme/assets/images/demo2.jpg b/web/themes/contrib/civictheme/assets/images/demo2.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/images/demo2.jpg rename to web/themes/contrib/civictheme/assets/images/demo2.jpg diff --git a/docroot/themes/contrib/civictheme/assets/images/demo3.jpg b/web/themes/contrib/civictheme/assets/images/demo3.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/images/demo3.jpg rename to web/themes/contrib/civictheme/assets/images/demo3.jpg diff --git a/docroot/themes/contrib/civictheme/assets/images/demo4.jpg b/web/themes/contrib/civictheme/assets/images/demo4.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/images/demo4.jpg rename to web/themes/contrib/civictheme/assets/images/demo4.jpg diff --git a/docroot/themes/contrib/civictheme/assets/images/demo5.jpg b/web/themes/contrib/civictheme/assets/images/demo5.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/images/demo5.jpg rename to web/themes/contrib/civictheme/assets/images/demo5.jpg diff --git a/docroot/themes/contrib/civictheme/assets/images/demo6.jpg b/web/themes/contrib/civictheme/assets/images/demo6.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/images/demo6.jpg rename to web/themes/contrib/civictheme/assets/images/demo6.jpg diff --git a/docroot/themes/contrib/civictheme/assets/images/facebook.svg b/web/themes/contrib/civictheme/assets/images/facebook.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/images/facebook.svg rename to web/themes/contrib/civictheme/assets/images/facebook.svg diff --git a/docroot/themes/contrib/civictheme/assets/images/linkedin.svg b/web/themes/contrib/civictheme/assets/images/linkedin.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/images/linkedin.svg rename to web/themes/contrib/civictheme/assets/images/linkedin.svg diff --git a/docroot/themes/contrib/civictheme/assets/images/twitter.svg b/web/themes/contrib/civictheme/assets/images/twitter.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/images/twitter.svg rename to web/themes/contrib/civictheme/assets/images/twitter.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/fonts/.gitkeep b/web/themes/contrib/civictheme/assets/js/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/fonts/.gitkeep rename to web/themes/contrib/civictheme/assets/js/.gitkeep diff --git a/docroot/themes/contrib/civictheme/assets/logos/logo_primary_dark_desktop.svg b/web/themes/contrib/civictheme/assets/logos/logo_primary_dark_desktop.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/logos/logo_primary_dark_desktop.svg rename to web/themes/contrib/civictheme/assets/logos/logo_primary_dark_desktop.svg diff --git a/docroot/themes/contrib/civictheme/assets/logos/logo_primary_dark_mobile.svg b/web/themes/contrib/civictheme/assets/logos/logo_primary_dark_mobile.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/logos/logo_primary_dark_mobile.svg rename to web/themes/contrib/civictheme/assets/logos/logo_primary_dark_mobile.svg diff --git a/docroot/themes/contrib/civictheme/assets/logos/logo_primary_light_desktop.svg b/web/themes/contrib/civictheme/assets/logos/logo_primary_light_desktop.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/logos/logo_primary_light_desktop.svg rename to web/themes/contrib/civictheme/assets/logos/logo_primary_light_desktop.svg diff --git a/docroot/themes/contrib/civictheme/assets/logos/logo_primary_light_mobile.svg b/web/themes/contrib/civictheme/assets/logos/logo_primary_light_mobile.svg similarity index 100% rename from docroot/themes/contrib/civictheme/assets/logos/logo_primary_light_mobile.svg rename to web/themes/contrib/civictheme/assets/logos/logo_primary_light_mobile.svg diff --git a/docroot/themes/contrib/civictheme/assets/logos/logo_secondary_dark_desktop.png b/web/themes/contrib/civictheme/assets/logos/logo_secondary_dark_desktop.png similarity index 100% rename from docroot/themes/contrib/civictheme/assets/logos/logo_secondary_dark_desktop.png rename to web/themes/contrib/civictheme/assets/logos/logo_secondary_dark_desktop.png diff --git a/docroot/themes/contrib/civictheme/assets/logos/logo_secondary_dark_mobile.png b/web/themes/contrib/civictheme/assets/logos/logo_secondary_dark_mobile.png similarity index 100% rename from docroot/themes/contrib/civictheme/assets/logos/logo_secondary_dark_mobile.png rename to web/themes/contrib/civictheme/assets/logos/logo_secondary_dark_mobile.png diff --git a/docroot/themes/contrib/civictheme/assets/logos/logo_secondary_light_desktop.png b/web/themes/contrib/civictheme/assets/logos/logo_secondary_light_desktop.png similarity index 100% rename from docroot/themes/contrib/civictheme/assets/logos/logo_secondary_light_desktop.png rename to web/themes/contrib/civictheme/assets/logos/logo_secondary_light_desktop.png diff --git a/docroot/themes/contrib/civictheme/assets/logos/logo_secondary_light_mobile.png b/web/themes/contrib/civictheme/assets/logos/logo_secondary_light_mobile.png similarity index 100% rename from docroot/themes/contrib/civictheme/assets/logos/logo_secondary_light_mobile.png rename to web/themes/contrib/civictheme/assets/logos/logo_secondary_light_mobile.png diff --git a/docroot/themes/contrib/civictheme/assets/sass/header/_header.scss b/web/themes/contrib/civictheme/assets/sass/header/_header.scss similarity index 100% rename from docroot/themes/contrib/civictheme/assets/sass/header/_header.scss rename to web/themes/contrib/civictheme/assets/sass/header/_header.scss diff --git a/docroot/themes/contrib/civictheme/assets/sass/theme.scss b/web/themes/contrib/civictheme/assets/sass/theme.scss similarity index 100% rename from docroot/themes/contrib/civictheme/assets/sass/theme.scss rename to web/themes/contrib/civictheme/assets/sass/theme.scss diff --git a/docroot/themes/contrib/civictheme/assets/videos/demo.avi b/web/themes/contrib/civictheme/assets/videos/demo.avi similarity index 100% rename from docroot/themes/contrib/civictheme/assets/videos/demo.avi rename to web/themes/contrib/civictheme/assets/videos/demo.avi diff --git a/docroot/themes/contrib/civictheme/assets/videos/demo.mp4 b/web/themes/contrib/civictheme/assets/videos/demo.mp4 similarity index 100% rename from docroot/themes/contrib/civictheme/assets/videos/demo.mp4 rename to web/themes/contrib/civictheme/assets/videos/demo.mp4 diff --git a/docroot/themes/contrib/civictheme/assets/videos/demo.webm b/web/themes/contrib/civictheme/assets/videos/demo.webm similarity index 100% rename from docroot/themes/contrib/civictheme/assets/videos/demo.webm rename to web/themes/contrib/civictheme/assets/videos/demo.webm diff --git a/docroot/themes/contrib/civictheme/assets/videos/demo_poster.png b/web/themes/contrib/civictheme/assets/videos/demo_poster.png similarity index 100% rename from docroot/themes/contrib/civictheme/assets/videos/demo_poster.png rename to web/themes/contrib/civictheme/assets/videos/demo_poster.png diff --git a/docroot/themes/contrib/civictheme/civictheme.api.php b/web/themes/contrib/civictheme/civictheme.api.php similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme.api.php rename to web/themes/contrib/civictheme/civictheme.api.php diff --git a/docroot/themes/contrib/civictheme/civictheme.breakpoints.yml b/web/themes/contrib/civictheme/civictheme.breakpoints.yml similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme.breakpoints.yml rename to web/themes/contrib/civictheme/civictheme.breakpoints.yml diff --git a/docroot/themes/contrib/civictheme/civictheme.info.yml b/web/themes/contrib/civictheme/civictheme.info.yml similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme.info.yml rename to web/themes/contrib/civictheme/civictheme.info.yml diff --git a/docroot/themes/contrib/civictheme/civictheme.layouts.yml b/web/themes/contrib/civictheme/civictheme.layouts.yml similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme.layouts.yml rename to web/themes/contrib/civictheme/civictheme.layouts.yml diff --git a/docroot/themes/contrib/civictheme/civictheme.libraries.yml b/web/themes/contrib/civictheme/civictheme.libraries.yml similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme.libraries.yml rename to web/themes/contrib/civictheme/civictheme.libraries.yml diff --git a/docroot/themes/contrib/civictheme/civictheme.post_update.php b/web/themes/contrib/civictheme/civictheme.post_update.php similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme.post_update.php rename to web/themes/contrib/civictheme/civictheme.post_update.php diff --git a/docroot/themes/contrib/civictheme/civictheme.theme b/web/themes/contrib/civictheme/civictheme.theme similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme.theme rename to web/themes/contrib/civictheme/civictheme.theme diff --git a/docroot/themes/contrib/civictheme/civictheme_create_subtheme.php b/web/themes/contrib/civictheme/civictheme_create_subtheme.php similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_create_subtheme.php rename to web/themes/contrib/civictheme/civictheme_create_subtheme.php diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.eslintignore b/web/themes/contrib/civictheme/civictheme_library/.eslintignore similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.eslintignore rename to web/themes/contrib/civictheme/civictheme_library/.eslintignore diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.eslintrc.yml b/web/themes/contrib/civictheme/civictheme_library/.eslintrc.yml similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.eslintrc.yml rename to web/themes/contrib/civictheme/civictheme_library/.eslintrc.yml diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.gitattributes b/web/themes/contrib/civictheme/civictheme_library/.gitattributes similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.gitattributes rename to web/themes/contrib/civictheme/civictheme_library/.gitattributes diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.gitignore b/web/themes/contrib/civictheme/civictheme_library/.gitignore similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.gitignore rename to web/themes/contrib/civictheme/civictheme_library/.gitignore diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.gitignore.release b/web/themes/contrib/civictheme/civictheme_library/.gitignore.release similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.gitignore.release rename to web/themes/contrib/civictheme/civictheme_library/.gitignore.release diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.nvmrc b/web/themes/contrib/civictheme/civictheme_library/.nvmrc similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.nvmrc rename to web/themes/contrib/civictheme/civictheme_library/.nvmrc diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/addon-config.js b/web/themes/contrib/civictheme/civictheme_library/.storybook/addon-config.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/addon-config.js rename to web/themes/contrib/civictheme/civictheme_library/.storybook/addon-config.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/css.stories.js b/web/themes/contrib/civictheme/civictheme_library/.storybook/css.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/css.stories.js rename to web/themes/contrib/civictheme/civictheme_library/.storybook/css.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/importer.scss_variables.js b/web/themes/contrib/civictheme/civictheme_library/.storybook/importer.scss_variables.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/importer.scss_variables.js rename to web/themes/contrib/civictheme/civictheme_library/.storybook/importer.scss_variables.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/main.js b/web/themes/contrib/civictheme/civictheme_library/.storybook/main.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/main.js rename to web/themes/contrib/civictheme/civictheme_library/.storybook/main.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/manager-head.html b/web/themes/contrib/civictheme/civictheme_library/.storybook/manager-head.html similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/manager-head.html rename to web/themes/contrib/civictheme/civictheme_library/.storybook/manager-head.html diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/manager.js b/web/themes/contrib/civictheme/civictheme_library/.storybook/manager.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/manager.js rename to web/themes/contrib/civictheme/civictheme_library/.storybook/manager.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/preview.js b/web/themes/contrib/civictheme/civictheme_library/.storybook/preview.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/preview.js rename to web/themes/contrib/civictheme/civictheme_library/.storybook/preview.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts1.json b/web/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts1.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts1.json rename to web/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts1.json diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts2.json b/web/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts2.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts2.json rename to web/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts2.json diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts3.json b/web/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts3.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts3.json rename to web/themes/contrib/civictheme/civictheme_library/.storybook/static/api/alerts3.json diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.storybook/theme.js b/web/themes/contrib/civictheme/civictheme_library/.storybook/theme.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.storybook/theme.js rename to web/themes/contrib/civictheme/civictheme_library/.storybook/theme.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.stylelintignore b/web/themes/contrib/civictheme/civictheme_library/.stylelintignore similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.stylelintignore rename to web/themes/contrib/civictheme/civictheme_library/.stylelintignore diff --git a/docroot/themes/contrib/civictheme/civictheme_library/.stylelintrc.json b/web/themes/contrib/civictheme/civictheme_library/.stylelintrc.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/.stylelintrc.json rename to web/themes/contrib/civictheme/civictheme_library/.stylelintrc.json diff --git a/docroot/themes/contrib/civictheme/civictheme_library/README.md b/web/themes/contrib/civictheme/civictheme_library/README.md similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/README.md rename to web/themes/contrib/civictheme/civictheme_library/README.md diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_1.png b/web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_1.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_1.png rename to web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_1.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_2.png b/web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_2.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_2.png rename to web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_2.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_3.png b/web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_3.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_3.png rename to web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_3.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_4.png b/web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_4.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_4.png rename to web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_4.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_5.png b/web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_5.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_5.png rename to web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_5.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_6.png b/web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_6.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_6.png rename to web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_6.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_7.png b/web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_7.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_7.png rename to web/themes/contrib/civictheme/civictheme_library/assets/backgrounds/civictheme_background_7.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/favicon.ico b/web/themes/contrib/civictheme/civictheme_library/assets/favicon.ico similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/favicon.ico rename to web/themes/contrib/civictheme/civictheme_library/assets/favicon.ico diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/04-templates/event/.gitkeep b/web/themes/contrib/civictheme/civictheme_library/assets/fonts/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/04-templates/event/.gitkeep rename to web/themes/contrib/civictheme/civictheme_library/assets/fonts/.gitkeep diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/account.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/account.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/account.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/account.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/approve.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/approve.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/approve.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/approve.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/bars.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/bars.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/bars.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/bars.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/bullet.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/bullet.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/bullet.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/bullet.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/calendar-1.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/calendar-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/calendar-1.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/calendar-1.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/calendar-2.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/calendar-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/calendar-2.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/calendar-2.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/call.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/call.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/call.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/call.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/cancel.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/cancel.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/cancel.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/cancel.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/checked.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/checked.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/checked.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/checked.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/close-outline.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/close-outline.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/close-outline.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/close-outline.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/close.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/close.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/close.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/close.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-1.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-1.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-1.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-2.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-2.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-2.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-large.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-large.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-large.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/down-arrow-large.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/download-file.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/download-file.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/download-file.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/download-file.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/download.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/download.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/download.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/download.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-1.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-1.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-1.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-2.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-2.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-2.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-3.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-3.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-3.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/exclamation-mark-3.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/eye.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/eye.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/eye.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/eye.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/facebook.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/facebook.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/facebook.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/facebook.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/help.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/help.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/help.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/help.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/image.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/image.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/image.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/image.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/information-mark.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/information-mark.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/information-mark.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/information-mark.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/left-arrow-outline.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/left-arrow-outline.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/left-arrow-outline.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/left-arrow-outline.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/left-arrow.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/left-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/left-arrow.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/left-arrow.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/linkedin.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/linkedin.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/linkedin.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/linkedin.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/magnifier.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/magnifier.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/magnifier.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/magnifier.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/map.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/map.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/map.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/map.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/megaphone.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/megaphone.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/megaphone.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/megaphone.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/mortarboard.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/mortarboard.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/mortarboard.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/mortarboard.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/newspaper.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/newspaper.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/newspaper.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/newspaper.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/pdf-file.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/pdf-file.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/pdf-file.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/pdf-file.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/progress.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/progress.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/progress.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/progress.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/right-arrow-1.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/right-arrow-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/right-arrow-1.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/right-arrow-1.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/right-arrow-2.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/right-arrow-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/right-arrow-2.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/right-arrow-2.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/select-box.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/select-box.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/select-box.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/select-box.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/share.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/share.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/share.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/share.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/square.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/square.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/square.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/square.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/to-do.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/to-do.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/to-do.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/to-do.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/twitter.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/twitter.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/twitter.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/twitter.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/up-arrow-large.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/up-arrow-large.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/up-arrow-large.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/up-arrow-large.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/up-arrow.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/up-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/up-arrow.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/up-arrow.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/upper-arrow.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/upper-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/upper-arrow.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/upper-arrow.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/upper-right-arrow.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/upper-right-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/upper-right-arrow.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/upper-right-arrow.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/watch.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/watch.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/watch.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/watch.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/icons/word-file.svg b/web/themes/contrib/civictheme/civictheme_library/assets/icons/word-file.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/icons/word-file.svg rename to web/themes/contrib/civictheme/civictheme_library/assets/icons/word-file.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo1.jpg b/web/themes/contrib/civictheme/civictheme_library/assets/images/demo1.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo1.jpg rename to web/themes/contrib/civictheme/civictheme_library/assets/images/demo1.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo2.jpg b/web/themes/contrib/civictheme/civictheme_library/assets/images/demo2.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo2.jpg rename to web/themes/contrib/civictheme/civictheme_library/assets/images/demo2.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo3.jpg b/web/themes/contrib/civictheme/civictheme_library/assets/images/demo3.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo3.jpg rename to web/themes/contrib/civictheme/civictheme_library/assets/images/demo3.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo4.jpg b/web/themes/contrib/civictheme/civictheme_library/assets/images/demo4.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo4.jpg rename to web/themes/contrib/civictheme/civictheme_library/assets/images/demo4.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo5.jpg b/web/themes/contrib/civictheme/civictheme_library/assets/images/demo5.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo5.jpg rename to web/themes/contrib/civictheme/civictheme_library/assets/images/demo5.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo6.jpg b/web/themes/contrib/civictheme/civictheme_library/assets/images/demo6.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/images/demo6.jpg rename to web/themes/contrib/civictheme/civictheme_library/assets/images/demo6.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_dark_desktop.png b/web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_dark_desktop.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_dark_desktop.png rename to web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_dark_desktop.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_dark_mobile.png b/web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_dark_mobile.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_dark_mobile.png rename to web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_dark_mobile.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_light_desktop.png b/web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_light_desktop.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_light_desktop.png rename to web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_light_desktop.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_light_mobile.png b/web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_light_mobile.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_light_mobile.png rename to web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_primary_light_mobile.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_dark_desktop.png b/web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_dark_desktop.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_dark_desktop.png rename to web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_dark_desktop.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_dark_mobile.png b/web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_dark_mobile.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_dark_mobile.png rename to web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_dark_mobile.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_light_desktop.png b/web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_light_desktop.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_light_desktop.png rename to web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_light_desktop.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_light_mobile.png b/web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_light_mobile.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_light_mobile.png rename to web/themes/contrib/civictheme/civictheme_library/assets/logos/logo_secondary_light_mobile.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/videos/demo.avi b/web/themes/contrib/civictheme/civictheme_library/assets/videos/demo.avi similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/videos/demo.avi rename to web/themes/contrib/civictheme/civictheme_library/assets/videos/demo.avi diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/videos/demo.mp4 b/web/themes/contrib/civictheme/civictheme_library/assets/videos/demo.mp4 similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/videos/demo.mp4 rename to web/themes/contrib/civictheme/civictheme_library/assets/videos/demo.mp4 diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/videos/demo.webm b/web/themes/contrib/civictheme/civictheme_library/assets/videos/demo.webm similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/videos/demo.webm rename to web/themes/contrib/civictheme/civictheme_library/assets/videos/demo.webm diff --git a/docroot/themes/contrib/civictheme/civictheme_library/assets/videos/demo_poster.png b/web/themes/contrib/civictheme/civictheme_library/assets/videos/demo_poster.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/assets/videos/demo_poster.png rename to web/themes/contrib/civictheme/civictheme_library/assets/videos/demo_poster.png diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/_variables.base.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/_variables.base.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/_variables.base.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/_variables.base.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/_variables.components.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/_variables.components.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/_variables.components.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/_variables.components.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.utils.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.utils.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.utils.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/background/background.utils.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/base.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/base.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/base.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/base.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/base.utils.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/base.utils.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/base.utils.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/base.utils.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.stories.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.stories.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.stories.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/collapsible/collapsible.stories.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/colors/colors.stories.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/debug/_index.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/debug/_index.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/debug/_index.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/debug/_index.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/elevation/elevation.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/elevation/elevation.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/elevation/elevation.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/elevation/elevation.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/elevation/elevation.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/elevation/elevation.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/elevation/elevation.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/elevation/elevation.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/flyout/flyout.stories.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/_index.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/_index.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/_index.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/_index.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/fonts.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/fonts.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/fonts.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/fonts.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/fonts.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/fonts.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/fonts.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/fonts/fonts.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/grid/_index.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/grid/_index.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/grid/_index.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/grid/_index.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/grid/grid.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/grid/grid.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/grid/grid.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/grid/grid.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/grid/grid.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/grid/grid.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/grid/grid.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/grid/grid.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.utils.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.utils.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.utils.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/icon/icon.utils.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/item-grid/item-grid.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/item-list/item-list.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/layout/content-layout--single-column-contained.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/layout/content-layout--single-column-contained.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/layout/content-layout--single-column-contained.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/layout/content-layout--single-column-contained.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/layout/content-layout--single-column.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/layout/content-layout--single-column.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/layout/content-layout--single-column.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/layout/content-layout--single-column.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/layout/layout.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.utils.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.utils.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.utils.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/menu/menu.utils.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_breakpoint.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_breakpoint.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_breakpoint.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_breakpoint.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_color.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_color.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_color.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_color.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_component.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_component.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_component.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_component.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_content.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_content.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_content.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_content.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_debug.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_debug.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_debug.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_debug.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_deprecations.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_deprecations.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_deprecations.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_deprecations.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_disabled.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_disabled.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_disabled.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_disabled.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_elevation.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_elevation.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_elevation.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_elevation.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_font.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_font.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_font.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_font.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_form.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_form.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_form.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_form.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_generator.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_generator.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_generator.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_generator.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_grid.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_grid.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_grid.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_grid.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_highlight.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_highlight.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_highlight.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_highlight.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_icon.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_icon.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_icon.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_icon.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_image.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_image.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_image.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_image.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_index.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_index.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_index.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_index.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_link.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_link.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_link.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_link.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_map.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_map.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_map.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_map.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_message.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_message.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_message.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_message.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_outline.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_outline.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_outline.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_outline.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_particle.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_particle.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_particle.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_particle.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_print.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_print.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_print.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_print.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_rem.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_rem.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_rem.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_rem.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_reset.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_reset.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_reset.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_reset.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_spacing.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_spacing.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_spacing.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_spacing.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_string.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_string.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_string.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_string.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_table.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_table.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_table.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_table.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_typography.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_typography.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_typography.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_typography.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_visibility.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_visibility.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_visibility.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/mixins/_visibility.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/reset/reset.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/reset/reset.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/reset/reset.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/reset/reset.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.stories.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.stories.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.stories.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/responsive/responsive.stories.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/scrollspy/scrollspy.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/spacing/spacing.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/time/time.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/time/time.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/time/time.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/time/time.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/time/time.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/time/time.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/time/time.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/time/time.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/typography/_index.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/typography/_index.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/typography/_index.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/typography/_index.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/typography/typography.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/00-base/typography/typography.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/typography/typography.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/typography/typography.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/typography/typography.stories.twig b/web/themes/contrib/civictheme/civictheme_library/components/00-base/typography/typography.stories.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/typography/typography.stories.twig rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/typography/typography.stories.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/variables.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/variables.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/variables.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/variables.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/00-base/visibility/_index.scss b/web/themes/contrib/civictheme/civictheme_library/components/00-base/visibility/_index.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/00-base/visibility/_index.scss rename to web/themes/contrib/civictheme/civictheme_library/components/00-base/visibility/_index.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/button/button.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/checkbox/checkbox.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.event.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.event.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.event.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.event.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/chip/chip.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/content-link/content-link.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-description/field-description.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/field-message/field-message.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/fieldset/fieldset.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/heading/heading.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/iframe/iframe.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/image/image.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/image/image.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/image/image.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/image/image.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/image/image.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/image/image.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/image/image.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/image/image.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/input/input.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/input/input.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/input/input.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/input/input.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/input/input.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/input/input.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/input/input.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/input/input.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/label/label.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/link/link.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/paragraph/paragraph.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/popover/popover.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/radio/radio.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/select/select.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/table/table.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/tag/tag.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textarea/textarea.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.scss b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.scss rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/textfield/textfield.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/video/video.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/video/video.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/video/video.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/video/video.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/video/video.twig b/web/themes/contrib/civictheme/civictheme_library/components/01-atoms/video/video.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/01-atoms/video/video.twig rename to web/themes/contrib/civictheme/civictheme_library/components/01-atoms/video/video.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/accordion/accordion.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/attachment/attachment.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/basic-content/basic-content.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/breadcrumb/breadcrumb.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/callout/callout.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/editor-content/editor-content.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/editor-content/editor-content.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/editor-content/editor-content.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/editor-content/editor-content.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/editor-content/editor-content.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/editor-content/editor-content.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/editor-content/editor-content.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/editor-content/editor-content.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/event-card/event-card.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/figure/figure.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/form-element/form-element.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/group-filter/group-filter.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.utils.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.utils.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.utils.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/logo/logo.utils.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/map/map.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/navigation-card/navigation-card.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/next-step/next-step.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/pagination/pagination.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/promo-card/promo-card.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/publication-card/publication-card.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/quote/quote.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/search/search.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/service-card/service-card.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/single-filter/single-filter.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/snippet/snippet.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/subject-card/subject-card.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/table-of-contents/table-of-contents.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tabs/tabs.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tag-list/tag-list.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tag-list/tag-list.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tag-list/tag-list.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tag-list/tag-list.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tag-list/tag-list.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tag-list/tag-list.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tag-list/tag-list.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tag-list/tag-list.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/tooltip/tooltip.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.scss b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.scss rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.twig b/web/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.twig rename to web/themes/contrib/civictheme/civictheme_library/components/02-molecules/video-player/video-player.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/alert/alert.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/back-to-top/back-to-top.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.stories.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/banner/banner.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/campaign/campaign.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.stories.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.stories.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.stories.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.stories.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/footer/footer.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.stories.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.stories.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.stories.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.stories.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/header/header.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/list/list.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/message/message.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-close.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-close.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-close.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-close.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-menu.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-menu.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-menu.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-menu.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-trigger.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-trigger.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-trigger.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation-trigger.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.stories.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/mobile-navigation/mobile-navigation.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/navigation/navigation.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/promo/promo.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/side-navigation/side-navigation.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/skip-link/skip-link.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slide.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slide.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slide.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slide.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.utils.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.utils.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.utils.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/slider/slider.utils.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/social-links/social-links.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.scss b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.scss rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.stories.js b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.stories.js rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.twig b/web/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.twig rename to web/themes/contrib/civictheme/civictheme_library/components/03-organisms/webform/webform.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/.gitkeep b/web/themes/contrib/civictheme/civictheme_library/components/04-templates/event/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/.gitkeep rename to web/themes/contrib/civictheme/civictheme_library/components/04-templates/event/.gitkeep diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/04-templates/page/page.twig b/web/themes/contrib/civictheme/civictheme_library/components/04-templates/page/page.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/04-templates/page/page.twig rename to web/themes/contrib/civictheme/civictheme_library/components/04-templates/page/page.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/style.css_variables.scss b/web/themes/contrib/civictheme/civictheme_library/components/style.css_variables.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/style.css_variables.scss rename to web/themes/contrib/civictheme/civictheme_library/components/style.css_variables.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/style.editor.scss b/web/themes/contrib/civictheme/civictheme_library/components/style.editor.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/style.editor.scss rename to web/themes/contrib/civictheme/civictheme_library/components/style.editor.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/style.scss b/web/themes/contrib/civictheme/civictheme_library/components/style.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/style.scss rename to web/themes/contrib/civictheme/civictheme_library/components/style.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/style.stories.scss b/web/themes/contrib/civictheme/civictheme_library/components/style.stories.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/style.stories.scss rename to web/themes/contrib/civictheme/civictheme_library/components/style.stories.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/variables.base.scss b/web/themes/contrib/civictheme/civictheme_library/components/variables.base.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/variables.base.scss rename to web/themes/contrib/civictheme/civictheme_library/components/variables.base.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/components/variables.components.scss b/web/themes/contrib/civictheme/civictheme_library/components/variables.components.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/components/variables.components.scss rename to web/themes/contrib/civictheme/civictheme_library/components/variables.components.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_library/package.json b/web/themes/contrib/civictheme/civictheme_library/package.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/package.json rename to web/themes/contrib/civictheme/civictheme_library/package.json diff --git a/docroot/themes/contrib/civictheme/civictheme_library/scripts/extract_css_colors_to_csv.php b/web/themes/contrib/civictheme/civictheme_library/scripts/extract_css_colors_to_csv.php similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/scripts/extract_css_colors_to_csv.php rename to web/themes/contrib/civictheme/civictheme_library/scripts/extract_css_colors_to_csv.php diff --git a/docroot/themes/contrib/civictheme/civictheme_library/webpack/assets.js b/web/themes/contrib/civictheme/civictheme_library/webpack/assets.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/webpack/assets.js rename to web/themes/contrib/civictheme/civictheme_library/webpack/assets.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/webpack/babel-plugin-script-wrapper.js b/web/themes/contrib/civictheme/civictheme_library/webpack/babel-plugin-script-wrapper.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/webpack/babel-plugin-script-wrapper.js rename to web/themes/contrib/civictheme/civictheme_library/webpack/babel-plugin-script-wrapper.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/webpack/css.js b/web/themes/contrib/civictheme/civictheme_library/webpack/css.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/webpack/css.js rename to web/themes/contrib/civictheme/civictheme_library/webpack/css.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/webpack/css_variables.js b/web/themes/contrib/civictheme/civictheme_library/webpack/css_variables.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/webpack/css_variables.js rename to web/themes/contrib/civictheme/civictheme_library/webpack/css_variables.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/webpack/info.js b/web/themes/contrib/civictheme/civictheme_library/webpack/info.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/webpack/info.js rename to web/themes/contrib/civictheme/civictheme_library/webpack/info.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/webpack/libraries.js b/web/themes/contrib/civictheme/civictheme_library/webpack/libraries.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/webpack/libraries.js rename to web/themes/contrib/civictheme/civictheme_library/webpack/libraries.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/webpack/webpack.common.js b/web/themes/contrib/civictheme/civictheme_library/webpack/webpack.common.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/webpack/webpack.common.js rename to web/themes/contrib/civictheme/civictheme_library/webpack/webpack.common.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/webpack/webpack.dev.js b/web/themes/contrib/civictheme/civictheme_library/webpack/webpack.dev.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/webpack/webpack.dev.js rename to web/themes/contrib/civictheme/civictheme_library/webpack/webpack.dev.js diff --git a/docroot/themes/contrib/civictheme/civictheme_library/webpack/webpack.prod.js b/web/themes/contrib/civictheme/civictheme_library/webpack/webpack.prod.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_library/webpack/webpack.prod.js rename to web/themes/contrib/civictheme/civictheme_library/webpack/webpack.prod.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.editorconfig b/web/themes/contrib/civictheme/civictheme_starter_kit/.editorconfig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.editorconfig rename to web/themes/contrib/civictheme/civictheme_starter_kit/.editorconfig diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.eslintignore b/web/themes/contrib/civictheme/civictheme_starter_kit/.eslintignore similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.eslintignore rename to web/themes/contrib/civictheme/civictheme_starter_kit/.eslintignore diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.eslintrc.yml b/web/themes/contrib/civictheme/civictheme_starter_kit/.eslintrc.yml similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.eslintrc.yml rename to web/themes/contrib/civictheme/civictheme_starter_kit/.eslintrc.yml diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.gitignore b/web/themes/contrib/civictheme/civictheme_starter_kit/.gitignore similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.gitignore rename to web/themes/contrib/civictheme/civictheme_starter_kit/.gitignore diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.nvmrc b/web/themes/contrib/civictheme/civictheme_starter_kit/.nvmrc similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.nvmrc rename to web/themes/contrib/civictheme/civictheme_starter_kit/.nvmrc diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/addon-config.js b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/addon-config.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/addon-config.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/addon-config.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/components_css.stories.js b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/components_css.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/components_css.stories.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/components_css.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/drupal_behaviors.js b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/drupal_behaviors.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/drupal_behaviors.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/drupal_behaviors.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/importer.scss_variables.js b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/importer.scss_variables.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/importer.scss_variables.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/importer.scss_variables.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/main.js b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/main.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/main.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/main.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/manager-head.html b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/manager-head.html similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/manager-head.html rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/manager-head.html diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/manager.js b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/manager.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/manager.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/manager.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/preview.js b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/preview.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/preview.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/preview.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/setupTwig.js b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/setupTwig.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/setupTwig.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/setupTwig.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts1.json b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts1.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts1.json rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts1.json diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts2.json b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts2.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts2.json rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts2.json diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts3.json b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts3.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts3.json rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/static/api/alerts3.json diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/theme.js b/web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/theme.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.storybook/theme.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/.storybook/theme.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/.stylelintrc.json b/web/themes/contrib/civictheme/civictheme_starter_kit/.stylelintrc.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/.stylelintrc.json rename to web/themes/contrib/civictheme/civictheme_starter_kit/.stylelintrc.json diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/README.md b/web/themes/contrib/civictheme/civictheme_starter_kit/README.md similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/README.md rename to web/themes/contrib/civictheme/civictheme_starter_kit/README.md diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/backgrounds/civictheme_starter_kit_background_1.png b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/backgrounds/civictheme_starter_kit_background_1.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/backgrounds/civictheme_starter_kit_background_1.png rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/backgrounds/civictheme_starter_kit_background_1.png diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/backgrounds/civictheme_starter_kit_background_2.png b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/backgrounds/civictheme_starter_kit_background_2.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/backgrounds/civictheme_starter_kit_background_2.png rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/backgrounds/civictheme_starter_kit_background_2.png diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/favicon.ico b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/favicon.ico similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/favicon.ico rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/favicon.ico diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/js/.gitkeep b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/js/.gitkeep rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/.gitkeep diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.ttf b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.ttf similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.ttf rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.ttf diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.woff b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.woff similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.woff rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.woff diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.woff2 b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.woff2 similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.woff2 rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/DancingScript/DancingScript-Regular.woff2 diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.eot b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.eot similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.eot rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.eot diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.ttf b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.ttf similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.ttf rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.ttf diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.woff b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.woff similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.woff rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Black.woff diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.eot b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.eot similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.eot rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.eot diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.ttf b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.ttf similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.ttf rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.ttf diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.woff b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.woff similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.woff rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Bold.woff diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.eot b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.eot similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.eot rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.eot diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.ttf b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.ttf similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.ttf rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.ttf diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.woff b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.woff similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.woff rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-BoldItalic.woff diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.eot b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.eot similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.eot rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.eot diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.ttf b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.ttf similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.ttf rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.ttf diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.woff b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.woff similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.woff rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Italic.woff diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.eot b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.eot similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.eot rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.eot diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.ttf b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.ttf similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.ttf rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.ttf diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.woff b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.woff similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.woff rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Medium.woff diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.eot b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.eot similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.eot rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.eot diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.ttf b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.ttf similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.ttf rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.ttf diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.woff b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.woff similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.woff rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-MediumItalic.woff diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.eot b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.eot similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.eot rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.eot diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.ttf b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.ttf similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.ttf rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.ttf diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.woff b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.woff similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.woff rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Regular.woff diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.eot b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.eot similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.eot rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.eot diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.ttf b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.ttf similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.ttf rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.ttf diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.woff b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.woff similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.woff rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/fonts/roboto/Roboto-Thin.woff diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/account.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/account.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/account.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/account.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/approve.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/approve.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/approve.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/approve.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/bars.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/bars.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/bars.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/bars.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/bullet.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/bullet.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/bullet.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/bullet.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/calendar-1.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/calendar-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/calendar-1.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/calendar-1.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/calendar-2.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/calendar-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/calendar-2.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/calendar-2.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/call.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/call.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/call.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/call.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/cancel.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/cancel.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/cancel.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/cancel.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/checked.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/checked.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/checked.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/checked.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/close-outline.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/close-outline.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/close-outline.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/close-outline.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/close.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/close.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/close.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/close.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-1.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-1.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-1.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-2.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-2.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-2.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-large.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-large.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-large.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/down-arrow-large.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/download-file.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/download-file.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/download-file.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/download-file.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/download.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/download.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/download.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/download.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-1.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-1.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-1.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-2.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-2.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-2.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-3.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-3.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-3.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/exclamation-mark-3.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/eye.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/eye.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/eye.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/eye.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/facebook.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/facebook.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/facebook.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/facebook.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/help.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/help.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/help.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/help.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/image.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/image.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/image.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/image.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/information-mark.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/information-mark.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/information-mark.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/information-mark.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/left-arrow-outline.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/left-arrow-outline.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/left-arrow-outline.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/left-arrow-outline.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/left-arrow.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/left-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/left-arrow.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/left-arrow.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/linkedin.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/linkedin.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/linkedin.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/linkedin.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/magnifier.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/magnifier.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/magnifier.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/magnifier.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/map.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/map.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/map.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/map.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/megaphone.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/megaphone.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/megaphone.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/megaphone.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/mortarboard.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/mortarboard.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/mortarboard.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/mortarboard.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/newspaper.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/newspaper.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/newspaper.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/newspaper.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/pdf-file.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/pdf-file.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/pdf-file.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/pdf-file.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/progress.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/progress.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/progress.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/progress.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/right-arrow-1.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/right-arrow-1.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/right-arrow-1.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/right-arrow-1.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/right-arrow-2.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/right-arrow-2.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/right-arrow-2.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/right-arrow-2.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/select-box.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/select-box.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/select-box.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/select-box.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/share.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/share.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/share.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/share.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/square.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/square.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/square.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/square.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/to-do.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/to-do.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/to-do.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/to-do.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/twitter.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/twitter.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/twitter.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/twitter.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/up-arrow-large.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/up-arrow-large.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/up-arrow-large.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/up-arrow-large.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/up-arrow.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/up-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/up-arrow.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/up-arrow.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/upper-arrow.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/upper-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/upper-arrow.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/upper-arrow.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/upper-right-arrow.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/upper-right-arrow.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/upper-right-arrow.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/upper-right-arrow.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/watch.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/watch.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/watch.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/watch.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/word-file.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/word-file.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/word-file.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/icons/word-file.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo1.jpg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo1.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo1.jpg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo1.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo2.jpg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo2.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo2.jpg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo2.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo3.jpg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo3.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo3.jpg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo3.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo4.jpg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo4.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo4.jpg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo4.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo5.jpg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo5.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo5.jpg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo5.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo6.jpg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo6.jpg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo6.jpg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/demo6.jpg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/facebook.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/facebook.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/facebook.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/facebook.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/linkedin.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/linkedin.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/linkedin.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/linkedin.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/twitter.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/twitter.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/images/twitter.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/images/twitter.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/00-base/.gitkeep b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/js/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/00-base/.gitkeep rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/js/.gitkeep diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_dark_desktop.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_dark_desktop.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_dark_desktop.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_dark_desktop.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_dark_mobile.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_dark_mobile.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_dark_mobile.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_dark_mobile.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_light_desktop.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_light_desktop.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_light_desktop.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_light_desktop.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_light_mobile.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_light_mobile.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_light_mobile.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_primary_light_mobile.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_dark_desktop.png b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_dark_desktop.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_dark_desktop.png rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_dark_desktop.png diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_dark_mobile.png b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_dark_mobile.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_dark_mobile.png rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_dark_mobile.png diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_light_desktop.png b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_light_desktop.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_light_desktop.png rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_light_desktop.png diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_light_mobile.png b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_light_mobile.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_light_mobile.png rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/logos/logo_secondary_light_mobile.png diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/block/_local-tasks.scss b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/block/_local-tasks.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/block/_local-tasks.scss rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/block/_local-tasks.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/editor/_index.scss b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/editor/_index.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/editor/_index.scss rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/editor/_index.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/theme.scss b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/theme.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/theme.scss rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/sass/theme.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.avi b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.avi similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.avi rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.avi diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.mp4 b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.mp4 similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.mp4 rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.mp4 diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.webm b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.webm similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.webm rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo.webm diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo_poster.png b/web/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo_poster.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo_poster.png rename to web/themes/contrib/civictheme/civictheme_starter_kit/assets/videos/demo_poster.png diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.info.yml b/web/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.info.yml similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.info.yml rename to web/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.info.yml diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.libraries.yml b/web/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.libraries.yml similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.libraries.yml rename to web/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.libraries.yml diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.theme b/web/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.theme similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.theme rename to web/themes/contrib/civictheme/civictheme_starter_kit/civictheme_starter_kit.theme diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/.gitkeep b/web/themes/contrib/civictheme/civictheme_starter_kit/components/00-base/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/.gitkeep rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/00-base/.gitkeep diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/.gitkeep b/web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/.gitkeep rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/.gitkeep diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.js b/web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.scss b/web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.scss rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.stories.js b/web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.stories.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.twig b/web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.twig rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/01-atoms/demo-button/demo-button.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms/.gitkeep b/web/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms/.gitkeep rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/.gitkeep diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/navigation-card/navigation-card.stories.js b/web/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/navigation-card/navigation-card.stories.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/navigation-card/navigation-card.stories.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/navigation-card/navigation-card.stories.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/navigation-card/navigation-card.twig b/web/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/navigation-card/navigation-card.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/navigation-card/navigation-card.twig rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/02-molecules/navigation-card/navigation-card.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/04-templates/.gitkeep b/web/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/04-templates/.gitkeep rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms/.gitkeep diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms/header/header.twig b/web/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms/header/header.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms/header/header.twig rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/03-organisms/header/header.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/templates/.gitkeep b/web/themes/contrib/civictheme/civictheme_starter_kit/components/04-templates/.gitkeep similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/templates/.gitkeep rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/04-templates/.gitkeep diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/variables.base.scss b/web/themes/contrib/civictheme/civictheme_starter_kit/components/variables.base.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/variables.base.scss rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/variables.base.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/components/variables.components.scss b/web/themes/contrib/civictheme/civictheme_starter_kit/components/variables.components.scss similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/components/variables.components.scss rename to web/themes/contrib/civictheme/civictheme_starter_kit/components/variables.components.scss diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/composer.json b/web/themes/contrib/civictheme/civictheme_starter_kit/composer.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/composer.json rename to web/themes/contrib/civictheme/civictheme_starter_kit/composer.json diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/gulpfile.js b/web/themes/contrib/civictheme/civictheme_starter_kit/gulpfile.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/gulpfile.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/gulpfile.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/logo.svg b/web/themes/contrib/civictheme/civictheme_starter_kit/logo.svg similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/logo.svg rename to web/themes/contrib/civictheme/civictheme_starter_kit/logo.svg diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/package.json b/web/themes/contrib/civictheme/civictheme_starter_kit/package.json similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/package.json rename to web/themes/contrib/civictheme/civictheme_starter_kit/package.json diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/screenshot.png b/web/themes/contrib/civictheme/civictheme_starter_kit/screenshot.png similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/screenshot.png rename to web/themes/contrib/civictheme/civictheme_starter_kit/screenshot.png diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/scripts/add_phpcs_exclusions.php b/web/themes/contrib/civictheme/civictheme_starter_kit/scripts/add_phpcs_exclusions.php similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/scripts/add_phpcs_exclusions.php rename to web/themes/contrib/civictheme/civictheme_starter_kit/scripts/add_phpcs_exclusions.php diff --git a/web/themes/contrib/civictheme/civictheme_starter_kit/templates/.gitkeep b/web/themes/contrib/civictheme/civictheme_starter_kit/templates/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/templates/form/input--submit.html.twig b/web/themes/contrib/civictheme/civictheme_starter_kit/templates/form/input--submit.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/templates/form/input--submit.html.twig rename to web/themes/contrib/civictheme/civictheme_starter_kit/templates/form/input--submit.html.twig diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/assets.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/assets.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/assets.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/assets.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/babel-plugin-drupal-behavior-wrapper.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/babel-plugin-drupal-behavior-wrapper.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/babel-plugin-drupal-behavior-wrapper.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/babel-plugin-drupal-behavior-wrapper.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/components_css.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/components_css.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/components_css.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/components_css.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/css_variables.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/css_variables.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/css_variables.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/css_variables.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/editor_css.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/editor_css.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/editor_css.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/editor_css.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/libraries.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/libraries.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/libraries.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/libraries.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/theme_css.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/theme_css.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/theme_css.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/theme_css.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/theme_js.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/theme_js.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/theme_js.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/theme_js.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.common.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.common.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.common.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.common.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.dev.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.dev.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.dev.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.dev.js diff --git a/docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.prod.js b/web/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.prod.js similarity index 100% rename from docroot/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.prod.js rename to web/themes/contrib/civictheme/civictheme_starter_kit/webpack/webpack.prod.js diff --git a/docroot/themes/contrib/civictheme/components b/web/themes/contrib/civictheme/components similarity index 100% rename from docroot/themes/contrib/civictheme/components rename to web/themes/contrib/civictheme/components diff --git a/docroot/themes/contrib/civictheme/composer.json b/web/themes/contrib/civictheme/composer.json similarity index 100% rename from docroot/themes/contrib/civictheme/composer.json rename to web/themes/contrib/civictheme/composer.json diff --git a/docroot/themes/contrib/civictheme/config/install/block.block.civictheme_content.yml b/web/themes/contrib/civictheme/config/install/block.block.civictheme_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block.block.civictheme_content.yml rename to web/themes/contrib/civictheme/config/install/block.block.civictheme_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block.block.civictheme_footer_sitebranding.yml b/web/themes/contrib/civictheme/config/install/block.block.civictheme_footer_sitebranding.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block.block.civictheme_footer_sitebranding.yml rename to web/themes/contrib/civictheme/config/install/block.block.civictheme_footer_sitebranding.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block.block.civictheme_header_sitebranding.yml b/web/themes/contrib/civictheme/config/install/block.block.civictheme_header_sitebranding.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block.block.civictheme_header_sitebranding.yml rename to web/themes/contrib/civictheme/config/install/block.block.civictheme_header_sitebranding.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block.block.civictheme_header_sitebranding2.yml b/web/themes/contrib/civictheme/config/install/block.block.civictheme_header_sitebranding2.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block.block.civictheme_header_sitebranding2.yml rename to web/themes/contrib/civictheme/config/install/block.block.civictheme_header_sitebranding2.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block.block.civictheme_help.yml b/web/themes/contrib/civictheme/config/install/block.block.civictheme_help.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block.block.civictheme_help.yml rename to web/themes/contrib/civictheme/config/install/block.block.civictheme_help.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block.block.civictheme_messages.yml b/web/themes/contrib/civictheme/config/install/block.block.civictheme_messages.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block.block.civictheme_messages.yml rename to web/themes/contrib/civictheme/config/install/block.block.civictheme_messages.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block.block.civictheme_primaryadminactions.yml b/web/themes/contrib/civictheme/config/install/block.block.civictheme_primaryadminactions.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block.block.civictheme_primaryadminactions.yml rename to web/themes/contrib/civictheme/config/install/block.block.civictheme_primaryadminactions.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block.block.civictheme_tabs.yml b/web/themes/contrib/civictheme/config/install/block.block.civictheme_tabs.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block.block.civictheme_tabs.yml rename to web/themes/contrib/civictheme/config/install/block.block.civictheme_tabs.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block_content.type.civictheme_banner.yml b/web/themes/contrib/civictheme/config/install/block_content.type.civictheme_banner.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block_content.type.civictheme_banner.yml rename to web/themes/contrib/civictheme/config/install/block_content.type.civictheme_banner.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block_content.type.civictheme_component_block.yml b/web/themes/contrib/civictheme/config/install/block_content.type.civictheme_component_block.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block_content.type.civictheme_component_block.yml rename to web/themes/contrib/civictheme/config/install/block_content.type.civictheme_component_block.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block_content.type.civictheme_mobile_navigation.yml b/web/themes/contrib/civictheme/config/install/block_content.type.civictheme_mobile_navigation.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block_content.type.civictheme_mobile_navigation.yml rename to web/themes/contrib/civictheme/config/install/block_content.type.civictheme_mobile_navigation.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block_content.type.civictheme_search.yml b/web/themes/contrib/civictheme/config/install/block_content.type.civictheme_search.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block_content.type.civictheme_search.yml rename to web/themes/contrib/civictheme/config/install/block_content.type.civictheme_search.yml diff --git a/docroot/themes/contrib/civictheme/config/install/block_content.type.civictheme_social_links.yml b/web/themes/contrib/civictheme/config/install/block_content.type.civictheme_social_links.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/block_content.type.civictheme_social_links.yml rename to web/themes/contrib/civictheme/config/install/block_content.type.civictheme_social_links.yml diff --git a/docroot/themes/contrib/civictheme/config/install/civictheme.settings.yml b/web/themes/contrib/civictheme/config/install/civictheme.settings.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/civictheme.settings.yml rename to web/themes/contrib/civictheme/config/install/civictheme.settings.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_alert.promote.yml b/web/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_alert.promote.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_alert.promote.yml rename to web/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_alert.promote.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_event.promote.yml b/web/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_event.promote.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_event.promote.yml rename to web/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_event.promote.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_page.promote.yml b/web/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_page.promote.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_page.promote.yml rename to web/themes/contrib/civictheme/config/install/core.base_field_override.node.civictheme_page.promote.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.date_format.civictheme_short_date.yml b/web/themes/contrib/civictheme/config/install/core.date_format.civictheme_short_date.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.date_format.civictheme_short_date.yml rename to web/themes/contrib/civictheme/config/install/core.date_format.civictheme_short_date.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.date_format.civictheme_short_date_and_time.yml b/web/themes/contrib/civictheme/config/install/core.date_format.civictheme_short_date_and_time.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.date_format.civictheme_short_date_and_time.yml rename to web/themes/contrib/civictheme/config/install/core.date_format.civictheme_short_date_and_time.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_banner.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_banner.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_banner.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_banner.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_component_block.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_component_block.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_component_block.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_component_block.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_mobile_navigation.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_mobile_navigation.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_mobile_navigation.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_mobile_navigation.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_search.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_search.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_search.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_search.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_social_links.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_social_links.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_social_links.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.block_content.civictheme_social_links.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_audio.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_audio.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_audio.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_audio.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_audio.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_audio.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_audio.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_audio.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_document.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_document.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_document.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_document.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_document.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_document.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_document.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_document.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_icon.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_icon.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_icon.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_icon.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_icon.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_icon.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_icon.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_icon.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_image.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_image.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_image.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_image.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_image.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_image.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_image.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_image.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_remote_video.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_remote_video.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_remote_video.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_remote_video.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_remote_video.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_remote_video.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_remote_video.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_remote_video.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_video.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_video.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_video.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_video.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_video.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_video.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_video.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.media.civictheme_video.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_alert.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_alert.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_alert.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_alert.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_event.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_event.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_event.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_event.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_page.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_page.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_page.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.node.civictheme_page.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_accordion.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_accordion.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_accordion.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_accordion.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_accordion_panel.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_accordion_panel.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_accordion_panel.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_accordion_panel.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_attachment.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_attachment.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_attachment.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_attachment.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_automated_list.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_automated_list.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_automated_list.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_automated_list.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_callout.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_callout.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_callout.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_callout.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_campaign.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_campaign.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_campaign.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_campaign.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_content.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_content.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_content.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_content.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_event_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_event_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_event_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_event_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_event_card_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_event_card_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_event_card_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_event_card_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_iframe.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_iframe.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_iframe.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_iframe.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_manual_list.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_manual_list.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_manual_list.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_manual_list.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_map.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_map.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_map.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_map.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_navigation_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_navigation_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_navigation_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_navigation_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_navigation_card_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_navigation_card_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_navigation_card_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_navigation_card_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_next_step.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_next_step.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_next_step.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_next_step.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo_card_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo_card_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo_card_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_promo_card_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_publication_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_publication_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_publication_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_publication_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_quote.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_quote.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_quote.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_quote.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_service_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_service_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_service_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_service_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider_slide.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider_slide.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider_slide.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider_slide.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider_slide_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider_slide_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider_slide_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_slider_slide_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_snippet.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_snippet.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_snippet.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_snippet.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_snippet_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_snippet_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_snippet_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_snippet_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_social_icon.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_social_icon.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_social_icon.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_social_icon.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_subject_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_subject_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_subject_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_subject_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_subject_card_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_subject_card_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_subject_card_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_subject_card_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_webform.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_webform.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_webform.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.paragraph.civictheme_webform.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_form_display.taxonomy_term.civictheme_site_sections.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_form_display.taxonomy_term.civictheme_site_sections.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_form_display.taxonomy_term.civictheme_site_sections.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_form_display.taxonomy_term.civictheme_site_sections.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_banner.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_banner.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_banner.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_banner.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_component_block.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_component_block.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_component_block.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_component_block.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_mobile_navigation.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_mobile_navigation.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_mobile_navigation.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_mobile_navigation.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_search.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_search.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_search.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_search.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_social_links.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_social_links.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_social_links.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.block_content.civictheme_social_links.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_audio.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_audio.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_audio.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_audio.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_audio.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_audio.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_audio.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_audio.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_document.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_document.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_document.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_document.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_document.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_document.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_document.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_document.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_icon.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_icon.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_icon.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_icon.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_icon.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_icon.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_icon.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_icon.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.component.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.component.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.component.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.component.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.embedded.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.embedded.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.embedded.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.embedded.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_image.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.full.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.full.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.full.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.full.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_remote_video.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.full.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.full.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.full.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.full.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.media_library.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.media_library.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.media_library.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.media.civictheme_video.media_library.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_alert.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_alert.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_alert.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_alert.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_navigation_card.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_navigation_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_navigation_card.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_navigation_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_promo_card.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_promo_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_promo_card.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_promo_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_slider_slide.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_slider_slide.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_slider_slide.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.civictheme_slider_slide.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_event.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_navigation_card.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_navigation_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_navigation_card.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_navigation_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_promo_card.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_promo_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_promo_card.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_promo_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_slider_slide.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_slider_slide.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_slider_slide.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.civictheme_slider_slide.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.node.civictheme_page.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_accordion.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_accordion.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_accordion.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_accordion.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_accordion_panel.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_accordion_panel.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_accordion_panel.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_accordion_panel.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_attachment.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_attachment.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_attachment.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_attachment.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_automated_list.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_automated_list.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_automated_list.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_automated_list.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_callout.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_callout.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_callout.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_callout.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_campaign.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_campaign.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_campaign.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_campaign.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_content.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_content.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_content.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_content.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_event_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_event_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_event_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_event_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_event_card_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_event_card_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_event_card_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_event_card_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_iframe.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_iframe.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_iframe.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_iframe.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_manual_list.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_manual_list.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_manual_list.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_manual_list.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_map.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_map.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_map.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_map.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_navigation_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_navigation_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_navigation_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_navigation_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_navigation_card_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_navigation_card_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_navigation_card_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_navigation_card_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_next_step.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_next_step.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_next_step.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_next_step.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo_card_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo_card_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo_card_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_promo_card_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_publication_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_publication_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_publication_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_publication_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_quote.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_quote.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_quote.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_quote.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_service_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_service_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_service_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_service_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider_slide.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider_slide.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider_slide.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider_slide.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider_slide_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider_slide_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider_slide_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_slider_slide_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_snippet.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_snippet.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_snippet.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_snippet.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_snippet_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_snippet_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_snippet_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_snippet_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_social_icon.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_social_icon.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_social_icon.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_social_icon.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_subject_card.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_subject_card.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_subject_card.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_subject_card.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_subject_card_ref.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_subject_card_ref.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_subject_card_ref.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_subject_card_ref.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_webform.default.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_webform.default.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_webform.default.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_display.paragraph.civictheme_webform.default.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.media.component.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_mode.media.component.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.media.component.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_mode.media.component.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.media.embedded.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_mode.media.embedded.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.media.embedded.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_mode.media.embedded.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_navigation_card.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_navigation_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_navigation_card.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_navigation_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_promo_card.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_promo_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_promo_card.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_promo_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_slider_slide.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_slider_slide.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_slider_slide.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_slider_slide.yml diff --git a/docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_snippet.yml b/web/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_snippet.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_snippet.yml rename to web/themes/contrib/civictheme/config/install/core.entity_view_mode.node.civictheme_snippet.yml diff --git a/docroot/themes/contrib/civictheme/config/install/editor.editor.civictheme_rich_text.yml b/web/themes/contrib/civictheme/config/install/editor.editor.civictheme_rich_text.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/editor.editor.civictheme_rich_text.yml rename to web/themes/contrib/civictheme/config/install/editor.editor.civictheme_rich_text.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_background_image.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_background_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_background_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_background_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_banner_blend_mode.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_banner_blend_mode.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_banner_blend_mode.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_banner_blend_mode.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_banner_type.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_banner_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_banner_type.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_banner_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_featured_image.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_featured_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_featured_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_featured_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_banner.field_c_b_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_component_block.field_c_b_components.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_component_block.field_c_b_components.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_component_block.field_c_b_components.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_component_block.field_c_b_components.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_bottom.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_bottom.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_bottom.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_bottom.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_top.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_top.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_top.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_top.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_trigger_text.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_trigger_text.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_trigger_text.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_trigger_text.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_trigger_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_trigger_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_trigger_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_mobile_navigation.field_c_b_trigger_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_search.field_c_b_link.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_search.field_c_b_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_search.field_c_b_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_search.field_c_b_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_social_icons.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_social_icons.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_social_icons.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_social_icons.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_with_border.yml b/web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_with_border.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_with_border.yml rename to web/themes/contrib/civictheme/config/install/field.field.block_content.civictheme_social_links.field_c_b_with_border.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_audio.field_c_m_audio_file.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_audio.field_c_m_audio_file.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_audio.field_c_m_audio_file.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_audio.field_c_m_audio_file.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_document.field_c_m_document.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_document.field_c_m_document.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_document.field_c_m_document.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_document.field_c_m_document.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_icon.field_c_m_icon.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_icon.field_c_m_icon.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_icon.field_c_m_icon.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_icon.field_c_m_icon.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_image.field_c_m_caption.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_image.field_c_m_caption.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_image.field_c_m_caption.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_image.field_c_m_caption.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_image.field_c_m_image.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_image.field_c_m_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_image.field_c_m_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_image.field_c_m_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_oembed_video.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_oembed_video.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_oembed_video.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_oembed_video.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_transcript.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_transcript.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_transcript.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_transcript.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_transcript_link.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_transcript_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_transcript_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_remote_video.field_c_m_transcript_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_transcript.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_transcript.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_transcript.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_transcript.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_transcript_link.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_transcript_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_transcript_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_transcript_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_video_file.yml b/web/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_video_file.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_video_file.yml rename to web/themes/contrib/civictheme/config/install/field.field.media.civictheme_video.field_c_m_video_file.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_alert_page_visibility.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_alert_page_visibility.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_alert_page_visibility.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_alert_page_visibility.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_alert_type.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_alert_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_alert_type.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_alert_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_body.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_body.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_body.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_body.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_date_range.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_date_range.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_date_range.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_alert.field_c_n_date_range.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_attachments.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_attachments.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_attachments.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_attachments.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_body.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_body.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_body.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_body.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_custom_last_updated.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_custom_last_updated.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_custom_last_updated.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_custom_last_updated.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_date_range.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_date_range.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_date_range.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_date_range.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_location.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_location.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_location.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_location.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_show_last_updated.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_show_last_updated.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_show_last_updated.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_show_last_updated.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_show_toc.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_show_toc.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_show_toc.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_show_toc.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_site_section.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_site_section.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_site_section.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_site_section.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_summary.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_summary.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_summary.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_summary.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_thumbnail.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_thumbnail.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_thumbnail.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_thumbnail.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_topics.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_topics.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_event.field_c_n_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_background.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_background.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_blend_mode.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_blend_mode.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_blend_mode.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_blend_mode.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_components.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_components.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_components.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_components.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_components_bott.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_components_bott.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_components_bott.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_components_bott.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_featured_image.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_featured_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_featured_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_featured_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_hide_breadcrumb.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_hide_breadcrumb.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_hide_breadcrumb.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_hide_breadcrumb.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_title.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_type.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_type.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_banner_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_components.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_components.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_components.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_components.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_custom_last_updated.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_custom_last_updated.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_custom_last_updated.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_custom_last_updated.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_hide_sidebar.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_hide_sidebar.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_hide_sidebar.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_hide_sidebar.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_hide_tags.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_hide_tags.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_hide_tags.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_hide_tags.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_show_last_updated.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_show_last_updated.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_show_last_updated.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_show_last_updated.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_show_toc.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_show_toc.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_show_toc.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_show_toc.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_site_section.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_site_section.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_site_section.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_site_section.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_summary.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_summary.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_summary.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_summary.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_thumbnail.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_thumbnail.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_thumbnail.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_thumbnail.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_topics.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_topics.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.node.civictheme_page.field_c_n_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_background.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_background.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_expand.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_expand.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_expand.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_expand.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_panels.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_panels.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_panels.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_panels.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_expand.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_expand.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_expand.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_expand.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_accordion_panel.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_attachments.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_attachments.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_attachments.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_attachments.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_background.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_background.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_attachment.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_background.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_background.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_column_count.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_column_count.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_column_count.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_column_count.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_content_type.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_content_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_content_type.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_content_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_fill_width.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_fill_width.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_fill_width.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_fill_width.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_filters_exp.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_filters_exp.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_filters_exp.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_filters_exp.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_item_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_item_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_item_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_item_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_item_view_as.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_item_view_as.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_item_view_as.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_item_view_as.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_limit.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_limit.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_limit.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_limit.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_limit_type.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_limit_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_limit_type.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_limit_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_link_above.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_link_above.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_link_above.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_link_above.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_link_below.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_link_below.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_link_below.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_link_below.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_site_sections.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_site_sections.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_site_sections.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_site_sections.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_topics.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_topics.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_type.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_type.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_list_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_automated_list.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_links.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_links.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_links.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_links.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_callout.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_date.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_date.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_date.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_date.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_image.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_image_position.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_image_position.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_image_position.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_image_position.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_links.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_links.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_links.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_links.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_topics.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_topics.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_campaign.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_background.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_background.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_content.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_date_range.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_date_range.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_date_range.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_date_range.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_image.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_link.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_location.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_location.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_location.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_location.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_summary.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_summary.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_summary.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_summary.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_topics.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_topics.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card.field_c_p_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card_ref.field_c_p_reference.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card_ref.field_c_p_reference.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card_ref.field_c_p_reference.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card_ref.field_c_p_reference.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card_ref.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card_ref.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card_ref.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_event_card_ref.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_attributes.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_attributes.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_attributes.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_attributes.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_background.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_background.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_height.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_height.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_height.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_height.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_url.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_url.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_url.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_url.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_width.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_width.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_width.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_iframe.field_c_p_width.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_background.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_background.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_column_count.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_column_count.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_column_count.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_column_count.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_fill_width.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_fill_width.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_fill_width.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_fill_width.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_items.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_items.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_items.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_items.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_link_above.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_link_above.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_link_above.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_link_above.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_link_below.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_link_below.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_link_below.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_list_link_below.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_manual_list.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_address.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_address.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_address.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_address.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_background.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_background.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_embed_url.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_embed_url.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_embed_url.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_embed_url.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_view_link.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_view_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_view_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_map.field_c_p_view_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_image.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_link.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_show_image_as_icon.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_show_image_as_icon.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_show_image_as_icon.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_show_image_as_icon.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_summary.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_summary.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_summary.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_summary.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card_ref.field_c_p_reference.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card_ref.field_c_p_reference.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card_ref.field_c_p_reference.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card_ref.field_c_p_reference.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card_ref.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card_ref.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card_ref.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_navigation_card_ref.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_link.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_next_step.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_link.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_image.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_link.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_subtitle.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_subtitle.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_subtitle.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_subtitle.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_summary.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_summary.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_summary.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_summary.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_topics.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_topics.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card.field_c_p_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card_ref.field_c_p_reference.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card_ref.field_c_p_reference.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card_ref.field_c_p_reference.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card_ref.field_c_p_reference.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card_ref.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card_ref.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card_ref.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_promo_card_ref.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_document.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_document.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_document.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_document.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_image.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_summary.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_summary.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_summary.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_summary.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_publication_card.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_author.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_author.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_author.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_author.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_quote.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_links.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_links.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_links.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_links.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_service_card.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_background.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_background.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_slides.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_slides.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_slides.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_slides.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_date.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_date.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_date.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_date.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_image.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_image_position.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_image_position.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_image_position.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_image_position.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_links.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_links.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_links.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_links.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_topics.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_topics.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide.field_c_p_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_image_position.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_image_position.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_image_position.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_image_position.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_link_text.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_link_text.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_link_text.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_link_text.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_reference.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_reference.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_reference.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_reference.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_slider_slide_ref.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_link.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_summary.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_summary.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_summary.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_summary.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_topics.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_topics.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet.field_c_p_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet_ref.field_c_p_reference.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet_ref.field_c_p_reference.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet_ref.field_c_p_reference.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet_ref.field_c_p_reference.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet_ref.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet_ref.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet_ref.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_snippet_ref.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_social_icon.field_c_p_icon.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_social_icon.field_c_p_icon.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_social_icon.field_c_p_icon.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_social_icon.field_c_p_icon.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_social_icon.field_c_p_link.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_social_icon.field_c_p_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_social_icon.field_c_p_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_social_icon.field_c_p_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_image.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_image.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_link.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_link.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card_ref.field_c_p_reference.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card_ref.field_c_p_reference.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card_ref.field_c_p_reference.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card_ref.field_c_p_reference.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card_ref.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card_ref.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card_ref.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_subject_card_ref.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_background.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_background.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_webform.yml b/web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_webform.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_webform.yml rename to web/themes/contrib/civictheme/config/install/field.field.paragraph.civictheme_webform.field_c_p_webform.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_background_image.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_background_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_background_image.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_background_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_banner_blend_mode.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_banner_blend_mode.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_banner_blend_mode.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_banner_blend_mode.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_banner_type.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_banner_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_banner_type.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_banner_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_bottom.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_bottom.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_bottom.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_bottom.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_components.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_components.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_components.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_components.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_featured_image.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_featured_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_featured_image.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_featured_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_link.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_link.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_social_icons.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_social_icons.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_social_icons.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_social_icons.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_theme.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_theme.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_top.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_top.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_top.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_top.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_trigger_text.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_trigger_text.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_trigger_text.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_trigger_text.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_trigger_theme.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_trigger_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_trigger_theme.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_trigger_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_with_border.yml b/web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_with_border.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_with_border.yml rename to web/themes/contrib/civictheme/config/install/field.storage.block_content.field_c_b_with_border.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_audio_file.yml b/web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_audio_file.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_audio_file.yml rename to web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_audio_file.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_caption.yml b/web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_caption.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_caption.yml rename to web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_caption.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_document.yml b/web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_document.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_document.yml rename to web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_document.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_icon.yml b/web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_icon.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_icon.yml rename to web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_icon.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_image.yml b/web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_image.yml rename to web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_oembed_video.yml b/web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_oembed_video.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_oembed_video.yml rename to web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_oembed_video.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_transcript.yml b/web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_transcript.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_transcript.yml rename to web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_transcript.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_transcript_link.yml b/web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_transcript_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_transcript_link.yml rename to web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_transcript_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_video_file.yml b/web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_video_file.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_video_file.yml rename to web/themes/contrib/civictheme/config/install/field.storage.media.field_c_m_video_file.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_alert_page_visibility.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_alert_page_visibility.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_alert_page_visibility.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_alert_page_visibility.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_alert_type.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_alert_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_alert_type.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_alert_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_attachments.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_attachments.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_attachments.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_attachments.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_background.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_background.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_blend_mode.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_blend_mode.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_blend_mode.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_blend_mode.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_components.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_components.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_components.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_components.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_components_bott.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_components_bott.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_components_bott.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_components_bott.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_featured_image.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_featured_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_featured_image.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_featured_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_hide_breadcrumb.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_hide_breadcrumb.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_hide_breadcrumb.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_hide_breadcrumb.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_theme.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_theme.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_title.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_title.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_type.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_type.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_banner_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_body.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_body.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_body.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_body.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_components.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_components.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_components.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_components.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_custom_last_updated.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_custom_last_updated.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_custom_last_updated.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_custom_last_updated.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_date_range.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_date_range.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_date_range.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_date_range.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_hide_sidebar.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_hide_sidebar.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_hide_sidebar.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_hide_sidebar.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_hide_tags.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_hide_tags.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_hide_tags.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_hide_tags.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_location.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_location.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_location.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_location.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_show_last_updated.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_show_last_updated.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_show_last_updated.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_show_last_updated.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_show_toc.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_show_toc.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_show_toc.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_show_toc.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_site_section.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_site_section.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_site_section.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_site_section.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_summary.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_summary.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_summary.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_summary.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_thumbnail.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_thumbnail.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_thumbnail.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_thumbnail.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_topics.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_topics.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.storage.node.field_c_n_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_address.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_address.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_address.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_address.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_attachments.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_attachments.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_attachments.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_attachments.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_attributes.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_attributes.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_attributes.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_attributes.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_author.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_author.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_author.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_author.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_background.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_background.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_background.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_background.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_cards.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_cards.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_cards.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_cards.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_content.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_content.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_date.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_date.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_date.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_date.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_date_range.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_date_range.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_date_range.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_date_range.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_default_panel.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_default_panel.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_default_panel.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_default_panel.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_document.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_document.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_document.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_document.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_embed_url.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_embed_url.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_embed_url.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_embed_url.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_expand.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_expand.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_expand.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_expand.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_footer_link.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_footer_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_footer_link.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_footer_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_header_link.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_header_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_header_link.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_header_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_height.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_height.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_height.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_height.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_icon.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_icon.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_icon.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_icon.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_image.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_image.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_image_position.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_image_position.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_image_position.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_image_position.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_link.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_link.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_link_text.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_link_text.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_link_text.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_link_text.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_links.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_links.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_links.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_links.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_column_count.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_column_count.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_column_count.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_column_count.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_content_type.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_content_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_content_type.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_content_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_fill_width.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_fill_width.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_fill_width.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_fill_width.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_filters_exp.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_filters_exp.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_filters_exp.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_filters_exp.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_item_theme.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_item_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_item_theme.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_item_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_item_view_as.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_item_view_as.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_item_view_as.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_item_view_as.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_items.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_items.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_items.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_items.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_limit.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_limit.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_limit.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_limit.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_limit_type.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_limit_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_limit_type.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_limit_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_link_above.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_link_above.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_link_above.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_link_above.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_link_below.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_link_below.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_link_below.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_link_below.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_site_sections.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_site_sections.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_site_sections.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_site_sections.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_topics.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_topics.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_type.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_type.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_type.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_list_type.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_location.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_location.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_location.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_location.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_panels.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_panels.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_panels.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_panels.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_reference.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_reference.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_reference.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_reference.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_show_image_as_icon.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_show_image_as_icon.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_show_image_as_icon.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_show_image_as_icon.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_slides.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_slides.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_slides.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_slides.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_subtitle.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_subtitle.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_subtitle.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_subtitle.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_summary.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_summary.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_summary.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_summary.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_theme.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_theme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_theme.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_theme.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_title.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_title.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_title.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_title.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_topics.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_topics.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_url.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_url.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_url.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_url.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_vertical_spacing.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_vertical_spacing.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_vertical_spacing.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_vertical_spacing.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_view_link.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_view_link.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_view_link.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_view_link.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_webform.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_webform.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_webform.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_webform.yml diff --git a/docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_width.yml b/web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_width.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_width.yml rename to web/themes/contrib/civictheme/config/install/field.storage.paragraph.field_c_p_width.yml diff --git a/docroot/themes/contrib/civictheme/config/install/filter.format.civictheme_plain_text.yml b/web/themes/contrib/civictheme/config/install/filter.format.civictheme_plain_text.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/filter.format.civictheme_plain_text.yml rename to web/themes/contrib/civictheme/config/install/filter.format.civictheme_plain_text.yml diff --git a/docroot/themes/contrib/civictheme/config/install/filter.format.civictheme_rich_text.yml b/web/themes/contrib/civictheme/config/install/filter.format.civictheme_rich_text.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/filter.format.civictheme_rich_text.yml rename to web/themes/contrib/civictheme/config/install/filter.format.civictheme_rich_text.yml diff --git a/docroot/themes/contrib/civictheme/config/install/image.style.civictheme_medium.yml b/web/themes/contrib/civictheme/config/install/image.style.civictheme_medium.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/image.style.civictheme_medium.yml rename to web/themes/contrib/civictheme/config/install/image.style.civictheme_medium.yml diff --git a/docroot/themes/contrib/civictheme/config/install/image.style.civictheme_navigation_card.yml b/web/themes/contrib/civictheme/config/install/image.style.civictheme_navigation_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/image.style.civictheme_navigation_card.yml rename to web/themes/contrib/civictheme/config/install/image.style.civictheme_navigation_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/image.style.civictheme_promo_banner.yml b/web/themes/contrib/civictheme/config/install/image.style.civictheme_promo_banner.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/image.style.civictheme_promo_banner.yml rename to web/themes/contrib/civictheme/config/install/image.style.civictheme_promo_banner.yml diff --git a/docroot/themes/contrib/civictheme/config/install/image.style.civictheme_promo_card.yml b/web/themes/contrib/civictheme/config/install/image.style.civictheme_promo_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/image.style.civictheme_promo_card.yml rename to web/themes/contrib/civictheme/config/install/image.style.civictheme_promo_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/image.style.civictheme_thumbnail.yml b/web/themes/contrib/civictheme/config/install/image.style.civictheme_thumbnail.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/image.style.civictheme_thumbnail.yml rename to web/themes/contrib/civictheme/config/install/image.style.civictheme_thumbnail.yml diff --git a/docroot/themes/contrib/civictheme/config/install/image.style.civictheme_topic_desktop.yml b/web/themes/contrib/civictheme/config/install/image.style.civictheme_topic_desktop.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/image.style.civictheme_topic_desktop.yml rename to web/themes/contrib/civictheme/config/install/image.style.civictheme_topic_desktop.yml diff --git a/docroot/themes/contrib/civictheme/config/install/image.style.civictheme_topic_mobile.yml b/web/themes/contrib/civictheme/config/install/image.style.civictheme_topic_mobile.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/image.style.civictheme_topic_mobile.yml rename to web/themes/contrib/civictheme/config/install/image.style.civictheme_topic_mobile.yml diff --git a/docroot/themes/contrib/civictheme/config/install/media.type.civictheme_audio.yml b/web/themes/contrib/civictheme/config/install/media.type.civictheme_audio.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/media.type.civictheme_audio.yml rename to web/themes/contrib/civictheme/config/install/media.type.civictheme_audio.yml diff --git a/docroot/themes/contrib/civictheme/config/install/media.type.civictheme_document.yml b/web/themes/contrib/civictheme/config/install/media.type.civictheme_document.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/media.type.civictheme_document.yml rename to web/themes/contrib/civictheme/config/install/media.type.civictheme_document.yml diff --git a/docroot/themes/contrib/civictheme/config/install/media.type.civictheme_icon.yml b/web/themes/contrib/civictheme/config/install/media.type.civictheme_icon.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/media.type.civictheme_icon.yml rename to web/themes/contrib/civictheme/config/install/media.type.civictheme_icon.yml diff --git a/docroot/themes/contrib/civictheme/config/install/media.type.civictheme_image.yml b/web/themes/contrib/civictheme/config/install/media.type.civictheme_image.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/media.type.civictheme_image.yml rename to web/themes/contrib/civictheme/config/install/media.type.civictheme_image.yml diff --git a/docroot/themes/contrib/civictheme/config/install/media.type.civictheme_remote_video.yml b/web/themes/contrib/civictheme/config/install/media.type.civictheme_remote_video.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/media.type.civictheme_remote_video.yml rename to web/themes/contrib/civictheme/config/install/media.type.civictheme_remote_video.yml diff --git a/docroot/themes/contrib/civictheme/config/install/media.type.civictheme_video.yml b/web/themes/contrib/civictheme/config/install/media.type.civictheme_video.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/media.type.civictheme_video.yml rename to web/themes/contrib/civictheme/config/install/media.type.civictheme_video.yml diff --git a/docroot/themes/contrib/civictheme/config/install/node.type.civictheme_alert.yml b/web/themes/contrib/civictheme/config/install/node.type.civictheme_alert.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/node.type.civictheme_alert.yml rename to web/themes/contrib/civictheme/config/install/node.type.civictheme_alert.yml diff --git a/docroot/themes/contrib/civictheme/config/install/node.type.civictheme_event.yml b/web/themes/contrib/civictheme/config/install/node.type.civictheme_event.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/node.type.civictheme_event.yml rename to web/themes/contrib/civictheme/config/install/node.type.civictheme_event.yml diff --git a/docroot/themes/contrib/civictheme/config/install/node.type.civictheme_page.yml b/web/themes/contrib/civictheme/config/install/node.type.civictheme_page.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/node.type.civictheme_page.yml rename to web/themes/contrib/civictheme/config/install/node.type.civictheme_page.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_accordion.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_accordion.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_accordion.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_accordion.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_accordion_panel.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_accordion_panel.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_accordion_panel.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_accordion_panel.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_attachment.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_attachment.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_attachment.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_attachment.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_automated_list.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_automated_list.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_automated_list.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_automated_list.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_callout.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_callout.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_callout.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_callout.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_campaign.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_campaign.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_campaign.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_campaign.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_content.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_content.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_content.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_event_card.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_event_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_event_card.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_event_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_event_card_ref.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_event_card_ref.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_event_card_ref.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_event_card_ref.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_iframe.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_iframe.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_iframe.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_iframe.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_manual_list.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_manual_list.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_manual_list.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_manual_list.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_map.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_map.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_map.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_map.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_navigation_card.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_navigation_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_navigation_card.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_navigation_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_navigation_card_ref.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_navigation_card_ref.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_navigation_card_ref.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_navigation_card_ref.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_next_step.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_next_step.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_next_step.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_next_step.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo_card.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo_card.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo_card_ref.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo_card_ref.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo_card_ref.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_promo_card_ref.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_publication_card.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_publication_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_publication_card.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_publication_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_quote.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_quote.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_quote.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_quote.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_service_card.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_service_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_service_card.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_service_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider_slide.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider_slide.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider_slide.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider_slide.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider_slide_ref.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider_slide_ref.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider_slide_ref.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_slider_slide_ref.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_snippet.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_snippet.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_snippet.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_snippet.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_snippet_ref.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_snippet_ref.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_snippet_ref.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_snippet_ref.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_social_icon.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_social_icon.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_social_icon.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_social_icon.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_subject_card.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_subject_card.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_subject_card.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_subject_card.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_subject_card_ref.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_subject_card_ref.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_subject_card_ref.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_subject_card_ref.yml diff --git a/docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_webform.yml b/web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_webform.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_webform.yml rename to web/themes/contrib/civictheme/config/install/paragraphs.paragraphs_type.civictheme_webform.yml diff --git a/docroot/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_alert.yml b/web/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_alert.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_alert.yml rename to web/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_alert.yml diff --git a/docroot/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_event.yml b/web/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_event.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_event.yml rename to web/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_event.yml diff --git a/docroot/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_page.yml b/web/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_page.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_page.yml rename to web/themes/contrib/civictheme/config/install/pathauto.pattern.civictheme_page.yml diff --git a/docroot/themes/contrib/civictheme/config/install/system.menu.civictheme-footer.yml b/web/themes/contrib/civictheme/config/install/system.menu.civictheme-footer.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/system.menu.civictheme-footer.yml rename to web/themes/contrib/civictheme/config/install/system.menu.civictheme-footer.yml diff --git a/docroot/themes/contrib/civictheme/config/install/system.menu.civictheme-primary-navigation.yml b/web/themes/contrib/civictheme/config/install/system.menu.civictheme-primary-navigation.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/system.menu.civictheme-primary-navigation.yml rename to web/themes/contrib/civictheme/config/install/system.menu.civictheme-primary-navigation.yml diff --git a/docroot/themes/contrib/civictheme/config/install/system.menu.civictheme-secondary-navigation.yml b/web/themes/contrib/civictheme/config/install/system.menu.civictheme-secondary-navigation.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/system.menu.civictheme-secondary-navigation.yml rename to web/themes/contrib/civictheme/config/install/system.menu.civictheme-secondary-navigation.yml diff --git a/docroot/themes/contrib/civictheme/config/install/taxonomy.vocabulary.civictheme_site_sections.yml b/web/themes/contrib/civictheme/config/install/taxonomy.vocabulary.civictheme_site_sections.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/taxonomy.vocabulary.civictheme_site_sections.yml rename to web/themes/contrib/civictheme/config/install/taxonomy.vocabulary.civictheme_site_sections.yml diff --git a/docroot/themes/contrib/civictheme/config/install/taxonomy.vocabulary.civictheme_topics.yml b/web/themes/contrib/civictheme/config/install/taxonomy.vocabulary.civictheme_topics.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/taxonomy.vocabulary.civictheme_topics.yml rename to web/themes/contrib/civictheme/config/install/taxonomy.vocabulary.civictheme_topics.yml diff --git a/docroot/themes/contrib/civictheme/config/install/user.role.civictheme_content_approver.yml b/web/themes/contrib/civictheme/config/install/user.role.civictheme_content_approver.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/user.role.civictheme_content_approver.yml rename to web/themes/contrib/civictheme/config/install/user.role.civictheme_content_approver.yml diff --git a/docroot/themes/contrib/civictheme/config/install/user.role.civictheme_content_author.yml b/web/themes/contrib/civictheme/config/install/user.role.civictheme_content_author.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/user.role.civictheme_content_author.yml rename to web/themes/contrib/civictheme/config/install/user.role.civictheme_content_author.yml diff --git a/docroot/themes/contrib/civictheme/config/install/user.role.civictheme_site_administrator.yml b/web/themes/contrib/civictheme/config/install/user.role.civictheme_site_administrator.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/user.role.civictheme_site_administrator.yml rename to web/themes/contrib/civictheme/config/install/user.role.civictheme_site_administrator.yml diff --git a/docroot/themes/contrib/civictheme/config/install/views.view.civictheme_alerts.yml b/web/themes/contrib/civictheme/config/install/views.view.civictheme_alerts.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/views.view.civictheme_alerts.yml rename to web/themes/contrib/civictheme/config/install/views.view.civictheme_alerts.yml diff --git a/docroot/themes/contrib/civictheme/config/install/views.view.civictheme_automated_list.yml b/web/themes/contrib/civictheme/config/install/views.view.civictheme_automated_list.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/views.view.civictheme_automated_list.yml rename to web/themes/contrib/civictheme/config/install/views.view.civictheme_automated_list.yml diff --git a/docroot/themes/contrib/civictheme/config/install/webform.webform.civictheme_enquiry.yml b/web/themes/contrib/civictheme/config/install/webform.webform.civictheme_enquiry.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/install/webform.webform.civictheme_enquiry.yml rename to web/themes/contrib/civictheme/config/install/webform.webform.civictheme_enquiry.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_banner.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_banner.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_banner.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_banner.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_acknowledgment_of_country.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_acknowledgment_of_country.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_acknowledgment_of_country.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_acknowledgment_of_country.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_copyright.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_copyright.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_copyright.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_copyright.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_1.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_1.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_1.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_1.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_2.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_2.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_2.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_2.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_3.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_3.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_3.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_3.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_4.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_4.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_4.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_menu_4.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_social_links.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_social_links.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_social_links.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_footer_social_links.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_mobile_navigation.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_mobile_navigation.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_mobile_navigation.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_mobile_navigation.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_primary_navigation.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_primary_navigation.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_primary_navigation.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_primary_navigation.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_search.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_search.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_search.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_search.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_secondary_navigation.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_secondary_navigation.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_secondary_navigation.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_secondary_navigation.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_side_navigation.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_side_navigation.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_side_navigation.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_side_navigation.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_signup.yml b/web/themes/contrib/civictheme/config/optional/block.block.civictheme_signup.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/block.block.civictheme_signup.yml rename to web/themes/contrib/civictheme/config/optional/block.block.civictheme_signup.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/linkit.linkit_profile.civictheme.yml b/web/themes/contrib/civictheme/config/optional/linkit.linkit_profile.civictheme.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/linkit.linkit_profile.civictheme.yml rename to web/themes/contrib/civictheme/config/optional/linkit.linkit_profile.civictheme.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/media.settings.yml b/web/themes/contrib/civictheme/config/optional/media.settings.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/media.settings.yml rename to web/themes/contrib/civictheme/config/optional/media.settings.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/search_api.index.civictheme_content.yml b/web/themes/contrib/civictheme/config/optional/search_api.index.civictheme_content.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/search_api.index.civictheme_content.yml rename to web/themes/contrib/civictheme/config/optional/search_api.index.civictheme_content.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/search_api.server.civictheme_database.yml b/web/themes/contrib/civictheme/config/optional/search_api.server.civictheme_database.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/search_api.server.civictheme_database.yml rename to web/themes/contrib/civictheme/config/optional/search_api.server.civictheme_database.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/search_api.settings.yml b/web/themes/contrib/civictheme/config/optional/search_api.settings.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/search_api.settings.yml rename to web/themes/contrib/civictheme/config/optional/search_api.settings.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/search_api_db.settings.yml b/web/themes/contrib/civictheme/config/optional/search_api_db.settings.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/search_api_db.settings.yml rename to web/themes/contrib/civictheme/config/optional/search_api_db.settings.yml diff --git a/docroot/themes/contrib/civictheme/config/optional/views.view.civictheme_search.yml b/web/themes/contrib/civictheme/config/optional/views.view.civictheme_search.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/optional/views.view.civictheme_search.yml rename to web/themes/contrib/civictheme/config/optional/views.view.civictheme_search.yml diff --git a/docroot/themes/contrib/civictheme/config/schema/civictheme.schema.yml b/web/themes/contrib/civictheme/config/schema/civictheme.schema.yml similarity index 100% rename from docroot/themes/contrib/civictheme/config/schema/civictheme.schema.yml rename to web/themes/contrib/civictheme/config/schema/civictheme.schema.yml diff --git a/docroot/themes/contrib/civictheme/includes/accordion.inc b/web/themes/contrib/civictheme/includes/accordion.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/accordion.inc rename to web/themes/contrib/civictheme/includes/accordion.inc diff --git a/docroot/themes/contrib/civictheme/includes/alert.inc b/web/themes/contrib/civictheme/includes/alert.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/alert.inc rename to web/themes/contrib/civictheme/includes/alert.inc diff --git a/docroot/themes/contrib/civictheme/includes/attachment.inc b/web/themes/contrib/civictheme/includes/attachment.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/attachment.inc rename to web/themes/contrib/civictheme/includes/attachment.inc diff --git a/docroot/themes/contrib/civictheme/includes/automated_list.inc b/web/themes/contrib/civictheme/includes/automated_list.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/automated_list.inc rename to web/themes/contrib/civictheme/includes/automated_list.inc diff --git a/docroot/themes/contrib/civictheme/includes/banner.inc b/web/themes/contrib/civictheme/includes/banner.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/banner.inc rename to web/themes/contrib/civictheme/includes/banner.inc diff --git a/docroot/themes/contrib/civictheme/includes/block_content.inc b/web/themes/contrib/civictheme/includes/block_content.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/block_content.inc rename to web/themes/contrib/civictheme/includes/block_content.inc diff --git a/docroot/themes/contrib/civictheme/includes/callout.inc b/web/themes/contrib/civictheme/includes/callout.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/callout.inc rename to web/themes/contrib/civictheme/includes/callout.inc diff --git a/docroot/themes/contrib/civictheme/includes/campaign.inc b/web/themes/contrib/civictheme/includes/campaign.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/campaign.inc rename to web/themes/contrib/civictheme/includes/campaign.inc diff --git a/docroot/themes/contrib/civictheme/includes/cards.inc b/web/themes/contrib/civictheme/includes/cards.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/cards.inc rename to web/themes/contrib/civictheme/includes/cards.inc diff --git a/docroot/themes/contrib/civictheme/includes/content.inc b/web/themes/contrib/civictheme/includes/content.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/content.inc rename to web/themes/contrib/civictheme/includes/content.inc diff --git a/docroot/themes/contrib/civictheme/includes/form.inc b/web/themes/contrib/civictheme/includes/form.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/form.inc rename to web/themes/contrib/civictheme/includes/form.inc diff --git a/docroot/themes/contrib/civictheme/includes/iframe.inc b/web/themes/contrib/civictheme/includes/iframe.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/iframe.inc rename to web/themes/contrib/civictheme/includes/iframe.inc diff --git a/docroot/themes/contrib/civictheme/includes/image.inc b/web/themes/contrib/civictheme/includes/image.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/image.inc rename to web/themes/contrib/civictheme/includes/image.inc diff --git a/docroot/themes/contrib/civictheme/includes/libraries.inc b/web/themes/contrib/civictheme/includes/libraries.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/libraries.inc rename to web/themes/contrib/civictheme/includes/libraries.inc diff --git a/docroot/themes/contrib/civictheme/includes/link.inc b/web/themes/contrib/civictheme/includes/link.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/link.inc rename to web/themes/contrib/civictheme/includes/link.inc diff --git a/docroot/themes/contrib/civictheme/includes/local_tasks.inc b/web/themes/contrib/civictheme/includes/local_tasks.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/local_tasks.inc rename to web/themes/contrib/civictheme/includes/local_tasks.inc diff --git a/docroot/themes/contrib/civictheme/includes/manual_list.inc b/web/themes/contrib/civictheme/includes/manual_list.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/manual_list.inc rename to web/themes/contrib/civictheme/includes/manual_list.inc diff --git a/docroot/themes/contrib/civictheme/includes/map.inc b/web/themes/contrib/civictheme/includes/map.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/map.inc rename to web/themes/contrib/civictheme/includes/map.inc diff --git a/docroot/themes/contrib/civictheme/includes/media.inc b/web/themes/contrib/civictheme/includes/media.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/media.inc rename to web/themes/contrib/civictheme/includes/media.inc diff --git a/docroot/themes/contrib/civictheme/includes/menu.inc b/web/themes/contrib/civictheme/includes/menu.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/menu.inc rename to web/themes/contrib/civictheme/includes/menu.inc diff --git a/docroot/themes/contrib/civictheme/includes/mobile_navigation.inc b/web/themes/contrib/civictheme/includes/mobile_navigation.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/mobile_navigation.inc rename to web/themes/contrib/civictheme/includes/mobile_navigation.inc diff --git a/docroot/themes/contrib/civictheme/includes/next_step.inc b/web/themes/contrib/civictheme/includes/next_step.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/next_step.inc rename to web/themes/contrib/civictheme/includes/next_step.inc diff --git a/docroot/themes/contrib/civictheme/includes/node.inc b/web/themes/contrib/civictheme/includes/node.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/node.inc rename to web/themes/contrib/civictheme/includes/node.inc diff --git a/docroot/themes/contrib/civictheme/includes/page.inc b/web/themes/contrib/civictheme/includes/page.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/page.inc rename to web/themes/contrib/civictheme/includes/page.inc diff --git a/docroot/themes/contrib/civictheme/includes/pager.inc b/web/themes/contrib/civictheme/includes/pager.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/pager.inc rename to web/themes/contrib/civictheme/includes/pager.inc diff --git a/docroot/themes/contrib/civictheme/includes/paragraphs.inc b/web/themes/contrib/civictheme/includes/paragraphs.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/paragraphs.inc rename to web/themes/contrib/civictheme/includes/paragraphs.inc diff --git a/docroot/themes/contrib/civictheme/includes/primary_navigation.inc b/web/themes/contrib/civictheme/includes/primary_navigation.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/primary_navigation.inc rename to web/themes/contrib/civictheme/includes/primary_navigation.inc diff --git a/docroot/themes/contrib/civictheme/includes/process.inc b/web/themes/contrib/civictheme/includes/process.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/process.inc rename to web/themes/contrib/civictheme/includes/process.inc diff --git a/docroot/themes/contrib/civictheme/includes/promo.inc b/web/themes/contrib/civictheme/includes/promo.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/promo.inc rename to web/themes/contrib/civictheme/includes/promo.inc diff --git a/docroot/themes/contrib/civictheme/includes/quote.inc b/web/themes/contrib/civictheme/includes/quote.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/quote.inc rename to web/themes/contrib/civictheme/includes/quote.inc diff --git a/docroot/themes/contrib/civictheme/includes/search.inc b/web/themes/contrib/civictheme/includes/search.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/search.inc rename to web/themes/contrib/civictheme/includes/search.inc diff --git a/docroot/themes/contrib/civictheme/includes/secondary_navigation.inc b/web/themes/contrib/civictheme/includes/secondary_navigation.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/secondary_navigation.inc rename to web/themes/contrib/civictheme/includes/secondary_navigation.inc diff --git a/docroot/themes/contrib/civictheme/includes/site_section.inc b/web/themes/contrib/civictheme/includes/site_section.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/site_section.inc rename to web/themes/contrib/civictheme/includes/site_section.inc diff --git a/docroot/themes/contrib/civictheme/includes/skip_link.inc b/web/themes/contrib/civictheme/includes/skip_link.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/skip_link.inc rename to web/themes/contrib/civictheme/includes/skip_link.inc diff --git a/docroot/themes/contrib/civictheme/includes/slider.inc b/web/themes/contrib/civictheme/includes/slider.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/slider.inc rename to web/themes/contrib/civictheme/includes/slider.inc diff --git a/docroot/themes/contrib/civictheme/includes/snippet.inc b/web/themes/contrib/civictheme/includes/snippet.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/snippet.inc rename to web/themes/contrib/civictheme/includes/snippet.inc diff --git a/docroot/themes/contrib/civictheme/includes/social_links.inc b/web/themes/contrib/civictheme/includes/social_links.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/social_links.inc rename to web/themes/contrib/civictheme/includes/social_links.inc diff --git a/docroot/themes/contrib/civictheme/includes/system_branding.inc b/web/themes/contrib/civictheme/includes/system_branding.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/system_branding.inc rename to web/themes/contrib/civictheme/includes/system_branding.inc diff --git a/docroot/themes/contrib/civictheme/includes/system_main_block.inc b/web/themes/contrib/civictheme/includes/system_main_block.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/system_main_block.inc rename to web/themes/contrib/civictheme/includes/system_main_block.inc diff --git a/docroot/themes/contrib/civictheme/includes/table.inc b/web/themes/contrib/civictheme/includes/table.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/table.inc rename to web/themes/contrib/civictheme/includes/table.inc diff --git a/docroot/themes/contrib/civictheme/includes/utilities.inc b/web/themes/contrib/civictheme/includes/utilities.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/utilities.inc rename to web/themes/contrib/civictheme/includes/utilities.inc diff --git a/docroot/themes/contrib/civictheme/includes/views.inc b/web/themes/contrib/civictheme/includes/views.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/views.inc rename to web/themes/contrib/civictheme/includes/views.inc diff --git a/docroot/themes/contrib/civictheme/includes/webform.inc b/web/themes/contrib/civictheme/includes/webform.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/webform.inc rename to web/themes/contrib/civictheme/includes/webform.inc diff --git a/docroot/themes/contrib/civictheme/includes/wysiwyg.inc b/web/themes/contrib/civictheme/includes/wysiwyg.inc similarity index 100% rename from docroot/themes/contrib/civictheme/includes/wysiwyg.inc rename to web/themes/contrib/civictheme/includes/wysiwyg.inc diff --git a/docroot/themes/contrib/civictheme/logo.svg b/web/themes/contrib/civictheme/logo.svg similarity index 100% rename from docroot/themes/contrib/civictheme/logo.svg rename to web/themes/contrib/civictheme/logo.svg diff --git a/docroot/themes/contrib/civictheme/package.json b/web/themes/contrib/civictheme/package.json similarity index 100% rename from docroot/themes/contrib/civictheme/package.json rename to web/themes/contrib/civictheme/package.json diff --git a/docroot/themes/contrib/civictheme/screenshot.png b/web/themes/contrib/civictheme/screenshot.png similarity index 100% rename from docroot/themes/contrib/civictheme/screenshot.png rename to web/themes/contrib/civictheme/screenshot.png diff --git a/docroot/themes/contrib/civictheme/src/CivicthemeColorManager.php b/web/themes/contrib/civictheme/src/CivicthemeColorManager.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemeColorManager.php rename to web/themes/contrib/civictheme/src/CivicthemeColorManager.php diff --git a/docroot/themes/contrib/civictheme/src/CivicthemeConfigImporter.php b/web/themes/contrib/civictheme/src/CivicthemeConfigImporter.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemeConfigImporter.php rename to web/themes/contrib/civictheme/src/CivicthemeConfigImporter.php diff --git a/docroot/themes/contrib/civictheme/src/CivicthemeConfigManager.php b/web/themes/contrib/civictheme/src/CivicthemeConfigManager.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemeConfigManager.php rename to web/themes/contrib/civictheme/src/CivicthemeConfigManager.php diff --git a/docroot/themes/contrib/civictheme/src/CivicthemeConstants.php b/web/themes/contrib/civictheme/src/CivicthemeConstants.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemeConstants.php rename to web/themes/contrib/civictheme/src/CivicthemeConstants.php diff --git a/docroot/themes/contrib/civictheme/src/CivicthemePluginLoader.php b/web/themes/contrib/civictheme/src/CivicthemePluginLoader.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemePluginLoader.php rename to web/themes/contrib/civictheme/src/CivicthemePluginLoader.php diff --git a/docroot/themes/contrib/civictheme/src/CivicthemeSettingsFormManager.php b/web/themes/contrib/civictheme/src/CivicthemeSettingsFormManager.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemeSettingsFormManager.php rename to web/themes/contrib/civictheme/src/CivicthemeSettingsFormManager.php diff --git a/docroot/themes/contrib/civictheme/src/CivicthemeStylesheetGenerator.php b/web/themes/contrib/civictheme/src/CivicthemeStylesheetGenerator.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemeStylesheetGenerator.php rename to web/themes/contrib/civictheme/src/CivicthemeStylesheetGenerator.php diff --git a/docroot/themes/contrib/civictheme/src/CivicthemeStylesheetParser.php b/web/themes/contrib/civictheme/src/CivicthemeStylesheetParser.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemeStylesheetParser.php rename to web/themes/contrib/civictheme/src/CivicthemeStylesheetParser.php diff --git a/docroot/themes/contrib/civictheme/src/CivicthemeUpdateHelper.php b/web/themes/contrib/civictheme/src/CivicthemeUpdateHelper.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemeUpdateHelper.php rename to web/themes/contrib/civictheme/src/CivicthemeUpdateHelper.php diff --git a/docroot/themes/contrib/civictheme/src/CivicthemeUtility.php b/web/themes/contrib/civictheme/src/CivicthemeUtility.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemeUtility.php rename to web/themes/contrib/civictheme/src/CivicthemeUtility.php diff --git a/docroot/themes/contrib/civictheme/src/CivicthemeVersionManager.php b/web/themes/contrib/civictheme/src/CivicthemeVersionManager.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/CivicthemeVersionManager.php rename to web/themes/contrib/civictheme/src/CivicthemeVersionManager.php diff --git a/docroot/themes/contrib/civictheme/src/Color/CivicthemeColor.php b/web/themes/contrib/civictheme/src/Color/CivicthemeColor.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Color/CivicthemeColor.php rename to web/themes/contrib/civictheme/src/Color/CivicthemeColor.php diff --git a/docroot/themes/contrib/civictheme/src/Color/CivicthemeColorFilterBase.php b/web/themes/contrib/civictheme/src/Color/CivicthemeColorFilterBase.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Color/CivicthemeColorFilterBase.php rename to web/themes/contrib/civictheme/src/Color/CivicthemeColorFilterBase.php diff --git a/docroot/themes/contrib/civictheme/src/Color/CivicthemeColorShadeFilter.php b/web/themes/contrib/civictheme/src/Color/CivicthemeColorShadeFilter.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Color/CivicthemeColorShadeFilter.php rename to web/themes/contrib/civictheme/src/Color/CivicthemeColorShadeFilter.php diff --git a/docroot/themes/contrib/civictheme/src/Color/CivicthemeColorTintFilter.php b/web/themes/contrib/civictheme/src/Color/CivicthemeColorTintFilter.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Color/CivicthemeColorTintFilter.php rename to web/themes/contrib/civictheme/src/Color/CivicthemeColorTintFilter.php diff --git a/docroot/themes/contrib/civictheme/src/Color/CivicthemeColorUtility.php b/web/themes/contrib/civictheme/src/Color/CivicthemeColorUtility.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Color/CivicthemeColorUtility.php rename to web/themes/contrib/civictheme/src/Color/CivicthemeColorUtility.php diff --git a/docroot/themes/contrib/civictheme/src/Drush/Commands/CivicthemeCommands.php b/web/themes/contrib/civictheme/src/Drush/Commands/CivicthemeCommands.php similarity index 98% rename from docroot/themes/contrib/civictheme/src/Drush/Commands/CivicthemeCommands.php rename to web/themes/contrib/civictheme/src/Drush/Commands/CivicthemeCommands.php index 698d1b09d..4573dd784 100644 --- a/docroot/themes/contrib/civictheme/src/Drush/Commands/CivicthemeCommands.php +++ b/web/themes/contrib/civictheme/src/Drush/Commands/CivicthemeCommands.php @@ -16,7 +16,7 @@ * @see https://www.drush.org/latest/bootstrap * * Usage: - * drush --include=docroot/themes/contrib/civictheme/src/Drush command + * drush --include=web/themes/contrib/civictheme/src/Drush command * * phpcs:disable Drupal.Commenting.DocComment.ParamGroup * phpcs:disable Drupal.Commenting.FunctionComment.MissingParamType diff --git a/docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionAttached.php b/web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionAttached.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionAttached.php rename to web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionAttached.php diff --git a/docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionBase.php b/web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionBase.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionBase.php rename to web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionBase.php diff --git a/docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionColors.php b/web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionColors.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionColors.php rename to web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionColors.php diff --git a/docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionComponents.php b/web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionComponents.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionComponents.php rename to web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionComponents.php diff --git a/docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionInformation.php b/web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionInformation.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionInformation.php rename to web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionInformation.php diff --git a/docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionOptout.php b/web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionOptout.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionOptout.php rename to web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionOptout.php diff --git a/docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionProvision.php b/web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionProvision.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionProvision.php rename to web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionProvision.php diff --git a/docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionReset.php b/web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionReset.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionReset.php rename to web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionReset.php diff --git a/docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionStorybook.php b/web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionStorybook.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionStorybook.php rename to web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionStorybook.php diff --git a/docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionVersion.php b/web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionVersion.php similarity index 100% rename from docroot/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionVersion.php rename to web/themes/contrib/civictheme/src/Settings/CivicthemeSettingsFormSectionVersion.php diff --git a/docroot/themes/contrib/civictheme/templates/block/block--civictheme-banner--default.html.twig b/web/themes/contrib/civictheme/templates/block/block--civictheme-banner--default.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/block/block--civictheme-banner--default.html.twig rename to web/themes/contrib/civictheme/templates/block/block--civictheme-banner--default.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/block/block--civictheme-component-block--default.html.twig b/web/themes/contrib/civictheme/templates/block/block--civictheme-component-block--default.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/block/block--civictheme-component-block--default.html.twig rename to web/themes/contrib/civictheme/templates/block/block--civictheme-component-block--default.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/block/block--civictheme-mobile-navigation--default.html.twig b/web/themes/contrib/civictheme/templates/block/block--civictheme-mobile-navigation--default.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/block/block--civictheme-mobile-navigation--default.html.twig rename to web/themes/contrib/civictheme/templates/block/block--civictheme-mobile-navigation--default.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/block/block--civictheme-search--default.html.twig b/web/themes/contrib/civictheme/templates/block/block--civictheme-search--default.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/block/block--civictheme-search--default.html.twig rename to web/themes/contrib/civictheme/templates/block/block--civictheme-search--default.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/block/block--civictheme-social-links--default.html.twig b/web/themes/contrib/civictheme/templates/block/block--civictheme-social-links--default.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/block/block--civictheme-social-links--default.html.twig rename to web/themes/contrib/civictheme/templates/block/block--civictheme-social-links--default.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-footer.html.twig b/web/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-footer.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-footer.html.twig rename to web/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-footer.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-primary-navigation.html.twig b/web/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-primary-navigation.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-primary-navigation.html.twig rename to web/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-primary-navigation.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-secondary-navigation.html.twig b/web/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-secondary-navigation.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-secondary-navigation.html.twig rename to web/themes/contrib/civictheme/templates/block/block--menu-block--civictheme-secondary-navigation.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/block/block--system-branding-block.html.twig b/web/themes/contrib/civictheme/templates/block/block--system-branding-block.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/block/block--system-branding-block.html.twig rename to web/themes/contrib/civictheme/templates/block/block--system-branding-block.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/block/block.html.twig b/web/themes/contrib/civictheme/templates/block/block.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/block/block.html.twig rename to web/themes/contrib/civictheme/templates/block/block.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/content/node--civictheme-alert.html.twig b/web/themes/contrib/civictheme/templates/content/node--civictheme-alert.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/content/node--civictheme-alert.html.twig rename to web/themes/contrib/civictheme/templates/content/node--civictheme-alert.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-navigation-card.html.twig b/web/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-navigation-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-navigation-card.html.twig rename to web/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-navigation-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-promo-card.html.twig b/web/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-promo-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-promo-card.html.twig rename to web/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-promo-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-slider-slide.html.twig b/web/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-slider-slide.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-slider-slide.html.twig rename to web/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-slider-slide.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-snippet.html.twig b/web/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-snippet.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-snippet.html.twig rename to web/themes/contrib/civictheme/templates/content/node--civictheme-event--civictheme-snippet.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-navigation-card.html.twig b/web/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-navigation-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-navigation-card.html.twig rename to web/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-navigation-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-promo-card.html.twig b/web/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-promo-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-promo-card.html.twig rename to web/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-promo-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-slider-slide.html.twig b/web/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-slider-slide.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-slider-slide.html.twig rename to web/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-slider-slide.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-snippet.html.twig b/web/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-snippet.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-snippet.html.twig rename to web/themes/contrib/civictheme/templates/content/node--civictheme-page--civictheme-snippet.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/content/page-title.html.twig b/web/themes/contrib/civictheme/templates/content/page-title.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/content/page-title.html.twig rename to web/themes/contrib/civictheme/templates/content/page-title.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/dataset/table.html.twig b/web/themes/contrib/civictheme/templates/dataset/table.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/dataset/table.html.twig rename to web/themes/contrib/civictheme/templates/dataset/table.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/field/field--field-c-n-body.html.twig b/web/themes/contrib/civictheme/templates/field/field--field-c-n-body.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/field/field--field-c-n-body.html.twig rename to web/themes/contrib/civictheme/templates/field/field--field-c-n-body.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/field/field--field-c-n-date.html.twig b/web/themes/contrib/civictheme/templates/field/field--field-c-n-date.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/field/field--field-c-n-date.html.twig rename to web/themes/contrib/civictheme/templates/field/field--field-c-n-date.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/field/field--node--field-c-n-date-range.html.twig b/web/themes/contrib/civictheme/templates/field/field--node--field-c-n-date-range.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/field/field--node--field-c-n-date-range.html.twig rename to web/themes/contrib/civictheme/templates/field/field--node--field-c-n-date-range.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/field/field.html.twig b/web/themes/contrib/civictheme/templates/field/field.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/field/field.html.twig rename to web/themes/contrib/civictheme/templates/field/field.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/form/checkboxes.html.twig b/web/themes/contrib/civictheme/templates/form/checkboxes.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/form/checkboxes.html.twig rename to web/themes/contrib/civictheme/templates/form/checkboxes.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/form/form-element-label.html.twig b/web/themes/contrib/civictheme/templates/form/form-element-label.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/form/form-element-label.html.twig rename to web/themes/contrib/civictheme/templates/form/form-element-label.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/form/form-element.html.twig b/web/themes/contrib/civictheme/templates/form/form-element.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/form/form-element.html.twig rename to web/themes/contrib/civictheme/templates/form/form-element.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/form/input--submit.html.twig b/web/themes/contrib/civictheme/templates/form/input--submit.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/form/input--submit.html.twig rename to web/themes/contrib/civictheme/templates/form/input--submit.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/form/input.html.twig b/web/themes/contrib/civictheme/templates/form/input.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/form/input.html.twig rename to web/themes/contrib/civictheme/templates/form/input.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/form/radios.html.twig b/web/themes/contrib/civictheme/templates/form/radios.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/form/radios.html.twig rename to web/themes/contrib/civictheme/templates/form/radios.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/form/select.html.twig b/web/themes/contrib/civictheme/templates/form/select.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/form/select.html.twig rename to web/themes/contrib/civictheme/templates/form/select.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/form/textarea.html.twig b/web/themes/contrib/civictheme/templates/form/textarea.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/form/textarea.html.twig rename to web/themes/contrib/civictheme/templates/form/textarea.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/layout/html.html.twig b/web/themes/contrib/civictheme/templates/layout/html.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/layout/html.html.twig rename to web/themes/contrib/civictheme/templates/layout/html.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/layout/layout--single-column-contained.html.twig b/web/themes/contrib/civictheme/templates/layout/layout--single-column-contained.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/layout/layout--single-column-contained.html.twig rename to web/themes/contrib/civictheme/templates/layout/layout--single-column-contained.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/layout/layout--single-column.html.twig b/web/themes/contrib/civictheme/templates/layout/layout--single-column.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/layout/layout--single-column.html.twig rename to web/themes/contrib/civictheme/templates/layout/layout--single-column.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/layout/page.html.twig b/web/themes/contrib/civictheme/templates/layout/page.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/layout/page.html.twig rename to web/themes/contrib/civictheme/templates/layout/page.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/layout/region.html.twig b/web/themes/contrib/civictheme/templates/layout/region.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/layout/region.html.twig rename to web/themes/contrib/civictheme/templates/layout/region.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/media/media--civictheme-image--component.html.twig b/web/themes/contrib/civictheme/templates/media/media--civictheme-image--component.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/media/media--civictheme-image--component.html.twig rename to web/themes/contrib/civictheme/templates/media/media--civictheme-image--component.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/media/media--civictheme-image.html.twig b/web/themes/contrib/civictheme/templates/media/media--civictheme-image.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/media/media--civictheme-image.html.twig rename to web/themes/contrib/civictheme/templates/media/media--civictheme-image.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/media/media--civictheme-remote-video--full.html.twig b/web/themes/contrib/civictheme/templates/media/media--civictheme-remote-video--full.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/media/media--civictheme-remote-video--full.html.twig rename to web/themes/contrib/civictheme/templates/media/media--civictheme-remote-video--full.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/media/media--civictheme-remote-video.html.twig b/web/themes/contrib/civictheme/templates/media/media--civictheme-remote-video.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/media/media--civictheme-remote-video.html.twig rename to web/themes/contrib/civictheme/templates/media/media--civictheme-remote-video.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/media/media--civictheme-video--full.html.twig b/web/themes/contrib/civictheme/templates/media/media--civictheme-video--full.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/media/media--civictheme-video--full.html.twig rename to web/themes/contrib/civictheme/templates/media/media--civictheme-video--full.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/media/media--civictheme-video.html.twig b/web/themes/contrib/civictheme/templates/media/media--civictheme-video.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/media/media--civictheme-video.html.twig rename to web/themes/contrib/civictheme/templates/media/media--civictheme-video.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/misc/basic-content.html.twig b/web/themes/contrib/civictheme/templates/misc/basic-content.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/misc/basic-content.html.twig rename to web/themes/contrib/civictheme/templates/misc/basic-content.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/misc/image.html.twig b/web/themes/contrib/civictheme/templates/misc/image.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/misc/image.html.twig rename to web/themes/contrib/civictheme/templates/misc/image.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/misc/status-messages.html.twig b/web/themes/contrib/civictheme/templates/misc/status-messages.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/misc/status-messages.html.twig rename to web/themes/contrib/civictheme/templates/misc/status-messages.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/misc/tag-list.html.twig b/web/themes/contrib/civictheme/templates/misc/tag-list.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/misc/tag-list.html.twig rename to web/themes/contrib/civictheme/templates/misc/tag-list.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/navigation/breadcrumb.html.twig b/web/themes/contrib/civictheme/templates/navigation/breadcrumb.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/navigation/breadcrumb.html.twig rename to web/themes/contrib/civictheme/templates/navigation/breadcrumb.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/navigation/menu-local-tasks.html.twig b/web/themes/contrib/civictheme/templates/navigation/menu-local-tasks.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/navigation/menu-local-tasks.html.twig rename to web/themes/contrib/civictheme/templates/navigation/menu-local-tasks.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/navigation/menu.html.twig b/web/themes/contrib/civictheme/templates/navigation/menu.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/navigation/menu.html.twig rename to web/themes/contrib/civictheme/templates/navigation/menu.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/navigation/pager.html.twig b/web/themes/contrib/civictheme/templates/navigation/pager.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/navigation/pager.html.twig rename to web/themes/contrib/civictheme/templates/navigation/pager.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/navigation/views-mini-pager.html.twig b/web/themes/contrib/civictheme/templates/navigation/views-mini-pager.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/navigation/views-mini-pager.html.twig rename to web/themes/contrib/civictheme/templates/navigation/views-mini-pager.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-accordion.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-accordion.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-accordion.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-accordion.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-attachment.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-attachment.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-attachment.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-attachment.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-automated-list.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-automated-list.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-automated-list.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-automated-list.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-callout.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-callout.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-callout.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-callout.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-campaign.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-campaign.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-campaign.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-campaign.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-content.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-content.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-content.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-content.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-event-card-ref.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-event-card-ref.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-event-card-ref.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-event-card-ref.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-event-card.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-event-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-event-card.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-event-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-iframe.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-iframe.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-iframe.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-iframe.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-manual-list.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-manual-list.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-manual-list.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-manual-list.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-map.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-map.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-map.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-map.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-navigation-card-ref.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-navigation-card-ref.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-navigation-card-ref.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-navigation-card-ref.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-navigation-card.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-navigation-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-navigation-card.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-navigation-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-next-step.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-next-step.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-next-step.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-next-step.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo-card-ref.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo-card-ref.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo-card-ref.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo-card-ref.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo-card.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo-card.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-promo.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-publication-card.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-publication-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-publication-card.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-publication-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-quote.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-quote.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-quote.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-quote.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-reference-card.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-reference-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-reference-card.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-reference-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-service-card.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-service-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-service-card.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-service-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider-slide-ref.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider-slide-ref.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider-slide-ref.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider-slide-ref.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider-slide.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider-slide.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider-slide.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider-slide.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-slider.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-snippet-ref.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-snippet-ref.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-snippet-ref.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-snippet-ref.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-snippet.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-snippet.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-snippet.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-snippet.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-subject-card-ref.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-subject-card-ref.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-subject-card-ref.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-subject-card-ref.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-subject-card.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-subject-card.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-subject-card.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-subject-card.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-webform.html.twig b/web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-webform.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-webform.html.twig rename to web/themes/contrib/civictheme/templates/paragraphs/paragraph--civictheme-webform.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/views/views-exposed-form.html.twig b/web/themes/contrib/civictheme/templates/views/views-exposed-form.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/views/views-exposed-form.html.twig rename to web/themes/contrib/civictheme/templates/views/views-exposed-form.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/views/views-view-grid.html.twig b/web/themes/contrib/civictheme/templates/views/views-view-grid.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/views/views-view-grid.html.twig rename to web/themes/contrib/civictheme/templates/views/views-view-grid.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/views/views-view-table.html.twig b/web/themes/contrib/civictheme/templates/views/views-view-table.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/views/views-view-table.html.twig rename to web/themes/contrib/civictheme/templates/views/views-view-table.html.twig diff --git a/docroot/themes/contrib/civictheme/templates/views/views-view.html.twig b/web/themes/contrib/civictheme/templates/views/views-view.html.twig similarity index 100% rename from docroot/themes/contrib/civictheme/templates/views/views-view.html.twig rename to web/themes/contrib/civictheme/templates/views/views-view.html.twig diff --git a/docroot/themes/contrib/civictheme/tests/fixtures/updates/drupal_10.0.0-rc1.minimal.civictheme_1.3.2.bare.php.gz b/web/themes/contrib/civictheme/tests/fixtures/updates/drupal_10.0.0-rc1.minimal.civictheme_1.3.2.bare.php.gz similarity index 100% rename from docroot/themes/contrib/civictheme/tests/fixtures/updates/drupal_10.0.0-rc1.minimal.civictheme_1.3.2.bare.php.gz rename to web/themes/contrib/civictheme/tests/fixtures/updates/drupal_10.0.0-rc1.minimal.civictheme_1.3.2.bare.php.gz diff --git a/docroot/themes/contrib/civictheme/tests/fixtures/updates/drupal_10.0.0-rc1.minimal.civictheme_1.3.2.filled.php.gz b/web/themes/contrib/civictheme/tests/fixtures/updates/drupal_10.0.0-rc1.minimal.civictheme_1.3.2.filled.php.gz similarity index 100% rename from docroot/themes/contrib/civictheme/tests/fixtures/updates/drupal_10.0.0-rc1.minimal.civictheme_1.3.2.filled.php.gz rename to web/themes/contrib/civictheme/tests/fixtures/updates/drupal_10.0.0-rc1.minimal.civictheme_1.3.2.filled.php.gz diff --git a/docroot/themes/contrib/civictheme/tests/src/Functional/CivicthemeBrowserTestBase.php b/web/themes/contrib/civictheme/tests/src/Functional/CivicthemeBrowserTestBase.php similarity index 100% rename from docroot/themes/contrib/civictheme/tests/src/Functional/CivicthemeBrowserTestBase.php rename to web/themes/contrib/civictheme/tests/src/Functional/CivicthemeBrowserTestBase.php diff --git a/docroot/themes/contrib/civictheme/tests/src/Functional/CivicthemeInstallOptionalTest.php b/web/themes/contrib/civictheme/tests/src/Functional/CivicthemeInstallOptionalTest.php similarity index 100% rename from docroot/themes/contrib/civictheme/tests/src/Functional/CivicthemeInstallOptionalTest.php rename to web/themes/contrib/civictheme/tests/src/Functional/CivicthemeInstallOptionalTest.php diff --git a/docroot/themes/contrib/civictheme/tests/src/Functional/CivicthemeInstallRequiredTest.php b/web/themes/contrib/civictheme/tests/src/Functional/CivicthemeInstallRequiredTest.php similarity index 100% rename from docroot/themes/contrib/civictheme/tests/src/Functional/CivicthemeInstallRequiredTest.php rename to web/themes/contrib/civictheme/tests/src/Functional/CivicthemeInstallRequiredTest.php diff --git a/docroot/themes/contrib/civictheme/tests/src/Functional/Update/CivicthemeUpdatePathBareTest.php b/web/themes/contrib/civictheme/tests/src/Functional/Update/CivicthemeUpdatePathBareTest.php similarity index 100% rename from docroot/themes/contrib/civictheme/tests/src/Functional/Update/CivicthemeUpdatePathBareTest.php rename to web/themes/contrib/civictheme/tests/src/Functional/Update/CivicthemeUpdatePathBareTest.php diff --git a/docroot/themes/contrib/civictheme/tests/src/Functional/Update/CivicthemeUpdatePathFilledTest.php b/web/themes/contrib/civictheme/tests/src/Functional/Update/CivicthemeUpdatePathFilledTest.php similarity index 100% rename from docroot/themes/contrib/civictheme/tests/src/Functional/Update/CivicthemeUpdatePathFilledTest.php rename to web/themes/contrib/civictheme/tests/src/Functional/Update/CivicthemeUpdatePathFilledTest.php diff --git a/docroot/themes/contrib/civictheme/tests/src/Traits/CivicthemeTestHelperTrait.php b/web/themes/contrib/civictheme/tests/src/Traits/CivicthemeTestHelperTrait.php similarity index 100% rename from docroot/themes/contrib/civictheme/tests/src/Traits/CivicthemeTestHelperTrait.php rename to web/themes/contrib/civictheme/tests/src/Traits/CivicthemeTestHelperTrait.php diff --git a/docroot/themes/contrib/civictheme/tests/src/Unit/CivicthemeColorUtilityUnitTest.php b/web/themes/contrib/civictheme/tests/src/Unit/CivicthemeColorUtilityUnitTest.php similarity index 100% rename from docroot/themes/contrib/civictheme/tests/src/Unit/CivicthemeColorUtilityUnitTest.php rename to web/themes/contrib/civictheme/tests/src/Unit/CivicthemeColorUtilityUnitTest.php diff --git a/docroot/themes/contrib/civictheme/tests/src/Unit/CivicthemeHtmlLinkUnitTest.php b/web/themes/contrib/civictheme/tests/src/Unit/CivicthemeHtmlLinkUnitTest.php similarity index 100% rename from docroot/themes/contrib/civictheme/tests/src/Unit/CivicthemeHtmlLinkUnitTest.php rename to web/themes/contrib/civictheme/tests/src/Unit/CivicthemeHtmlLinkUnitTest.php diff --git a/docroot/themes/contrib/civictheme/tests/src/Unit/CivicthemeUnitTestBase.php b/web/themes/contrib/civictheme/tests/src/Unit/CivicthemeUnitTestBase.php similarity index 100% rename from docroot/themes/contrib/civictheme/tests/src/Unit/CivicthemeUnitTestBase.php rename to web/themes/contrib/civictheme/tests/src/Unit/CivicthemeUnitTestBase.php diff --git a/docroot/themes/contrib/civictheme/tests/src/Unit/CivicthemeUtilityUnitTest.php b/web/themes/contrib/civictheme/tests/src/Unit/CivicthemeUtilityUnitTest.php similarity index 100% rename from docroot/themes/contrib/civictheme/tests/src/Unit/CivicthemeUtilityUnitTest.php rename to web/themes/contrib/civictheme/tests/src/Unit/CivicthemeUtilityUnitTest.php diff --git a/docroot/themes/contrib/civictheme/theme-settings.php b/web/themes/contrib/civictheme/theme-settings.php similarity index 100% rename from docroot/themes/contrib/civictheme/theme-settings.php rename to web/themes/contrib/civictheme/theme-settings.php diff --git a/docroot/themes/contrib/civictheme/theme-settings.provision.inc b/web/themes/contrib/civictheme/theme-settings.provision.inc similarity index 100% rename from docroot/themes/contrib/civictheme/theme-settings.provision.inc rename to web/themes/contrib/civictheme/theme-settings.provision.inc diff --git a/docroot/themes/contrib/civictheme/theme-settings/assets/logo.png b/web/themes/contrib/civictheme/theme-settings/assets/logo.png similarity index 100% rename from docroot/themes/contrib/civictheme/theme-settings/assets/logo.png rename to web/themes/contrib/civictheme/theme-settings/assets/logo.png diff --git a/docroot/themes/contrib/civictheme/theme-settings/civictheme.theme-settings.colors.css b/web/themes/contrib/civictheme/theme-settings/civictheme.theme-settings.colors.css similarity index 100% rename from docroot/themes/contrib/civictheme/theme-settings/civictheme.theme-settings.colors.css rename to web/themes/contrib/civictheme/theme-settings/civictheme.theme-settings.colors.css diff --git a/docroot/themes/contrib/civictheme/theme-settings/civictheme.theme-settings.colors.js b/web/themes/contrib/civictheme/theme-settings/civictheme.theme-settings.colors.js similarity index 100% rename from docroot/themes/contrib/civictheme/theme-settings/civictheme.theme-settings.colors.js rename to web/themes/contrib/civictheme/theme-settings/civictheme.theme-settings.colors.js diff --git a/docroot/themes/contrib/civictheme/webpack/assets.js b/web/themes/contrib/civictheme/webpack/assets.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/assets.js rename to web/themes/contrib/civictheme/webpack/assets.js diff --git a/docroot/themes/contrib/civictheme/webpack/babel-plugin-drupal-behavior-wrapper.js b/web/themes/contrib/civictheme/webpack/babel-plugin-drupal-behavior-wrapper.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/babel-plugin-drupal-behavior-wrapper.js rename to web/themes/contrib/civictheme/webpack/babel-plugin-drupal-behavior-wrapper.js diff --git a/docroot/themes/contrib/civictheme/webpack/components_css.js b/web/themes/contrib/civictheme/webpack/components_css.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/components_css.js rename to web/themes/contrib/civictheme/webpack/components_css.js diff --git a/docroot/themes/contrib/civictheme/webpack/css_variables.js b/web/themes/contrib/civictheme/webpack/css_variables.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/css_variables.js rename to web/themes/contrib/civictheme/webpack/css_variables.js diff --git a/docroot/themes/contrib/civictheme/webpack/editor_css.js b/web/themes/contrib/civictheme/webpack/editor_css.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/editor_css.js rename to web/themes/contrib/civictheme/webpack/editor_css.js diff --git a/docroot/themes/contrib/civictheme/webpack/libraries.js b/web/themes/contrib/civictheme/webpack/libraries.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/libraries.js rename to web/themes/contrib/civictheme/webpack/libraries.js diff --git a/docroot/themes/contrib/civictheme/webpack/theme_css.js b/web/themes/contrib/civictheme/webpack/theme_css.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/theme_css.js rename to web/themes/contrib/civictheme/webpack/theme_css.js diff --git a/docroot/themes/contrib/civictheme/webpack/theme_js.js b/web/themes/contrib/civictheme/webpack/theme_js.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/theme_js.js rename to web/themes/contrib/civictheme/webpack/theme_js.js diff --git a/docroot/themes/contrib/civictheme/webpack/webpack.common.js b/web/themes/contrib/civictheme/webpack/webpack.common.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/webpack.common.js rename to web/themes/contrib/civictheme/webpack/webpack.common.js diff --git a/docroot/themes/contrib/civictheme/webpack/webpack.dev.js b/web/themes/contrib/civictheme/webpack/webpack.dev.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/webpack.dev.js rename to web/themes/contrib/civictheme/webpack/webpack.dev.js diff --git a/docroot/themes/contrib/civictheme/webpack/webpack.prod.js b/web/themes/contrib/civictheme/webpack/webpack.prod.js similarity index 100% rename from docroot/themes/contrib/civictheme/webpack/webpack.prod.js rename to web/themes/contrib/civictheme/webpack/webpack.prod.js diff --git a/docroot/update.php b/web/update.php similarity index 100% rename from docroot/update.php rename to web/update.php