This template builds the Australian government's GovCMS Drupal 10 distribution using the Drupal Composer project for better flexibility. It is pre-configured to use MariaDB and Redis for caching. The Drupal installer will skip asking for database credentials as they are already provided.
+
GovCMS is a Drupal distribution built for the Australian government, and includes configuration optimized for managing government websites.
+ class: starter
+ tags:
+ - PHP
+ - Drupal
+ - CMS
+ - Symfony
+ image: data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='199.37' height='225'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill:%232ba9e0%7D%3C/style%3E%3C/defs%3E%3Cg %3E%3Cg %3E%3Cpath class='cls-1' d='M93.78 139.31a35.5 35.5 0 1 0 35.5 35.5 35.51 35.51 0 0 0-35.5-35.5zM138 132.51a61.17 61.17 0 0 1-9.26 92.49c29.31-9 53.56-31.06 64.4-57.73 15-36.92 1-64.67-22.43-89.87a45.68 45.68 0 0 1 1.15 10.11 46.88 46.88 0 0 1-33.86 45zM97.82 87.57A27.19 27.19 0 1 0 125 60.43a27.16 27.16 0 0 0-27.18 27.14z'/%3E%3Cpath class='cls-1' d='M47 214.22a61.17 61.17 0 0 1 39.55-100.1 46.82 46.82 0 0 1 44.75-72.89C116 28 100.72 14.62 88.66 0c6.13 64.13-58.4 40.82-82.32 100C-9.62 139.58 4.79 188.56 47 214.22z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E
+ notes:
+ - heading: "Features"
+ content: |
+ PHP 8.3
+ MariaDB 10.11
+ Redis 7.2
+ Drush included
+ Automatic TLS certificates
+ Composer-based build
+
+initialize:
+ repository: https://github.com/platformsh-templates/drupal10-govcms10.git@master
+ config: null
+ files: []
+ profile: GovCMS 10
diff --git a/templates/drupal10-govcms10/files/.ahoy.yml b/templates/drupal10-govcms10/files/.ahoy.yml
new file mode 100644
index 000000000..afab32f28
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.ahoy.yml
@@ -0,0 +1,49 @@
+---
+ahoyapi: v2
+
+commands:
+ up:
+ usage: Build project.
+ cmd: |
+ docker compose up -d "$@"
+
+ down:
+ usage: Delete project.
+ cmd: docker compose down
+
+ build:
+ usage: Build project.
+ cmd: |
+ docker compose build "$@"
+
+ restart:
+ usage: Restart Docker containers.
+ cmd: docker compose restart
+
+ stop:
+ usage: Stop Docker containers.
+ cmd: docker compose stop "$@"
+
+ watch:
+ usage: Use Compose Watch for live development.
+ cmd: docker compose watch
+
+ cli:
+ usage: Start a shell.
+ cmd: docker compose exec govcms bash
+
+ composer:
+ usage: Start a composer command.
+ cmd: docker compose exec govcms composer "$@"
+
+ rector:
+ usage: Analyze your code with Rector and review suggested changes.
+ cmd: docker compose exec govcms rector "$@"
+
+ phpunit:
+ usage: Run PHPUnit tests.
+ cmd: docker compose exec govcms sudo -u root -E sudo -u www-data -E /app/bin/phpunit "$@"
+
+ drupal-check:
+ usage: Static analysis tool to check for correctness and deprecation errors.
+ cmd: docker compose exec govcms drupal-check "$@"
diff --git a/templates/drupal10-govcms10/files/.blackfire.yml b/templates/drupal10-govcms10/files/.blackfire.yml
new file mode 100644
index 000000000..2d3acb471
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.blackfire.yml
@@ -0,0 +1,81 @@
+tests:
+ 'The homepage should be fast':
+ path:
+ - '/'
+ assertions:
+ - 'main.wall_time <= 250ms'
+ 'Some Composer dependencies have known security issues and should be upgraded':
+ path:
+ - '/.*'
+ assertions:
+ - { expression: 'not has_vulnerable_dependencies()' }
+ '"assert.active" is a dev_only feature and should be disabled in production':
+ path:
+ - '/.*'
+ assertions:
+ - { expression: 'runtime.configuration.assert_active === false' }
+ '"display_errors" should be disabled':
+ path:
+ - '/.*'
+ assertions:
+ - { expression: 'not is_configuration_enabled("display_errors")' }
+ '"display_startup_errors" should not be enabled':
+ path:
+ - '/.*'
+ assertions:
+ - { expression: 'not is_configuration_enabled("display_startup_errors")' }
+ '"max_execution_time" should be less than 30 seconds for Web requests':
+ path:
+ - '/.*'
+ assertions:
+ - { expression: 'runtime.configuration.max_execution_time <= 30' }
+ '"session.use_strict_mode" should be enabled':
+ path:
+ - '/.*'
+ assertions:
+ - { expression: 'runtime.configuration.session_use_strict_mode === true' }
+ '"zend.detect_unicode" should be disabled as BOMs are not portable':
+ path:
+ - '/.*'
+ assertions:
+ - { expression: 'runtime.configuration.zend_detect_unicode === false' }
+ 'The realpath cache ttl should be more than one hour in production':
+ path:
+ - '/.*'
+ assertions:
+ - { expression: 'runtime.configuration.realpath_cache_ttl >= 3600' }
+ 'The session garbage collector should be disabled in production':
+ path:
+ - '/.*'
+ assertions:
+ - { expression: 'runtime.configuration.session_gc_probability === 0' }
+
+scenarios: |
+ #!blackfire-player
+
+ name "Drupal Scenarios"
+
+ group homepages
+ visit url("/")
+ name "Homepage (English)"
+ expect status_code() == 200
+ visit url("/es")
+ name "Homepage (Español)"
+ expect status_code() == 200
+
+ group articles
+ visit url("/en/articles")
+ name "Articles"
+ expect status_code() == 200
+
+ group admin_anonymous
+ visit url("/en/admin/content")
+ expect status_code() == 403
+ visit url("/en/admin/structure")
+ expect status_code() == 403
+
+ scenario
+ name "Anonymous Visit"
+ include homepages
+ include articles
+ include admin_anonymous
diff --git a/templates/drupal10-govcms10/files/.docker/Dockerfile.govcms b/templates/drupal10-govcms10/files/.docker/Dockerfile.govcms
new file mode 100644
index 000000000..ffcf4866a
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.docker/Dockerfile.govcms
@@ -0,0 +1,63 @@
+# Stage 1: Build the application
+FROM drupal:10-php8.1 as builder
+
+# Set timezone to Australia/Sydney by default
+RUN ln -sf /usr/share/zoneinfo/Australia/Sydney /etc/localtime
+
+# Install required packages and PHP extensions
+RUN \
+ --mount=type=cache,target=/var/cache/apt \
+ apt-get update && \
+ apt-get install -y --no-install-recommends libicu-dev sqlite3 mariadb-client git unzip rsync sudo && \
+ apt-get clean && \
+ rm -rf /var/lib/apt/lists/* && \
+ docker-php-ext-configure intl && \
+ docker-php-ext-install intl
+
+# Configure PHP settings
+RUN echo "memory_limit = 512M" >> /usr/local/etc/php/conf.d/docker-php-ram-limit.ini && \
+ echo "upload_max_filesize = 100M" >> /usr/local/etc/php/conf.d/docker-php-upload-limit.ini && \
+ echo "post_max_size = 100M" >> /usr/local/etc/php/conf.d/docker-php-upload-limit.ini
+
+# Set Composer environment variables
+ENV COMPOSER_ALLOW_SUPERUSER=1
+ENV COMPOSER_MEMORY_LIMIT=-1
+ENV SIMPLETEST_BASE_URL="http://govcms"
+ENV SIMPLETEST_DB='mysql://drupal:drupal@mariadb/drupal'
+
+# Set working directory
+WORKDIR /app
+
+# Copy only the necessary files for dependency installation
+COPY composer.json ./
+
+# Install Composer dependencies
+RUN \
+ --mount=type=cache,mode=0777,target=/root/.composer/cache \
+ composer require palantirnet/drupal-rector mglaman/drupal-check --dev --no-update && \
+ composer update --no-scripts --no-autoloader && \
+ cp vendor/palantirnet/drupal-rector/rector.php .
+
+# Create a symbolic link
+RUN rm -rf /opt/drupal && \
+ ln -sf /app/web /var/www/html
+
+# Stage 2: Final application image
+FROM builder as site
+
+# Set the working directory
+WORKDIR /app
+
+# Copy the rest of the application files
+COPY . /app/
+
+# Configure Composer
+RUN \
+ --mount=type=cache,mode=0777,target=/root/.composer/cache \
+ composer install
+
+# Adjust ownership
+RUN chown -R www-data:www-data web/sites web/modules web/themes
+
+# Set the PATH environment variable
+ENV PATH=${PATH}:/app/bin
diff --git a/templates/drupal10-govcms10/files/.dockerignore b/templates/drupal10-govcms10/files/.dockerignore
new file mode 100644
index 000000000..3be8af9de
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.dockerignore
@@ -0,0 +1,29 @@
+.ahoy.yml
+.circleci
+.docker
+.dockerignore
+.DS_Store
+.editorconfig
+.env
+.git
+.gitattributes
+.github
+.gitignore
+.idea
+.tugboat
+DEVELOPMENT.md
+CHANGELOG.txt
+CONTRIBUTING.md
+LICENSE.txt
+README.md
+SECURITY.md
+VERSIONS.md
+app
+bin
+build
+composer.lock
+docker-compose.yml
+sites
+tests
+vendor
+web
diff --git a/templates/drupal10-govcms10/files/.environment b/templates/drupal10-govcms10/files/.environment
new file mode 100644
index 000000000..945924fd7
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.environment
@@ -0,0 +1,11 @@
+# Statements in this file will be executed (sourced) by the shell in SSH
+# sessions, in deploy hooks, in cron jobs, and in the application's runtime
+# environment. This file must be placed in the root of the application, not
+# necessarily the git repository's root. In case of multiple applications,
+# each application can have its own .environment file.
+
+# Allow executable app dependencies from Composer to be run from the path.
+if [ -n "$PLATFORM_APP_DIR" -a -f "$PLATFORM_APP_DIR"/composer.json ] ; then
+ bin=$(composer config bin-dir --working-dir="$PLATFORM_APP_DIR" --no-interaction 2>/dev/null)
+ export PATH="${PLATFORM_APP_DIR}/${bin:-vendor/bin}:${PATH}"
+fi
\ No newline at end of file
diff --git a/templates/drupal10-govcms10/files/.github/ISSUE_TEMPLATE/bug_report.yaml b/templates/drupal10-govcms10/files/.github/ISSUE_TEMPLATE/bug_report.yaml
new file mode 100644
index 000000000..604f31cd2
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.github/ISSUE_TEMPLATE/bug_report.yaml
@@ -0,0 +1,72 @@
+name: Bug report
+description: If you've found a problem with the template, let us know so that we can update it for everyone.
+labels:
+ - 'bug'
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for your interest in helping improve the Platform.sh templates!
+ Please fill in the fields below so we can understand what's going wrong.
+
+ - type: textarea
+ attributes:
+ label: Describe the bug
+ description: A clear and concise description of what the bug is.
+ placeholder: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eleifend diam non condimentum tincidunt. Vestibulum convallis eget ante dapibus eleifend.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Include some logs
+ description: Any logs you can include will help us investigate the issue.
+ placeholder: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eleifend diam non condimentum tincidunt. Vestibulum convallis eget ante dapibus eleifend.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Reproducing
+ description: Help us reproduce what you're seeing.
+ placeholder: |
+ Steps to reproduce the behavior:
+ 1. Go to '...'
+ 2. Click on '....'
+ 3. Scroll down to '....'
+ 4. See error
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Expected behavior
+ description: A clear and concise description of what you expected to happen.
+ placeholder: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eleifend diam non condimentum tincidunt. Vestibulum convallis eget ante dapibus eleifend.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Your environment
+ description: Give us as many details as you can about your environment, whether that's on Platform.sh (your configuration YAMLs), or locally (your OS, services, and local development tool).
+ placeholder: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eleifend diam non condimentum tincidunt. Vestibulum convallis eget ante dapibus eleifend.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Screenshots
+ description: If applicable, add screenshots to help explain your problem.
+ placeholder: A picture's worth a thousand words...
+ validations:
+ required: false
+
+ - type: textarea
+ attributes:
+ label: Additional context
+ description: Optionally add any other information or screenshots that could help us understand and implement the change.
+ placeholder: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum eleifend diam non condimentum tincidunt. Vestibulum convallis eget ante dapibus eleifend.
+ validations:
+ required: false
+
\ No newline at end of file
diff --git a/templates/drupal10-govcms10/files/.github/ISSUE_TEMPLATE/config.yaml b/templates/drupal10-govcms10/files/.github/ISSUE_TEMPLATE/config.yaml
new file mode 100644
index 000000000..6391f6f4d
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.github/ISSUE_TEMPLATE/config.yaml
@@ -0,0 +1,8 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Community Support
+ url: https://community.platform.sh/
+ about: Please ask and answer questions here.
+ - name: Join us on Slack
+ url: https://chat.platform.sh/
+ about: Ping the `@devrel_team`!
diff --git a/templates/drupal10-govcms10/files/.github/ISSUE_TEMPLATE/improvements.yaml b/templates/drupal10-govcms10/files/.github/ISSUE_TEMPLATE/improvements.yaml
new file mode 100644
index 000000000..0ba3aa5cd
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.github/ISSUE_TEMPLATE/improvements.yaml
@@ -0,0 +1,41 @@
+name: Feature request
+description: For changes to improve this template.
+labels:
+ - 'feature request'
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for your interest in helping improve the Platform.sh templates!
+ Please fill in the fields below so we can understand what changes you'd like to see.
+
+ - type: textarea
+ attributes:
+ label: What in this template can be improved or added as a feature?
+ description: Is your feature request related to a problem? Please describe.
+ placeholder: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: What exactly should be updated?
+ description: |
+ - Share as much detail as you can to help us understand the suggestion.
+ - What do you expect as an outcome?
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: How important is this feature to you?
+ description: Does this template lacking this feature block your work?
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Additional context
+ description: Optionally add any other information or screenshots that could help us understand and implement the change.
+ validations:
+ required: false
diff --git a/templates/drupal10-govcms10/files/.github/PULL_REQUEST_TEMPLATE.md b/templates/drupal10-govcms10/files/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 000000000..b41bea1c8
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,34 @@
+## Description
+Please describe your changes in detail according to the information below
+
+## Related Issue
+This project only accepts pull requests related to open issues.
+- If suggesting a new feature or change, please discuss it in an issue first
+- If fixing a bug, there should be an issue describing it with steps to reproduce it following the bug report guide
+- If you're suggesting a feature, please follow the feature request guide by clicking on issues
+
+### Please drop a link to the issue here:
+
+## Motivation and Context
+Why is this change required? What problem does it solve?
+
+## How Has This Been Tested?
+Please describe in detail how you tested your changes. Include details of your testing environment, and the tests you ran to see how your change affects other areas of the code, etc.
+
+## Screenshots (if appropriate):
+
+## Types of changes
+What types of changes does your code introduce? Put an `x` in all the boxes that apply:
+
+- [ ] Bug fix (non-breaking change which fixes an issue)
+- [ ] New feature (non-breaking change which adds functionality)
+- [ ] Breaking change (fix or feature that would cause existing functionality to change)
+
+## Checklist:
+ Go over all the following list, and put an `x` in all the boxes that apply. If you're unsure about what any of these mean, don't hesitate to ask. We're here to help!
+
+- [ ] I have read the contribution guide
+- [ ] I have created an issue following the issue guide
+- [ ] My code follows the code style of this project.
+- [ ] My change requires a change to the documentation.
+- [ ] I have updated the documentation accordingly.
diff --git a/templates/drupal10-govcms10/files/.github/tests/vrt/template-paths.js b/templates/drupal10-govcms10/files/.github/tests/vrt/template-paths.js
new file mode 100644
index 000000000..18c2ac70a
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.github/tests/vrt/template-paths.js
@@ -0,0 +1,42 @@
+/**
+ * This is the default scenarios collection that will be used if there is not a theme-specific scenarios file in place
+ * for a given theme. You can copy this file and then name it `theme-paths.js`.
+ *
+ */
+
+/**
+ * Stores the scenarios for each page/endpoint that should be tested
+ * @type {{}}
+ */
+var scenarioPaths = {};
+
+/**
+ * For each page/endpoint you want to test, create a new array entry that contains at least the keys/properties `label`
+ * and `path`.
+ *
+ * additional properties you can set for each scenario are documented here: https://github.com/garris/BackstopJS#advanced-scenarios
+ *
+ * However, do NOT set `referenceUrl` or `url` as those will be overridden
+ *
+ * `path` should assume the URL ends in a trailing slash. For example, if the page you want to test against is
+ * https://master-7rqtwti-fqfjrmtjbjta4.eu-3.platformsh.site/a/path/to/foo/bar/
+ * Then for `path` it should be "a/path/to/foo/bar/"
+ *
+ * @type {{path: string, label: string}[]}
+ */
+scenarioPaths.paths = [
+ {
+ "label":"Events",
+ "path": "events/"
+ },
+ {
+ "label": "Blog",
+ "path": "blog/"
+ },
+ {
+ "label": "FOI Requests",
+ "path": "freedom-of-information/"
+ }
+];
+
+module.exports = scenarioPaths;
diff --git a/templates/drupal10-govcms10/files/.github/workflows/autopr.yaml b/templates/drupal10-govcms10/files/.github/workflows/autopr.yaml
new file mode 100644
index 000000000..2dcd1f057
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.github/workflows/autopr.yaml
@@ -0,0 +1,29 @@
+name: Trigger Auto PR on push to update branch
+on:
+ push:
+ branches:
+ - update
+ workflow_dispatch:
+
+env:
+ PLATFORMSH_CLI_TOKEN: ${{ secrets.TEMPLATES_CLI_TOKEN }}
+
+jobs:
+ create-auto-pr:
+ name: "Creates an auto merging PR when the branch is updated"
+ runs-on: ubuntu-latest
+ if: ${{ github.repository_owner == 'platformsh-templates' }}
+ steps:
+ - name: 'Prep the repo for autoPR'
+ id: prepautopr
+ uses: platformsh/gha-prep-for-autopr@main
+ with:
+ github-token: ${{ secrets.TEMPLATES_GITHUB_TOKEN }}
+
+ - name: 'Create & merge PR'
+ id: create-merge-pr
+ uses: platformsh/gha-create-autopr@main
+ with:
+ github-token: ${{ secrets.TEMPLATES_GITHUB_TOKEN }}
+ trigger-source: 'auto push'
+ default-branch: ${{ steps.prepautopr.outputs.default-branch }}
diff --git a/templates/drupal10-govcms10/files/.github/workflows/last-updated.yaml b/templates/drupal10-govcms10/files/.github/workflows/last-updated.yaml
new file mode 100644
index 000000000..dfcba84c4
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.github/workflows/last-updated.yaml
@@ -0,0 +1,66 @@
+name: Update last.updated
+on:
+ push:
+ branches:
+ - main
+ - master
+
+env:
+ DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
+ GH_TOKEN: ${{ secrets.TEMPLATES_GITHUB_TOKEN }}
+
+jobs:
+ update-last-updated-file:
+ name: "Updates the last.updated file with the current date"
+ runs-on: ubuntu-latest
+ if: ${{ github.repository_owner == 'platformsh-templates' && github.event.commits[0].author.name != 'GitHub Action' }}
+ steps:
+ - name: 'get repo'
+ id: get-repo
+ uses: actions/checkout@v3
+ with:
+ token: ${{secrets.TEMPLATES_GITHUB_TOKEN }}
+
+ - name: 'set git config'
+ shell: bash
+ run: |
+ git config --global user.email "action@github.com"
+ git config --global user.name "GitHub Action"
+
+ - name: 'check for enforce admins'
+ id: 'check-for-enforce'
+ shell: bash
+ run: |
+ enforceAdmins=$(gh api "/repos/${GITHUB_REPOSITORY}/branches/${DEFAULT_BRANCH}/protection/enforce_admins" --jq '.enabled')
+ echo "::notice is enforce admins enabled? ${enforceAdmins}"
+ echo "enforce_admin=${enforceAdmins}" >> $GITHUB_OUTPUT
+
+ - name: 'disable enforce admins'
+ id: 'disable-force-admins'
+ if: ${{ 'true' == steps.check-for-enforce.outputs.enforce_admin }}
+ shell: bash
+ run: |
+ echo "::notice::Enforce Admins is enabled. Temporarily disabling..."
+ gh api --method DELETE "/repos/${GITHUB_REPOSITORY}/branches/${DEFAULT_BRANCH}/protection/enforce_admins" --silent \
+ && echo "::notice::Enforce admins disabled" \
+ || echo "::error::Disabling enforce admin failed"
+
+ - name: 'update last.updated'
+ id: last-updated
+ shell: bash
+ run: |
+ date > ./.platform/last.updated
+ git add ./.platform/last.updated
+ git commit -m "auto-updates version, post merge"
+ git push origin "${DEFAULT_BRANCH}"
+
+ - name: "Re-enable enforce admins"
+ id: re-enable-enforce-admin
+ if: ${{ 'true' == steps.check-for-enforce.outputs.enforce_admin }}
+ shell: bash
+ run: |
+ gh api --method POST \
+ -H "Accept: application/vnd.github+json" \
+ "/repos/${GITHUB_REPOSITORY}/branches/${DEFAULT_BRANCH}/protection/enforce_admins" --silent \
+ && echo "::notice::Successfully re-enabled enforce admin" \
+ || echo "::error::Re-enabling enforce admins failed."
diff --git a/templates/drupal10-govcms10/files/.github/workflows/sourceops.yaml b/templates/drupal10-govcms10/files/.github/workflows/sourceops.yaml
new file mode 100644
index 000000000..8cac0b30b
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.github/workflows/sourceops.yaml
@@ -0,0 +1,23 @@
+name: Trigger Source Operations on a Schedule
+on:
+ schedule:
+ # Run at 00:15 every day
+ - cron: '15 */19 * * *'
+ workflow_dispatch:
+
+env:
+ PLATFORMSH_CLI_TOKEN: ${{ secrets.TEMPLATES_CLI_TOKEN }}
+ GITHUB_TOKEN: ${{ secrets.TEMPLATES_GITHUB_TOKEN }}
+
+jobs:
+ run_dm_update:
+ name: Trigger Source Op
+ runs-on: ubuntu-latest
+ if: ${{ github.repository_owner == 'platformsh-templates' }}
+ steps:
+ - name: 'Run source ops'
+ id: run-source-op
+ uses: platformsh/gha-run-sourceops-update@main
+ with:
+ github_token: ${{ secrets.TEMPLATES_GITHUB_TOKEN }}
+ platformsh_token: ${{ secrets.TEMPLATES_CLI_TOKEN }}
diff --git a/templates/drupal10-govcms10/files/.github/workflows/testprenvironment.yaml b/templates/drupal10-govcms10/files/.github/workflows/testprenvironment.yaml
new file mode 100644
index 000000000..b50e2449c
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.github/workflows/testprenvironment.yaml
@@ -0,0 +1,26 @@
+name: "TestPrEnvironment"
+on:
+ workflow_run:
+ workflows: [ "platformsh" ]
+ types:
+ - completed
+ pull_request:
+ branches:
+ - master
+ - main
+env:
+ BASELINE_URL: ${{ vars.BASELINE_URL }}
+ GITHUB_TOKEN: ${{ secrets.TEMPLATES_GITHUB_TOKEN }}
+jobs:
+ test-pr-env:
+ name: TestPrEnvironment
+ runs-on: ubuntu-latest
+ if: ${{ github.repository_owner == 'platformsh-templates' }}
+ steps:
+ - name: 'Run Pull Request Tests'
+ id: get-target-url
+ uses: platformsh/gha-template-pr-tests@main
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ baseline-url: ${{ vars.BASELINE_URL }}
+ delay-start: 5
diff --git a/templates/drupal10-govcms10/files/.github/workflows/workflow-fail-log.yaml b/templates/drupal10-govcms10/files/.github/workflows/workflow-fail-log.yaml
new file mode 100644
index 000000000..0c295f59b
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.github/workflows/workflow-fail-log.yaml
@@ -0,0 +1,42 @@
+########################################################################################################################
+## ##
+## This github workflow file is part of the Platform.sh process of updating and maintaining our collection of ##
+## templates. For more information see https://github.com/platformsh-templates/ghrw-templates ##
+## and https://github.com/search?q=topic%3Agithub-action+org%3Aplatformsh ##
+## ##
+## YOU CAN SAFELY DELETE THIS FILE ##
+## ##
+########################################################################################################################
+on:
+ workflow_run:
+ workflows: [Trigger Source Operations on a Schedule, Trigger Auto PR on push to update branch, Run Post PR Acceptance jobs]
+ types: [completed]
+
+jobs:
+ on-failure:
+ runs-on: ubuntu-latest
+ if: |
+ github.event.workflow_run.conclusion == 'failure'
+ && github.event.workflow.name != 'TestPrEnv-CW / TestPrEnvironment'
+ && github.repository_owner == 'platformsh-templates'
+ && github.event.commits[0].author.name != 'GitHub Action'
+ steps:
+ - name: Record failed workflow
+ shell: bash
+ run: |
+ echo 'The triggering workflow failed'
+ echo "::notice::The workflow ${{ github.event.workflow.name }} failed."
+ - name: 'Add env vars'
+ shell: bash
+ run: |
+ echo "GH_TOKEN=${{ secrets.TEMPLATES_GITHUB_TOKEN }}" >> $GITHUB_ENV
+ - name: 'Check and record API limits'
+ shell: bash
+ run: |
+ userName=$(gh api user | jq -r '.login')
+ currentRateLimit=$(gh api /users/platformsh/orgs -i | grep X-Ratelimit)
+ echo "::notice::The API user ${userName} has the following X-Ratelimit values:"
+ echo "::group::X-RateLimits for ${userName}"
+ echo "${currentRateLimit}"
+ echo "::endgroup::"
+
diff --git a/templates/drupal10-govcms10/files/.gitignore b/templates/drupal10-govcms10/files/.gitignore
new file mode 100644
index 000000000..e01fe27e4
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.gitignore
@@ -0,0 +1,47 @@
+# Ignore GovCMS build files.
+.docker/auth.json
+build.properties
+tests/screenshots/*
+
+# Fixtures added
+tests/cy/cypress/fixtures/currentComposer.json
+
+# Ignore build artifacts
+/deploy
+bin/*
+reports
+
+# Ignore directories generated by Composer
+/drush/contrib/
+/vendor/
+/web/core/
+/web/modules/contrib/
+/web/themes/contrib/
+/web/profiles/contrib/
+/web/libraries/
+console/
+
+# Ignore sensitive information
+/web/sites/*/settings.local.php
+
+# Ignore Drupal's file directory
+/web/sites/*/files/
+
+# Ignore SimpleTest multi-site environment.
+/web/sites/simpletest
+
+# Ignore files generated by PhpStorm
+/.idea/
+
+# Ignore .env files as they are personal
+/.env
+
+# Ignore mounts
+web/sites/default/files
+tmp
+private
+.drush
+drush-backups
+.console
+/.editorconfig
+/.gitattributes
diff --git a/templates/drupal10-govcms10/files/.platform.app.yaml b/templates/drupal10-govcms10/files/.platform.app.yaml
new file mode 100644
index 000000000..4d40306c7
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.platform.app.yaml
@@ -0,0 +1,147 @@
+# This file describes an application. You can have multiple applications
+# in the same project.
+#
+# See https://docs.platform.sh/configuration/app.html
+
+# The name of this app. Must be unique within a project.
+name: 'drupal'
+
+# The runtime the application uses.
+type: 'php:8.3'
+
+dependencies:
+ php:
+ composer/composer: '^2.1'
+
+runtime:
+ # Enable the redis extension so Drupal can communicate with the Redis cache.
+ extensions:
+ - redis
+ - sodium
+ - apcu
+ - blackfire
+
+# The relationships of the application with services or other applications.
+#
+# The left-hand side is the name of the relationship as it will be exposed
+# to the application in the PLATFORM_RELATIONSHIPS variable. The right-hand
+# side is in the form `:`.
+relationships:
+ database: 'db:mysql'
+ redis: 'cache:redis'
+
+# The size of the persistent disk of the application (in MB).
+disk: 2048
+
+# The 'mounts' describe writable, persistent filesystem mounts in the application.
+mounts:
+ # The default Drupal files directory.
+ '/web/sites/default/files':
+ source: local
+ source_path: 'files'
+ # Drupal gets its own dedicated tmp directory. The settings.platformsh.php
+ # file will automatically configure Drupal to use this directory.
+ '/tmp':
+ source: local
+ source_path: 'tmp'
+ # Private file uploads are stored outside the web root. The settings.platformsh.php
+ # file will automatically configure Drupal to use this directory.
+ '/private':
+ source: local
+ source_path: 'private'
+ # Drush needs a scratch space for its own caches.
+ '/.drush':
+ source: local
+ source_path: 'drush'
+ # Drush will try to save backups to this directory, so it must be
+ # writeable even though you will almost never need to use it.
+ '/drush-backups':
+ source: local
+ source_path: 'drush-backups'
+
+# Configuration of the build of this application.
+build:
+ flavor: composer
+
+# The hooks executed at various points in the lifecycle of the application.
+hooks:
+ # The build hook runs after Composer to finish preparing up your code.
+ # No services are available but the disk is writeable.
+ build: |
+ set -e
+ # The deploy hook runs after your application has been deployed and started.
+ # Code cannot be modified at this point but the database is available.
+ # The site is not accepting requests while this script runs so keep it
+ # fast.
+ deploy: |
+ set -e
+ php ./drush/platformsh_generate_drush_yml.php
+ # if drupal is installed, will call the following drush commands:
+ # - `cache-rebuild`
+ # - `updatedb`
+ # - and if config files are present, `config-import`
+ cd web
+ bash $PLATFORM_APP_DIR/drush/platformsh_deploy_drupal.sh
+
+# The configuration of app when it is exposed to the web.
+web:
+ locations:
+ # All requests not otherwise specified follow these rules.
+ '/':
+ # The folder from which to serve static assets, for this location.
+ #
+ # This is a filesystem path, relative to the application root.
+ root: 'web'
+
+ # How long to allow static assets from this location to be cached.
+ #
+ # Can be a time in seconds, or -1 for no caching. Times can be
+ # suffixed with "s" (seconds), "m" (minutes), "h" (hours), "d"
+ # (days), "w" (weeks), "M" (months, as 30 days) or "y" (years, as
+ # 365 days).
+ expires: 5m
+
+ # Redirect any incoming request to Drupal's front controller.
+ passthru: '/index.php'
+
+ # Deny access to all static files, except those specifically allowed below.
+ allow: false
+
+ # Rules for specific URI patterns.
+ rules:
+ # Allow access to common static files.
+ '\.(jpe?g|png|gif|svgz?|css|js|map|ico|bmp|eot|woff2?|otf|ttf)$':
+ allow: true
+ '^/robots\.txt$':
+ allow: true
+ '^/sitemap\.xml$':
+ allow: true
+
+ # Deny direct access to configuration files.
+ '^/sites/sites\.php$':
+ scripts: false
+ '^/sites/[^/]+/settings.*?\.php$':
+ scripts: false
+
+ # The files directory has its own special configuration rules.
+ '/sites/default/files':
+ # Allow access to all files in the public files directory.
+ allow: true
+ expires: 5m
+ passthru: '/index.php'
+ root: 'web/sites/default/files'
+
+ # Do not execute PHP scripts from the writeable mount.
+ scripts: false
+
+ rules:
+ # Provide a longer TTL (2 weeks) for aggregated CSS and JS files.
+ '^/sites/default/files/(css|js)':
+ expires: 2w
+
+crons:
+ # Run Drupal's cron tasks every 19 minutes.
+ drupal:
+ spec: '*/19 * * * *'
+ commands:
+ start: 'cd web ; drush core-cron'
diff --git a/templates/drupal10-govcms10/files/.platform/local/.gitignore b/templates/drupal10-govcms10/files/.platform/local/.gitignore
new file mode 100644
index 000000000..b498fd495
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.platform/local/.gitignore
@@ -0,0 +1 @@
+/
diff --git a/templates/drupal10-govcms10/files/.platform/local/README.txt b/templates/drupal10-govcms10/files/.platform/local/README.txt
new file mode 100644
index 000000000..f360b8495
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.platform/local/README.txt
@@ -0,0 +1,8 @@
+.platform/local
+===============
+
+This directory is where the Platform.sh CLI stores configuration files, builds, and
+other data to help work with your project locally.
+
+It is not used on remote environments at all - the directory is excluded from
+your Git repository (via .git/info/exclude).
diff --git a/templates/drupal10-govcms10/files/.platform/local/project.yaml b/templates/drupal10-govcms10/files/.platform/local/project.yaml
new file mode 100644
index 000000000..22c326cbc
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.platform/local/project.yaml
@@ -0,0 +1,2 @@
+id: uum66omflk5rc
+host: api.platform.sh
diff --git a/templates/drupal10-govcms10/files/.platform/routes.yaml b/templates/drupal10-govcms10/files/.platform/routes.yaml
new file mode 100644
index 000000000..69ba2fcd0
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.platform/routes.yaml
@@ -0,0 +1,17 @@
+# The routes of the project.
+#
+# Each route describes how an incoming URL is going
+# to be processed by Platform.sh.
+
+"https://{default}/":
+ type: upstream
+ upstream: "drupal:http"
+ cache:
+ enabled: true
+
+ # Base the cache on the session cookie and custom Drupal cookies. Ignore all other cookies.
+ cookies: ['/^SS?ESS/', '/^Drupal.visitor/']
+
+"https://www.{default}/":
+ type: redirect
+ to: "https://{default}/"
diff --git a/templates/drupal10-govcms10/files/.platform/services.yaml b/templates/drupal10-govcms10/files/.platform/services.yaml
new file mode 100644
index 000000000..fa5d65c40
--- /dev/null
+++ b/templates/drupal10-govcms10/files/.platform/services.yaml
@@ -0,0 +1,11 @@
+# The services of the project.
+#
+# Each service listed will be deployed
+# to power your Platform.sh project.
+
+db:
+ type: mariadb:10.11
+ disk: 2048
+
+cache:
+ type: redis:7.2
diff --git a/templates/drupal10-govcms10/files/DEVELOPMENT.md b/templates/drupal10-govcms10/files/DEVELOPMENT.md
new file mode 100644
index 000000000..b9e8992e0
--- /dev/null
+++ b/templates/drupal10-govcms10/files/DEVELOPMENT.md
@@ -0,0 +1,88 @@
+# GovCMS Development Guide
+
+This guide is intended for developers who want to set up a local development environment for the GovCMS project on
+GitHub. The following instructions will guide you through the process of setting up a local environment, including
+installing and configuring necessary software and dependencies.
+
+## Prerequisites
+
+Before you can start setting up your local development environment for GovCMS, you must have the following software
+installed on your machine:
+
+- Git
+- Composer
+- Docker (Optional)
+- Docker Compose (Optional)
+
+If you do not have any of these software installed, please follow the instructions provided by the software provider to
+install them.
+
+## Setup
+
+- Via Composer
+- Via Docker Compose
+
+Follow the below steps to set up your local development environment for GovCMS:
+
+### Via Composer
+
+1. Clone the GovCMS project from GitHub by running the following command:
+
+ ```console
+ git clone -b 3.x-develop git@github.com:GovCMS/GovCMS.git
+ ```
+
+2. Navigate to the cloned project directory:
+
+ ```console
+ cd govcms
+ ```
+
+3. Install project dependencies using Composer:
+
+ ```console
+ composer update
+ ```
+
+### Via Docker Compose
+
+1. Clone the GovCMS project from GitHub by running the following command:
+
+ ```console
+ git clone -b 3.x-develop git@github.com:GovCMS/GovCMS.git
+ ```
+
+2. Navigate to the cloned project directory:
+
+ ```console
+ cd govcms
+ ```
+
+3. Start the Docker containers by running the following command:
+
+ ```console
+ cd govcms
+ docker compose up -d
+ ```
+
+4. The website should now be running at http://localhost:8888. You can access the website by opening this URL in your
+ browser.
+
+## Running Tests
+
+TBD
+
+## Contributing
+
+We welcome contributions from the community. To contribute, please follow the below steps:
+
+1. Fork the GovCMS project repository from GitHub.
+2. Clone your forked repository to your local machine.
+3. Create a new branch for your feature or bug fix.
+4. Make your changes and commit them to your local branch.
+5. Push your changes to your forked repository on GitHub.
+6. Submit a pull request to the main GovCMS repository.
+
+## Conclusion
+
+That's it! You now have a fully-functional local development environment for the GovCMS project. Happy coding!
diff --git a/templates/drupal10-govcms10/files/LICENSE.txt b/templates/drupal10-govcms10/files/LICENSE.txt
new file mode 100644
index 000000000..d159169d1
--- /dev/null
+++ b/templates/drupal10-govcms10/files/LICENSE.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/templates/drupal10-govcms10/files/README-govcms.md b/templates/drupal10-govcms10/files/README-govcms.md
new file mode 100644
index 000000000..a7c6f84b5
--- /dev/null
+++ b/templates/drupal10-govcms10/files/README-govcms.md
@@ -0,0 +1,70 @@
+# GovCMS
+
+GovCMS is an open-source Drupal distribution developed specifically for Australian government agencies. It is built on
+top of the Drupal content management system, providing a range of features and functionalities that are tailored to the
+unique needs of government websites.
+
+## Features
+
+Key features of GovCMS include:
+
+- Accessibility compliance: GovCMS is designed to comply with the Web Content Accessibility Guidelines (WCAG) 2.1 Level
+ AA, making it easier for government agencies to ensure that their websites are accessible to all users.
+- Content moderation: GovCMS includes a range of content moderation workflows, making it easy for government agencies to
+ manage content and ensure that only approved content is published on their websites.
+- Security: GovCMS is built with security in mind, with regular security updates and patches provided by the Drupal and
+ GovCMS Ops team.
+
+## Community
+
+GovCMS Slack channel:
+
+https://govcmschat.slack.com/archives/C01BD9B3V5W
+
+## Getting started
+
+To get started with GovCMS, you need to have the following prerequisites:
+
+- A web server like Apache or Nginx
+- PHP version 8.1 or above
+- MySQL or PostgresSQL database
+
+More documents can be found in:
+
+- [DEVELOPMENT.md](DEVELOPMENT.md)
+- [SECURITY.md](SECURITY.md)
+- [VERSIONS.md](VERSIONS.md)
+
+## Troubleshooting and Contributing
+
+If you're encountering some
+oddities, [here's a list of resolutions](https://github.com/GovCMS/GovCMS/wiki/Troubleshooting) to some of the problems
+you may be experiencing.
+
+### Contributing to GovCMS
+
+All contributions to GovCMS are welcome. Issues and pull requests may be submitted against the relevant GovCMS project
+on github where they will be addressed by the GovCMS team.
+
+### Patching GovCMS
+
+Because GovCMS is a [Drupal distribution](https://www.drupal.org/documentation/build/distributions), modules and
+configurations are not added directly to the codebase. Rather, they are referenced within the composer.json file.
+
+Any alterations to Drupal core or contributed modules must have an associated [drupal.org](https://www.drupal.org) issue
+filed against the project in question. Modifications should be made directly to the project in question and patched into
+GovCMS rather than made directly against GovCMS.
+
+It is a requirement for any patches to GovCMS to pass all automated testing prior to manual review. The automated
+testing checks for PHP syntax, coding standards, build completion and runs behavioural tests. It is also desirable that
+additions to the codebase add behat tests to ensure no regressions occur once committed.
+
+To submit a patch, the GovCMS project should be forked and changes applied to a branch on the forked repository. Once
+all changes are applied, a pull request between GovCMS and the branch of the fork may be created.
+
+## License
+
+GovCMS is released under the GNU General Public License v2.0. See the LICENSE file in the root of the repository for
+more information.
+
+**[Back to top](#govcms)**
diff --git a/templates/drupal10-govcms10/files/README-platformsh.md b/templates/drupal10-govcms10/files/README-platformsh.md
new file mode 100644
index 000000000..a2b061bc6
--- /dev/null
+++ b/templates/drupal10-govcms10/files/README-platformsh.md
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+## About Drupal 10 on Platform.sh
+
+This template builds Drupal using the "GovCMS" distribution install profile.
+It is pre-configured to use MariaDB and Redis for caching.
+The Drupal installer will skip asking for database credentials as they are already provided.
+
+> You should choose the "GovCMS" install profile when prompted to by the install wizard during initial setup.
+
+### Features
+
+- PHP 8.3
+- MariaDB 10.11
+- Redis 7.2
+- Drush included
+- Automatic TLS certificates
+- Composer-based build
+
+Please see [`platformsh-templates/drupal10:README.md`](https://github.com/platformsh-templates/drupal10/blob/master/README.md) for a full introduction to getting started and using the Platform.sh system, including:
+
+* Deployment
+* Local Development
+* Migration
+* Troubleshooting
+
+## About GovCMS
+
+[GovCMS](https://www.govcms.gov.au) is an open source web content management and hosting service, based on Drupal and developed to help agencies create modern, affordable and responsive websites, whilst making it easier to collaborate and innovate. GovCMS also helps reduce the technology and compliance burden on government agencies. GovCMS is managed by the Australian Government Department of Finance.
+
+GovCMS Slack channel: https://govcmschat.slack.com/archives/C01BD9B3V5W
+
+Please see [`govCMS/GovCMS:README.md`](https://github.com/govCMS/GovCMS/blob/3.x-develop/README.md/) for a full introduction to the GovCMS project, including:
+
+* Installation
+* Troubleshooting and Contributing
+
+> The GovCMS distribution is a deliberately restricted and curated set of modules, and you are advised to read [the guidelines for usage and development published by the maintainers](https://www.govcms.gov.au/support/tech-talk) before modifying things too much.
+
+## Quickstart
+
+The quickest way to deploy this template on Platform.sh is by clicking the button below.
+This will automatically create a new project and initialize the repository for you.
+
+
+
+
+
+
+You can also quickly recreate this project locally with the following command:
+
+```bash
+composer create-project platformsh/drupal10-govcms10 -s dev
+```
+
+## About this template
+
+This project template is based on [the public Platform.sh Drupal10 template](https://github.com/platformsh-templates/drupal10/tree/0a0257ddc427d7b7f7d87fb85fdb64604d5556b9) from [the Platform.sh template library](https://docs.platform.sh/development/templates.html).
+See the [Platform.sh documentation for deploying Drupal](https://docs.platform.sh/guides/drupal/deploy.html) for more.
+
+This template has been modified slightly, with reference to [the `govCMS/GovCMS` installer](https://github.com/govCMS/GovCMS) to add a few requirements to the `composer` configurations to suit the GovCMS installation.
+
+### Upgrading
+
+#### Upgrading GovCMS and Drupal
+
+The template requires the Drupal distribution `govcms/govcms: ^3` which at the time of release (v 3.15) means Drupal 10 (v 10.2.7).
+
+Running `composer upgrade` should be sufficient to keep your project up to date with newer releases to both GovCMS and Drupal core, as well as security releases.
+It is not advised to require or define the Drupal core version yourself, the GovCMS template will pin the latest compatible Drupal version itself.
+
+#### Upgrading Platform.sh configurations
+
+You are expected to review and modify this template code (`.platformsh.app.yaml` etc) to your specific application requirements [as described in the documentation](https://docs.platform.sh/create-apps/app-reference.html), so it's normal to use the template only as a reference once you've started building your app.
+
+Over time, there may be minor updates added to the base Platform.sh Drupal template.
+Although it's seldom necessary, you can follow the updates from the repository starting from the first commit.
+Patches like this should be applied manually as your own configuration is expected to diverge from the template as you develop.
+
+
+
+
+
+
+
+
+## About Drupal 10 on Platform.sh
+
+This template builds Drupal using the "GovCMS" distribution install profile.
+It is pre-configured to use MariaDB and Redis for caching.
+The Drupal installer will skip asking for database credentials as they are already provided.
+
+> You should choose the "GovCMS" install profile when prompted to by the install wizard during initial setup.
+
+### Features
+
+- PHP 8.3
+- MariaDB 10.11
+- Redis 7.2
+- Drush included
+- Automatic TLS certificates
+- Composer-based build
+
+Please see [`platformsh-templates/drupal10:README.md`](https://github.com/platformsh-templates/drupal10/blob/master/README.md) for a full introduction to getting started and using the Platform.sh system, including:
+
+* Deployment
+* Local Development
+* Migration
+* Troubleshooting
+
+## About GovCMS
+
+[GovCMS](https://www.govcms.gov.au) is an open source web content management and hosting service, based on Drupal and developed to help agencies create modern, affordable and responsive websites, whilst making it easier to collaborate and innovate. GovCMS also helps reduce the technology and compliance burden on government agencies. GovCMS is managed by the Australian Government Department of Finance.
+
+GovCMS Slack channel: https://govcmschat.slack.com/archives/C01BD9B3V5W
+
+Please see [`govCMS/GovCMS:README.md`](https://github.com/govCMS/GovCMS/blob/3.x-develop/README.md/) for a full introduction to the GovCMS project, including:
+
+* Installation
+* Troubleshooting and Contributing
+
+> The GovCMS distribution is a deliberately restricted and curated set of modules, and you are advised to read [the guidelines for usage and development published by the maintainers](https://www.govcms.gov.au/support/tech-talk) before modifying things too much.
+
+## Quickstart
+
+The quickest way to deploy this template on Platform.sh is by clicking the button below.
+This will automatically create a new project and initialize the repository for you.
+
+
+
+
+
+
+You can also quickly recreate this project locally with the following command:
+
+```bash
+composer create-project platformsh/drupal10-govcms10 -s dev
+```
+
+## About this template
+
+This project template is based on [the public Platform.sh Drupal10 template](https://github.com/platformsh-templates/drupal10/tree/0a0257ddc427d7b7f7d87fb85fdb64604d5556b9) from [the Platform.sh template library](https://docs.platform.sh/development/templates.html).
+See the [Platform.sh documentation for deploying Drupal](https://docs.platform.sh/guides/drupal/deploy.html) for more.
+
+This template has been modified slightly, with reference to [the `govCMS/GovCMS` installer](https://github.com/govCMS/GovCMS) to add a few requirements to the `composer` configurations to suit the GovCMS installation.
+
+### Upgrading
+
+#### Upgrading GovCMS and Drupal
+
+The template requires the Drupal distribution `govcms/govcms: ^3` which at the time of release (v 3.15) means Drupal 10 (v 10.2.7).
+
+Running `composer upgrade` should be sufficient to keep your project up to date with newer releases to both GovCMS and Drupal core, as well as security releases.
+It is not advised to require or define the Drupal core version yourself, the GovCMS template will pin the latest compatible Drupal version itself.
+
+#### Upgrading Platform.sh configurations
+
+You are expected to review and modify this template code (`.platformsh.app.yaml` etc) to your specific application requirements [as described in the documentation](https://docs.platform.sh/create-apps/app-reference.html), so it's normal to use the template only as a reference once you've started building your app.
+
+Over time, there may be minor updates added to the base Platform.sh Drupal template.
+Although it's seldom necessary, you can follow the updates from the repository starting from the first commit.
+Patches like this should be applied manually as your own configuration is expected to diverge from the template as you develop.
+
+
+
+
+ Maecenas id porttitor Ut enim ad minim veniam, quis nostrudfelis.
+ Laboris nisi ut aliquip ex ea.
+
+
+
+
+
Lorem ipsum dolor
+
+
+ Sit amet, consectetur adipisicing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
+ nostrud exercitation ullamco laboris nisi ut aliquip ex ea
+ commodo consequat. Maecenas id porttitor Ut enim ad minim veniam, quis nostr udfelis.
+
${Drupal.t(
+ 'An error occurred while trying to preview the media. Please save your work and reload this page.',
+ )}
`;
+})(Drupal);
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/js/classy/media_embed_ckeditor.theme.js b/templates/drupal10-govcms10/files/themes/obsolete/bartik/js/classy/media_embed_ckeditor.theme.js
new file mode 100644
index 000000000..19cc4ff77
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/js/classy/media_embed_ckeditor.theme.js
@@ -0,0 +1,10 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+(Drupal => {
+ Drupal.theme.mediaEmbedPreviewError = () => `
${Drupal.t('An error occurred while trying to preview the media. Please save your work and reload this page.')}
`;
+})(Drupal);
\ No newline at end of file
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/logo.svg b/templates/drupal10-govcms10/files/themes/obsolete/bartik/logo.svg
new file mode 100644
index 000000000..67c921a7b
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/logo.svg
@@ -0,0 +1 @@
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/screenshot.png b/templates/drupal10-govcms10/files/themes/obsolete/bartik/screenshot.png
new file mode 100644
index 000000000..1612c469f
Binary files /dev/null and b/templates/drupal10-govcms10/files/themes/obsolete/bartik/screenshot.png differ
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block--search-form-block.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block--search-form-block.html.twig
new file mode 100644
index 000000000..1f9adf0d3
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block--search-form-block.html.twig
@@ -0,0 +1,48 @@
+{#
+/**
+ * @file
+ * Bartik's theme implementation for a search form block.
+ *
+ * Available variables:
+ * - plugin_id: The ID of the block implementation.
+ * - label: The configured label of the block if visible.
+ * - configuration: A list of the block's configuration values, including:
+ * - label: The configured label for the block.
+ * - label_display: The display settings for the label.
+ * - provider: The module or other provider that provided this block plugin.
+ * - Block plugin specific settings will also be stored here.
+ * - content: The content of this block.
+ * - content_attributes: A list of HTML attributes applied to the main content
+ * - attributes: A list HTML attributes populated by modules, intended to
+ * be added to the main container tag of this template. Includes:
+ * - id: A valid HTML ID and guaranteed unique.
+ * - title_attributes: Same as attributes, except applied to the main title
+ * tag that appears in the template.
+ * - title_prefix: Additional output populated by modules, intended to be
+ * displayed in front of the main title tag that appears in the template.
+ * - title_suffix: Additional output populated by modules, intended to be
+ * displayed after the main title tag that appears in the template.
+ *
+ * @see template_preprocess_block()
+ * @see search_preprocess_block()
+ */
+#}
+{%
+ set classes = [
+ 'block',
+ 'block-search',
+ 'container-inline',
+ ]
+%}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block--system-branding-block.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block--system-branding-block.html.twig
new file mode 100644
index 000000000..48841e9e5
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block--system-branding-block.html.twig
@@ -0,0 +1,35 @@
+{% extends "block.html.twig" %}
+{#
+/**
+ * @file
+ * Bartik's theme implementation for a branding block.
+ *
+ * Each branding element variable (logo, name, slogan) is only available if
+ * enabled in the block configuration.
+ *
+ * Available variables:
+ * - site_logo: Logo for site as defined in Appearance or theme settings.
+ * - site_name: Name for site as defined in Site information settings.
+ * - site_slogan: Slogan for site as defined in Site information settings.
+ */
+#}
+{% set attributes = attributes.addClass('site-branding') %}
+{% block content %}
+ {% if site_logo %}
+
+
+
+ {% endif %}
+ {% if site_name or site_slogan %}
+
+ {% endif %}
+{% endblock %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block--system-menu-block.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block--system-menu-block.html.twig
new file mode 100644
index 000000000..aea280820
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block--system-menu-block.html.twig
@@ -0,0 +1,66 @@
+{#
+/**
+ * @file
+ * Bartik's theme implementation for a menu block.
+ *
+ * Available variables:
+ * - plugin_id: The ID of the block implementation.
+ * - label: The configured label of the block if visible.
+ * - configuration: A list of the block's configuration values.
+ * - label: The configured label for the block.
+ * - label_display: The display settings for the label.
+ * - provider: The module or other provider that provided this block plugin.
+ * - Block plugin specific settings will also be stored here.
+ * - content: The content of this block.
+ * - attributes: HTML attributes for the containing element.
+ * - id: A valid HTML ID and guaranteed unique.
+ * - title_attributes: HTML attributes for the title element.
+ * - content_attributes: HTML attributes for the content element.
+ * - title_prefix: Additional output populated by modules, intended to be
+ * displayed in front of the main title tag that appears in the template.
+ * - title_suffix: Additional output populated by modules, intended to be
+ * displayed after the main title tag that appears in the template.
+ *
+ * Headings should be used on navigation menus that consistently appear on
+ * multiple pages. When this menu block's label is configured to not be
+ * displayed, it is automatically made invisible using the 'visually-hidden' CSS
+ * class, which still keeps it visible for screen-readers and assistive
+ * technology. Headings allow screen-reader and keyboard only users to navigate
+ * to or skip the links.
+ * See http://juicystudio.com/article/screen-readers-display-none.php and
+ * http://www.w3.org/TR/WCAG-TECHS/H42.html for more information.
+ */
+#}
+{%
+ set classes = [
+ 'block',
+ 'block-menu',
+ 'navigation',
+ 'menu--' ~ derivative_plugin_id|clean_class,
+ ]
+%}
+{% set heading_id = attributes.id ~ '-menu'|clean_id %}
+{% set show_anchor = "show-" ~ attributes.id|clean_id %}
+{% set hide_anchor = "hide-" ~ attributes.id|clean_id %}
+
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block.html.twig
new file mode 100644
index 000000000..9d8be22ee
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/block.html.twig
@@ -0,0 +1,50 @@
+{#
+/**
+ * @file
+ * Default theme implementation to display a block.
+ *
+ * Available variables:
+ * - plugin_id: The ID of the block implementation.
+ * - label: The configured label of the block if visible.
+ * - configuration: A list of the block's configuration values.
+ * - label: The configured label for the block.
+ * - label_display: The display settings for the label.
+ * - provider: The module or other provider that provided this block plugin.
+ * - Block plugin specific settings will also be stored here.
+ * - content: The content of this block.
+ * - attributes: array of HTML attributes populated by modules, intended to
+ * be added to the main container tag of this template.
+ * - id: A valid HTML ID and guaranteed unique.
+ * - title_attributes: Same as attributes, except applied to the main title
+ * tag that appears in the template.
+ * - content_attributes: Same as attributes, except applied to the main content
+ * tag that appears in the template.
+ * - title_prefix: Additional output populated by modules, intended to be
+ * displayed in front of the main title tag that appears in the template.
+ * - title_suffix: Additional output populated by modules, intended to be
+ * displayed after the main title tag that appears in the template.
+ *
+ * @see template_preprocess_block()
+ *
+ * @ingroup themeable
+ */
+#}
+{%
+ set classes = [
+ 'block',
+ 'block-' ~ configuration.provider|clean_class,
+ 'block-' ~ plugin_id|clean_class,
+ ]
+%}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/README.txt b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/README.txt
new file mode 100644
index 000000000..8708a82e7
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/README.txt
@@ -0,0 +1,12 @@
+WHAT IS THIS DIRECTORY FOR?
+--------------------------------
+This directory is for templates previously inherited from the Classy theme.
+
+WHY ARE CLASSY TEMPLATES BEING COPIED HERE?
+-------------------------------------------
+Classy will be deprecated during the Drupal 9 lifecycle. To prepare for Classy's
+removal, templates that would otherwise be inherited from Classy are copied
+here.
+
+Templates that differ from the Classy versions should not be placed in this
+directory or any subdirectory.
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/block/block--local-actions-block.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/block/block--local-actions-block.html.twig
new file mode 100644
index 000000000..97df94b66
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/block/block--local-actions-block.html.twig
@@ -0,0 +1,12 @@
+{% extends "block.html.twig" %}
+{#
+/**
+ * @file
+ * Theme override for local actions (primary admin actions.)
+ */
+#}
+{% block content %}
+ {% if content %}
+
+ {% endif %}
+{% endblock %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/block/block--local-tasks-block.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/block/block--local-tasks-block.html.twig
new file mode 100644
index 000000000..0f25f59d8
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/block/block--local-tasks-block.html.twig
@@ -0,0 +1,14 @@
+{% extends "block.html.twig" %}
+{#
+/**
+ * @file
+ * Theme override for tabs.
+ */
+#}
+{% block content %}
+ {% if content %}
+
+ {% endif %}
+{% endblock %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/file-managed-file.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/file-managed-file.html.twig
new file mode 100644
index 000000000..281d0d0dc
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/file-managed-file.html.twig
@@ -0,0 +1,22 @@
+{#
+/**
+ * @file
+ * Theme override to display a file form widget.
+ *
+ * Available variables:
+ * - element: Form element for the file upload.
+ * - attributes: HTML attributes for the containing element.
+ *
+ * @see template_preprocess_file_managed_file()
+ */
+#}
+{{ attach_library('bartik/classy.file') }}
+{%
+ set classes = [
+ 'js-form-managed-file',
+ 'form-managed-file',
+ ]
+%}
+
+ {{ element }}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/filter-caption.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/filter-caption.html.twig
new file mode 100644
index 000000000..1e35795fc
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/filter-caption.html.twig
@@ -0,0 +1,18 @@
+{#
+/**
+ * @file
+ * Theme override for a filter caption.
+ *
+ * Returns HTML for a captioned image, audio, video or other tag.
+ *
+ * Available variables
+ * - string node: The complete HTML tag whose contents are being captioned.
+ * - string tag: The name of the HTML tag whose contents are being captioned.
+ * - string caption: The caption text.
+ * - string classes: The classes of the captioned HTML tag.
+ */
+#}
+
+{{ node }}
+{{ caption }}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/filter-guidelines.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/filter-guidelines.html.twig
new file mode 100644
index 000000000..afef2d2cf
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/filter-guidelines.html.twig
@@ -0,0 +1,29 @@
+{#
+/**
+ * @file
+ * Theme override for guidelines for a text format.
+ *
+ * Available variables:
+ * - format: Contains information about the current text format, including the
+ * following:
+ * - name: The name of the text format, potentially unsafe and needs to be
+ * escaped.
+ * - format: The machine name of the text format, e.g. 'basic_html'.
+ * - attributes: HTML attributes for the containing element.
+ * - tips: Descriptions and a CSS ID in the form of 'module-name/filter-id'
+ * (only used when 'long' is TRUE) for each filter in one or more text
+ * formats.
+ *
+ * @see template_preprocess_filter_tips()
+ */
+#}
+{%
+ set classes = [
+ 'filter-guidelines-item',
+ 'filter-guidelines-' ~ format.id,
+ ]
+%}
+
+
{{ format.label }}
+ {{ tips }}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/filter-tips.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/filter-tips.html.twig
new file mode 100644
index 000000000..25ed49d6a
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/filter-tips.html.twig
@@ -0,0 +1,61 @@
+{#
+/**
+ * @file
+ * Theme override for a set of filter tips.
+ *
+ * Available variables:
+ * - tips: Descriptions and a CSS ID in the form of 'module-name/filter-id'
+ * (only used when 'long' is TRUE) for each filter in one or more text
+ * formats.
+ * - long: A flag indicating whether the passed-in filter tips contain extended
+ * explanations, i.e. intended to be output on the path 'filter/tips'
+ * (TRUE), or are in a short format, i.e. suitable to be displayed below a
+ * form element. Defaults to FALSE.
+ * - multiple: A flag indicating there is more than one filter tip.
+ *
+ * @see template_preprocess_filter_tips()
+ */
+#}
+{% if multiple %}
+
{{ 'Text Formats'|t }}
+{% endif %}
+
+{% if tips|length %}
+ {% if multiple %}
+
+ {% endif %}
+
+ {% for name, tip in tips %}
+ {% if multiple %}
+ {%
+ set tip_classes = [
+ 'filter-type',
+ 'filter-' ~ name|clean_class,
+ ]
+ %}
+
+
{{ tip.name }}
+ {% endif %}
+
+ {% if tip.list|length %}
+
+ {% for item in tip.list %}
+ {%
+ set item_classes = [
+ long ? 'filter-' ~ item.id|replace({'/': '-'}),
+ ]
+ %}
+
+ {% endif %}
+{% endif %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/image-widget.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/image-widget.html.twig
new file mode 100644
index 000000000..dac3a227b
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/image-widget.html.twig
@@ -0,0 +1,23 @@
+{#
+/**
+ * @file
+ * Theme override for an image field widget.
+ *
+ * Available variables:
+ * - attributes: HTML attributes for the containing element.
+ * - data: Render elements of the image widget.
+ *
+ * @see template_preprocess_image_widget()
+ */
+#}
+
+ {% if data.preview %}
+
+ {{ data.preview }}
+
+ {% endif %}
+
+ {# Render widget data without the image preview that was output already. #}
+ {{ data|without('preview') }}
+
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/node-add-list.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/node-add-list.html.twig
new file mode 100644
index 000000000..f38fe3a5c
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/node-add-list.html.twig
@@ -0,0 +1,30 @@
+{#
+/**
+ * @file
+ * Theme override to list node types available for adding content.
+ *
+ * This list is displayed on the Add content admin page.
+ *
+ * Available variables:
+ * - types: A list of content types, each with the following properties:
+ * - add_link: Link to create a piece of content of this type.
+ * - description: Description of this type of content.
+ *
+ * @see template_preprocess_node_add_list()
+ */
+#}
+{% if types is not empty %}
+
+ {% for type in types %}
+
{{ type.add_link }}
+
{{ type.description }}
+ {% endfor %}
+
+{% else %}
+
+ {% set create_content = path('node.type_add') %}
+ {% trans %}
+ You have not created any content types yet. Go to the content type creation page to add a new content type.
+ {% endtrans %}
+
+{% endif %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/node-edit-form.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/node-edit-form.html.twig
new file mode 100644
index 000000000..18097f379
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/node-edit-form.html.twig
@@ -0,0 +1,28 @@
+{#
+/**
+ * @file
+ * Theme override for a node edit form.
+ *
+ * Two column template for the node add/edit form.
+ *
+ * This template will be used when a node edit form specifies 'node_edit_form'
+ * as its #theme callback. Otherwise, by default, node add/edit forms will be
+ * themed by form.html.twig.
+ *
+ * Available variables:
+ * - form: The node add/edit form.
+ *
+ * @see seven_form_node_form_alter()
+ */
+#}
+
+
+ {{ form|without('advanced', 'actions') }}
+
+
+ {{ form.advanced }}
+
+
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/text-format-wrapper.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/text-format-wrapper.html.twig
new file mode 100644
index 000000000..08a88ca1c
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content-edit/text-format-wrapper.html.twig
@@ -0,0 +1,26 @@
+{#
+/**
+ * @file
+ * Theme override for a text format-enabled form element.
+ *
+ * Available variables:
+ * - children: Text format element children.
+ * - description: Text format element description.
+ * - attributes: HTML attributes for the containing element.
+ * - aria_description: Flag for whether or not an ARIA description has been
+ * added to the description container.
+ *
+ * @see template_preprocess_text_format_wrapper()
+ */
+#}
+
+ {{ children }}
+ {% if description %}
+ {%
+ set classes = [
+ aria_description ? 'description',
+ ]
+ %}
+
{{ description }}
+ {% endif %}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/aggregator-item.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/aggregator-item.html.twig
new file mode 100644
index 000000000..16f4428a0
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/aggregator-item.html.twig
@@ -0,0 +1,31 @@
+{#
+/**
+ * @file
+ * Theme override to present a feed item in an aggregator page.
+ *
+ * Available variables:
+ * - url: URL to the originating feed item.
+ * - title: (optional) Title of the feed item.
+ * - content: All field items. Use {{ content }} to print them all,
+ * or print a subset such as {{ content.field_example }}. Use
+ * {{ content|without('field_example') }} to temporarily suppress the printing
+ * of a given element.
+ * - attributes: HTML attributes for the wrapper.
+ * - title_prefix: Additional output populated by modules, intended to be
+ * displayed in front of the main title tag that appears in the template.
+ * - title_suffix: Additional output populated by modules, intended to be
+ * displayed after the main title tag that appears in the template.
+ *
+ * @see template_preprocess_aggregator_item()
+ */
+#}
+
+ {{ title_prefix }}
+ {% if title %}
+
+ {% endif %}
+ {{ title_suffix }}
+ {{ content }}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/book-node-export-html.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/book-node-export-html.html.twig
new file mode 100644
index 000000000..94a4c24dc
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/book-node-export-html.html.twig
@@ -0,0 +1,20 @@
+{#
+/**
+ * @file
+ * Theme override for a single node in a printer-friendly outline.
+ *
+ * Available variables:
+ * - node: Fully loaded node.
+ * - depth: Depth of the current node inside the outline.
+ * - title: Node title.
+ * - content: Node content.
+ * - children: All the child nodes recursively rendered through this file.
+ *
+ * @see template_preprocess_book_node_export_html()
+ */
+#}
+
+
{{ title }}
+ {{ content }}
+ {{ children }}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/links--node.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/links--node.html.twig
new file mode 100644
index 000000000..e6cda0d7b
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/links--node.html.twig
@@ -0,0 +1,40 @@
+{#
+/**
+ * @file
+ * Theme override to display node links.
+ *
+ * Available variables:
+ * - attributes: Attributes for the UL containing the list of links.
+ * - links: Links to be output.
+ * Each link will have the following elements:
+ * - link: (optional) A render array that returns a link. See
+ * template_preprocess_links() for details how it is generated.
+ * - text: The link text.
+ * - attributes: HTML attributes for the list item element.
+ * - text_attributes: (optional) HTML attributes for the span element if no
+ * 'url' was supplied.
+ * - heading: (optional) A heading to precede the links.
+ * - text: The heading text.
+ * - level: The heading level (e.g. 'h2', 'h3').
+ * - attributes: (optional) A keyed list of attributes for the heading.
+ * If the heading is a string, it will be used as the text of the heading and
+ * the level will default to 'h2'.
+ *
+ * Headings should be used on navigation menus and any list of links that
+ * consistently appears on multiple pages. To make the heading invisible use
+ * the 'visually-hidden' CSS class. Do not use 'display:none', which
+ * removes it from screen readers and assistive technology. Headings allow
+ * screen reader and keyboard only users to navigate to or skip the links.
+ * See http://juicystudio.com/article/screen-readers-display-none.php and
+ * http://www.w3.org/TR/WCAG-TECHS/H42.html for more information.
+ *
+ * @see template_preprocess_links()
+ *
+ * @ingroup themeable
+ */
+#}
+{% if links %}
+
+ {% include "links.html.twig" %}
+
+{% endif %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/mark.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/mark.html.twig
new file mode 100644
index 000000000..9219915ce
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/mark.html.twig
@@ -0,0 +1,20 @@
+{#
+/**
+ * @file
+ * Theme override for a marker for new or updated content.
+ *
+ * Available variables:
+ * - status: Number representing the marker status to display. Use the constants
+ * below for comparison:
+ * - MARK_NEW
+ * - MARK_UPDATED
+ * - MARK_READ
+ */
+#}
+{% if logged_in %}
+ {% if status is constant('MARK_NEW') %}
+ {{ 'New'|t }}
+ {% elseif status is constant('MARK_UPDATED') %}
+ {{ 'Updated'|t }}
+ {% endif %}
+{% endif %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/media-embed-error.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/media-embed-error.html.twig
new file mode 100644
index 000000000..142367baf
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/media-embed-error.html.twig
@@ -0,0 +1,21 @@
+{#
+/**
+ * @file
+ * Theme override for a missing media error.
+ *
+ * Available variables
+ * - message: The message text.
+ * - attributes: HTML attributes for the containing element.
+ *
+ * When a response from the back end can't be returned, a related error message
+ * is displayed from JavaScript.
+ *
+ * @see Drupal.theme.mediaEmbedPreviewError
+ *
+ * @ingroup themeable
+ */
+#}
+{{ attach_library('bartik/classy.media_embed_error') }}
+
+ {{ message }}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/media.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/media.html.twig
new file mode 100644
index 000000000..422030e9d
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/media.html.twig
@@ -0,0 +1,28 @@
+{#
+/**
+ * @file
+ * Theme override to display a media item.
+ *
+ * Available variables:
+ * - name: Name of the media.
+ * - content: Media content.
+ *
+ * @see template_preprocess_media()
+ *
+ * @ingroup themeable
+ */
+#}
+{%
+ set classes = [
+ 'media',
+ 'media--type-' ~ media.bundle()|clean_class,
+ not media.isPublished() ? 'media--unpublished',
+ view_mode ? 'media--view-mode-' ~ view_mode|clean_class,
+ ]
+%}
+
+ {{ title_suffix.contextual_links }}
+ {% if content %}
+ {{ content }}
+ {% endif %}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/search-result.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/search-result.html.twig
new file mode 100644
index 000000000..9f3b04d8e
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/search-result.html.twig
@@ -0,0 +1,72 @@
+{#
+/**
+ * @file
+ * Theme override for displaying a single search result.
+ *
+ * This template renders a single search result. The list of results is
+ * rendered using '#theme' => 'item_list', with suggestions of:
+ * - item_list__search_results__(plugin_id)
+ * - item_list__search_results
+ *
+ * Available variables:
+ * - url: URL of the result.
+ * - title: Title of the result.
+ * - snippet: A small preview of the result. Does not apply to user searches.
+ * - info: String of all the meta information ready for print. Does not apply
+ * to user searches.
+ * - plugin_id: The machine-readable name of the plugin being executed,such
+ * as "node_search" or "user_search".
+ * - title_prefix: Additional output populated by modules, intended to be
+ * displayed in front of the main title tag that appears in the template.
+ * - title_suffix: Additional output populated by modules, intended to be
+ * displayed after the main title tag that appears in the template.
+ * - info_split: Contains same data as info, but split into separate parts.
+ * - info_split.type: Node type (or item type string supplied by module).
+ * - info_split.user: Author of the node linked to users profile. Depends
+ * on permission.
+ * - info_split.date: Last update of the node. Short formatted.
+ * - info_split.comment: Number of comments output as "% comments", %
+ * being the count. (Depends on comment.module).
+ * @todo The info variable needs to be made drillable and each of these sub
+ * items should instead be within info and renamed info.foo, info.bar, etc.
+ *
+ * Other variables:
+ * - title_attributes: HTML attributes for the title.
+ * - content_attributes: HTML attributes for the content.
+ *
+ * Since info_split is keyed, a direct print of the item is possible.
+ * This array does not apply to user searches so it is recommended to check
+ * for its existence before printing. The default keys of 'type', 'user' and
+ * 'date' always exist for node searches. Modules may provide other data.
+ * @code
+ * {% if (info_split.comment) %}
+ *
+ * {{ info_split.comment }}
+ *
+ * {% endif %}
+ * @endcode
+ *
+ * To check for all available data within info_split, use the code below.
+ * @code
+ *
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/taxonomy-term.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/taxonomy-term.html.twig
new file mode 100644
index 000000000..6478b507d
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/content/taxonomy-term.html.twig
@@ -0,0 +1,41 @@
+{#
+/**
+ * @file
+ * Theme override to display a taxonomy term.
+ *
+ * Available variables:
+ * - url: URL of the current term.
+ * - name: (optional) Name of the current term.
+ * - content: Items for the content of the term (fields and description).
+ * Use 'content' to print them all, or print a subset such as
+ * 'content.description'. Use the following code to exclude the
+ * printing of a given child element:
+ * @code
+ * {{ content|without('description') }}
+ * @endcode
+ * - attributes: HTML attributes for the wrapper.
+ * - page: Flag for the full page state.
+ * - term: The taxonomy term entity, including:
+ * - id: The ID of the taxonomy term.
+ * - bundle: Machine name of the current vocabulary.
+ * - view_mode: View mode, e.g. 'full', 'teaser', etc.
+ *
+ * @see template_preprocess_taxonomy_term()
+ */
+#}
+{%
+ set classes = [
+ 'taxonomy-term',
+ 'vocabulary-' ~ term.bundle|clean_class,
+ ]
+%}
+
+ {{ title_prefix }}
+ {% if name and not page %}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/aggregator-feed.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/aggregator-feed.html.twig
new file mode 100644
index 000000000..9eacccb60
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/aggregator-feed.html.twig
@@ -0,0 +1,36 @@
+{#
+/**
+ * @file
+ * Theme override to present an aggregator feed.
+ *
+ * The contents are rendered above feed listings when browsing source feeds.
+ * For example, "example.com/aggregator/sources/1".
+ *
+ * Available variables:
+ * - title: (optional) Title of the feed item.
+ * - content: All field items. Use {{ content }} to print them all,
+ * or print a subset such as {{ content.field_example }}. Use
+ * {{ content|without('field_example') }} to temporarily suppress the printing
+ * of a given element.
+ * - attributes: HTML attributes for the wrapper.
+ * - title_attributes: Same as attributes, except applied to the main title
+ * tag that appears in the template.
+ * - title_prefix: Additional output populated by modules, intended to be
+ * displayed in front of the main title tag that appears in the template.
+ * - title_suffix: Additional output populated by modules, intended to be
+ * displayed after the main title tag that appears in the template.
+ *
+ * @see template_preprocess_aggregator_feed()
+ */
+#}
+
+
+ {{ title_prefix }}
+ {% if title and not full %}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/forum-icon.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/forum-icon.html.twig
new file mode 100644
index 000000000..d6be503bb
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/forum-icon.html.twig
@@ -0,0 +1,30 @@
+{#
+/**
+ * @file
+ * Theme override to display a status icon for a forum post.
+ *
+ * Available variables:
+ * - attributes: HTML attributes to be applied to the wrapper element.
+ * - class: HTML classes that determine which icon to display. May be one of
+ * 'hot', 'hot-new', 'new', 'default', 'closed', or 'sticky'.
+ * - title: Text alternative for the forum icon.
+ * - icon_title: Text alternative for the forum icon, same as above.
+ * - new_posts: '1' when this topic contains new posts, otherwise '0'.
+ * - first_new: '1' when this is the first topic with new posts, otherwise '0'.
+ * - icon_status: Indicates which status icon should be used.
+ *
+ * @see template_preprocess_forum_icon()
+ */
+#}
+{%
+ set classes = [
+ 'forum__icon',
+ 'forum__topic-status--' ~ icon_status,
+ ]
+%}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/forum-list.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/forum-list.html.twig
new file mode 100644
index 000000000..d8523f159
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/forum-list.html.twig
@@ -0,0 +1,79 @@
+{#
+/**
+ * @file
+ * Theme override to display a list of forums and containers.
+ *
+ * Available variables:
+ * - forums: A collection of forums and containers to display. It is keyed to
+ * the numeric IDs of all child forums and containers. Each forum in forums
+ * contains:
+ * - is_container: A flag indicating if the forum can contain other
+ * forums. Otherwise, the forum can only contain topics.
+ * - depth: How deep the forum is in the current hierarchy.
+ * - zebra: 'even' or 'odd', used for row class.
+ * - icon_class: 'default' or 'new', used for forum icon class.
+ * - icon_title: Text alternative for the forum icon.
+ * - name: The name of the forum.
+ * - link: The URL to link to this forum.
+ * - description: The description field for the forum, containing:
+ * - value: The descriptive text for the forum.
+ * - new_topics: A flag indicating if the forum contains unread posts.
+ * - new_url: A URL to the forum's unread posts.
+ * - new_text: Text for the above URL, which tells how many new posts.
+ * - old_topics: A count of posts that have already been read.
+ * - num_posts: The total number of posts in the forum.
+ * - last_reply: Text representing the last time a forum was posted or
+ * commented in.
+ * - forum_id: Forum ID for the current forum. Parent to all items within the
+ * forums array.
+ *
+ * @see template_preprocess_forum_list()
+ */
+#}
+
+
+
+
{{ 'Forum'|t }}
+
{{ 'Topics'|t }}
+
{{ 'Posts'|t }}
+
{{ 'Last post'|t }}
+
+
+
+ {% for child_id, forum in forums %}
+
+
+ {#
+ Enclose the contents of this cell with X divs, where X is the
+ depth this forum resides at. This will allow us to use CSS
+ left-margin for indenting.
+ #}
+ {% if forum.depth > 0 %}{% for i in 1..forum.depth %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/forums.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/forums.html.twig
new file mode 100644
index 000000000..6cf7c833e
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/forums.html.twig
@@ -0,0 +1,24 @@
+{#
+/**
+ * @file
+ * Theme override to display a forum.
+ *
+ * May contain forum containers as well as forum topics.
+ *
+ * Available variables:
+ * - forums: The forums to display (as processed by forum-list.html.twig).
+ * - topics: The topics to display.
+ * - topics_pager: The topics pager.
+ * - forums_defined: A flag to indicate that the forums are configured.
+ *
+ * @see template_preprocess_forums()
+ */
+#}
+{{ attach_library('bartik/classy.forum') }}
+{% if forums_defined %}
+
+{% endif %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/item-list--search-results.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/item-list--search-results.html.twig
new file mode 100644
index 000000000..e9928fd77
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/item-list--search-results.html.twig
@@ -0,0 +1,29 @@
+{% extends "item-list.html.twig" %}
+{#
+/**
+ * @file
+ * Theme override for an item list of search results.
+ *
+ * Available variables:
+ * - items: A list of items. Each item contains:
+ * - attributes: HTML attributes to be applied to each list item.
+ * - value: The content of the list element.
+ * - title: The title of the list.
+ * - list_type: The tag for list element ("ul" or "ol").
+ * - attributes: HTML attributes to be applied to the list.
+ * - empty: A message to display when there are no items. Allowed value is a
+ * string or render array.
+ * - context: An list of contextual data associated with the list. For search
+ * results, the following data is set:
+ * - plugin: The search plugin ID, for example "node_search".
+ *
+ * @see template_preprocess_item_list()
+ */
+#}
+{%
+ set classes = [
+ 'search-results',
+ context.plugin ~ '-results',
+ ]
+%}
+{% set attributes = attributes.addClass(classes) %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/item-list.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/item-list.html.twig
new file mode 100644
index 000000000..20541b0b7
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/item-list.html.twig
@@ -0,0 +1,41 @@
+{#
+/**
+ * @file
+ * Theme override for an item list.
+ *
+ * Available variables:
+ * - items: A list of items. Each item contains:
+ * - attributes: HTML attributes to be applied to each list item.
+ * - value: The content of the list element.
+ * - title: The title of the list.
+ * - list_type: The tag for list element ("ul" or "ol").
+ * - wrapper_attributes: HTML attributes to be applied to the list wrapper.
+ * - attributes: HTML attributes to be applied to the list.
+ * - empty: A message to display when there are no items. Allowed value is a
+ * string or render array.
+ * - context: A list of contextual data associated with the list. May contain:
+ * - list_style: The custom list style.
+ *
+ * @see template_preprocess_item_list()
+ */
+#}
+{% if context.list_style %}
+ {%- set wrapper_attributes = wrapper_attributes.addClass('item-list--' ~ context.list_style) %}
+ {%- set attributes = attributes.addClass('item-list__' ~ context.list_style) %}
+{% endif %}
+{% if items or empty -%}
+
+ {%- if title is not empty -%}
+
{{ title }}
+ {%- endif -%}
+ {%- if items -%}
+ <{{ list_type }}{{ attributes }}>
+ {%- for item in items -%}
+
+{%- endif %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/table.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/table.html.twig
new file mode 100644
index 000000000..2afa9c155
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/dataset/table.html.twig
@@ -0,0 +1,113 @@
+{#
+/**
+ * @file
+ * Theme override to display a table.
+ *
+ * Available variables:
+ * - attributes: HTML attributes to apply to the
tag.
+ * - caption: A localized string for the
tag.
+ * - colgroups: Column groups. Each group contains the following properties:
+ * - attributes: HTML attributes to apply to the
tag.
+ * Note: Drupal currently supports only one table header row, see
+ * https://www.drupal.org/node/893530 and
+ * http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_table/7#comment-5109.
+ * - header: Table header cells. Each cell contains the following properties:
+ * - tag: The HTML tag name to use; either 'th' or 'td'.
+ * - attributes: HTML attributes to apply to the tag.
+ * - content: A localized string for the title of the column.
+ * - field: Field name (required for column sorting).
+ * - sort: Default sort order for this column ("asc" or "desc").
+ * - sticky: A flag indicating whether to use a "sticky" table header.
+ * - rows: Table rows. Each row contains the following properties:
+ * - attributes: HTML attributes to apply to the
tag.
+ * - data: Table cells.
+ * - no_striping: A flag indicating that the row should receive no
+ * 'even / odd' styling. Defaults to FALSE.
+ * - cells: Table cells of the row. Each cell contains the following keys:
+ * - tag: The HTML tag name to use; either 'th' or 'td'.
+ * - attributes: Any HTML attributes, such as "colspan", to apply to the
+ * table cell.
+ * - content: The string to display in the table cell.
+ * - active_table_sort: A boolean indicating whether the cell is the active
+ table sort.
+ * - footer: Table footer rows, in the same format as the rows variable.
+ * - empty: The message to display in an extra row if table does not have
+ * any rows.
+ * - no_striping: A boolean indicating that the row should receive no striping.
+ * - header_columns: The number of columns in the header.
+ *
+ * @see template_preprocess_table()
+ */
+#}
+
+ {% if caption %}
+
{{ caption }}
+ {% endif %}
+
+ {% for colgroup in colgroups %}
+ {% if colgroup.cols %}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--comment.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--comment.html.twig
new file mode 100644
index 000000000..1ec3ee64b
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--comment.html.twig
@@ -0,0 +1,57 @@
+{#
+/**
+ * @file
+ * Theme override for comment fields.
+ *
+ * Available variables:
+ * - attributes: HTML attributes for the containing element.
+ * - label_hidden: Whether to show the field label or not.
+ * - title_attributes: HTML attributes for the title.
+ * - label: The label for the field.
+ * - title_prefix: Additional output populated by modules, intended to be
+ * displayed in front of the main title tag that appears in the template.
+ * - title_suffix: Additional title output populated by modules, intended to
+ * be displayed after the main title tag that appears in the template.
+ * - comments: List of comments rendered through comment.html.twig.
+ * - comment_form: The 'Add new comment' form.
+ * - comment_display_mode: Is the comments are threaded.
+ * - comment_type: The comment type bundle ID for the comment field.
+ * - entity_type: The entity type to which the field belongs.
+ * - field_name: The name of the field.
+ * - field_type: The type of the field.
+ * - label_display: The display settings for the label.
+ *
+ * @see template_preprocess_field()
+ * @see comment_preprocess_field()
+ */
+#}
+{%
+ set classes = [
+ 'field',
+ 'field--name-' ~ field_name|clean_class,
+ 'field--type-' ~ field_type|clean_class,
+ 'field--label-' ~ label_display,
+ 'comment-wrapper',
+ ]
+%}
+{%
+ set title_classes = [
+ 'title',
+ label_display == 'visually_hidden' ? 'visually-hidden',
+ ]
+%}
+
+ {% if comments and not label_hidden %}
+ {{ title_prefix }}
+
+ {{ comment_form }}
+ {% endif %}
+
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--node--created.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--node--created.html.twig
new file mode 100644
index 000000000..f4d1acd43
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--node--created.html.twig
@@ -0,0 +1,44 @@
+{#
+/**
+ * @file
+ * Theme override for the node created field.
+ *
+ * This is an override of field.html.twig for the node created field. See that
+ * template for documentation about its details and overrides.
+ *
+ * Available variables:
+ * - attributes: HTML attributes for the containing span element.
+ * - items: List of all the field items. Each item contains:
+ * - attributes: List of HTML attributes for each item.
+ * - content: The field item content.
+ * - entity_type: The entity type to which the field belongs.
+ * - field_name: The name of the field.
+ * - field_type: The type of the field.
+ * - label_display: The display settings for the label.
+ * - is_inline: If false, display an ordinary field.
+ * If true, display an inline format, suitable for inside elements such as
+ * ,
and so on.
+ *
+ * @see field.html.twig
+ * @see node_preprocess_field__node()
+ *
+ * @todo Delete as part of https://www.drupal.org/node/3015623
+ */
+#}
+{% if not is_inline %}
+ {% include "field.html.twig" %}
+{% else %}
+{%
+ set classes = [
+ 'field',
+ 'field--name-' ~ field_name|clean_class,
+ 'field--type-' ~ field_type|clean_class,
+ 'field--label-' ~ label_display,
+ ]
+%}
+
+ {%- for item in items -%}
+ {{ item.content }}
+ {%- endfor -%}
+
+{% endif %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--node--title.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--node--title.html.twig
new file mode 100644
index 000000000..e79c39eb5
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--node--title.html.twig
@@ -0,0 +1,44 @@
+{#
+/**
+ * @file
+ * Theme override for the node title field.
+ *
+ * This is an override of field.html.twig for the node title field. See that
+ * template for documentation about its details and overrides.
+ *
+ * Available variables:
+ * - attributes: HTML attributes for the containing span element.
+ * - items: List of all the field items. Each item contains:
+ * - attributes: List of HTML attributes for each item.
+ * - content: The field item content.
+ * - entity_type: The entity type to which the field belongs.
+ * - field_name: The name of the field.
+ * - field_type: The type of the field.
+ * - label_display: The display settings for the label.
+ * - is_inline: If false, display an ordinary field.
+ * If true, display an inline format, suitable for inside elements such as
+ * ,
and so on.
+ *
+ * @see field.html.twig
+ * @see node_preprocess_field__node()
+ *
+ * @todo Delete as part of https://www.drupal.org/node/3015623
+ */
+#}
+{% if not is_inline %}
+ {% include "field.html.twig" %}
+{% else %}
+{%
+ set classes = [
+ 'field',
+ 'field--name-' ~ field_name|clean_class,
+ 'field--type-' ~ field_type|clean_class,
+ 'field--label-' ~ label_display,
+ ]
+%}
+
+ {%- for item in items -%}
+ {{ item.content }}
+ {%- endfor -%}
+
+{% endif %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--node--uid.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--node--uid.html.twig
new file mode 100644
index 000000000..0a3810832
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--node--uid.html.twig
@@ -0,0 +1,44 @@
+{#
+/**
+ * @file
+ * Theme override for the node user field.
+ *
+ * This is an override of field.html.twig for the node user field. See that
+ * template for documentation about its details and overrides.
+ *
+ * Available variables:
+ * - attributes: HTML attributes for the containing span element.
+ * - items: List of all the field items. Each item contains:
+ * - attributes: List of HTML attributes for each item.
+ * - content: The field item content.
+ * - entity_type: The entity type to which the field belongs.
+ * - field_name: The name of the field.
+ * - field_type: The type of the field.
+ * - label_display: The display settings for the label.
+ * - is_inline: If false, display an ordinary field.
+ * If true, display an inline format, suitable for inside elements such as
+ * ,
and so on.
+ *
+ * @see field.html.twig
+ * @see node_preprocess_field__node()
+ *
+ * @todo Delete as part of https://www.drupal.org/node/3015623
+ */
+#}
+{% if not is_inline %}
+ {% include "field.html.twig" %}
+{% else %}
+{%
+ set classes = [
+ 'field',
+ 'field--name-' ~ field_name|clean_class,
+ 'field--type-' ~ field_type|clean_class,
+ 'field--label-' ~ label_display,
+ ]
+%}
+
+ {%- for item in items -%}
+ {{ item.content }}
+ {%- endfor -%}
+
+{% endif %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--text-long.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--text-long.html.twig
new file mode 100644
index 000000000..07ce721d2
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--text-long.html.twig
@@ -0,0 +1 @@
+{% extends "field--text.html.twig" %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--text-with-summary.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--text-with-summary.html.twig
new file mode 100644
index 000000000..07ce721d2
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--text-with-summary.html.twig
@@ -0,0 +1 @@
+{% extends "field--text.html.twig" %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--text.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--text.html.twig
new file mode 100644
index 000000000..5d1690c3e
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field--text.html.twig
@@ -0,0 +1,28 @@
+{% extends "field.html.twig" %}
+{#
+/**
+ * @file
+ * Default theme implementation for a text field.
+ *
+ * A 'clearfix' class is added, because 'text' fields have a 'format' property
+ * that allows a Text Format to be associated with the entered text, which then
+ * applies filtering on output. A common use case is to align images to the left
+ * or right, and without this 'clearfix' class, such aligned images may be
+ * rendered outside of the 'text' field formatter's boundaries, and hence
+ * overlap with other fields. By setting the 'clearfix' class on all 'text'
+ * fields, we prevent that.
+ *
+ * @see https://www.drupal.org/node/2358529
+ *
+ * A 'text-formatted' class is added to assist with default styling of base
+ * elements such as paragraphs and lists that may not have classes assigned to
+ * them. This allows user entered content to have default styling without
+ * interfering with the styles of other UI components such as system generated
+ * lists or other dynamic content.
+ *
+ * @see https://www.drupal.org/node/2539860
+ *
+ * @ingroup themeable
+ */
+#}
+{% set attributes = attributes.addClass('clearfix', 'text-formatted') %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field.html.twig
new file mode 100644
index 000000000..1cfbd651c
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/field.html.twig
@@ -0,0 +1,81 @@
+{#
+/**
+ * @file
+ * Theme override for a field.
+ *
+ * To override output, copy the "field.html.twig" from the templates directory
+ * to your theme's directory and customize it, just like customizing other
+ * Drupal templates such as page.html.twig or node.html.twig.
+ *
+ * Instead of overriding the theming for all fields, you can also just override
+ * theming for a subset of fields using
+ * @link themeable Theme hook suggestions. @endlink For example,
+ * here are some theme hook suggestions that can be used for a field_foo field
+ * on an article node type:
+ * - field--node--field-foo--article.html.twig
+ * - field--node--field-foo.html.twig
+ * - field--node--article.html.twig
+ * - field--field-foo.html.twig
+ * - field--text-with-summary.html.twig
+ * - field.html.twig
+ *
+ * Available variables:
+ * - attributes: HTML attributes for the containing element.
+ * - label_hidden: Whether to show the field label or not.
+ * - title_attributes: HTML attributes for the title.
+ * - label: The label for the field.
+ * - multiple: TRUE if a field can contain multiple items.
+ * - items: List of all the field items. Each item contains:
+ * - attributes: List of HTML attributes for each item.
+ * - content: The field item's content.
+ * - entity_type: The entity type to which the field belongs.
+ * - field_name: The name of the field.
+ * - field_type: The type of the field.
+ * - label_display: The display settings for the label.
+ *
+ *
+ * @see template_preprocess_field()
+ */
+#}
+{%
+ set classes = [
+ 'field',
+ 'field--name-' ~ field_name|clean_class,
+ 'field--type-' ~ field_type|clean_class,
+ 'field--label-' ~ label_display,
+ label_display == 'inline' ? 'clearfix',
+ ]
+%}
+{%
+ set title_classes = [
+ 'field__label',
+ label_display == 'visually_hidden' ? 'visually-hidden',
+ ]
+%}
+
+{% if label_hidden %}
+ {% if multiple %}
+
+ {% for item in items %}
+
{{ item.content }}
+ {% endfor %}
+
+ {% else %}
+ {% for item in items %}
+
{{ item.content }}
+ {% endfor %}
+ {% endif %}
+{% else %}
+
+
{{ label }}
+ {% if multiple %}
+
+ {% endif %}
+ {% for item in items %}
+
{{ item.content }}
+ {% endfor %}
+ {% if multiple %}
+
+ {% endif %}
+
+{% endif %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/file-audio.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/file-audio.html.twig
new file mode 100644
index 000000000..f25317b90
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/file-audio.html.twig
@@ -0,0 +1,23 @@
+{#
+/**
+* @file
+* Default theme implementation to display the file entity as an audio tag.
+*
+* Available variables:
+* - attributes: An array of HTML attributes, intended to be added to the
+* audio tag.
+* - files: And array of files to be added as sources for the audio tag. Each
+* element is an array with the following elements:
+* - file: The full file object.
+* - source_attributes: An array of HTML attributes for to be added to the
+* source tag.
+*
+* @ingroup themeable
+*/
+#}
+{{ attach_library('bartik/classy.file') }}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/file-video.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/file-video.html.twig
new file mode 100644
index 000000000..14498696d
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/file-video.html.twig
@@ -0,0 +1,23 @@
+{#
+/**
+* @file
+* Default theme implementation to display the file entity as a video tag.
+*
+* Available variables:
+* - attributes: An array of HTML attributes, intended to be added to the
+* video tag.
+* - files: And array of files to be added as sources for the video tag. Each
+* element is an array with the following elements:
+* - file: The full file object.
+* - source_attributes: An array of HTML attributes for to be added to the
+* source tag.
+*
+* @ingroup themeable
+*/
+#}
+{{ attach_library('bartik/classy.file') }}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/image.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/image.html.twig
new file mode 100644
index 000000000..31f782bb6
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/image.html.twig
@@ -0,0 +1,18 @@
+{#
+/**
+ * @file
+ * Theme override of an image.
+ *
+ * Available variables:
+ * - attributes: HTML attributes for the img tag.
+ * - style_name: (optional) The name of the image style applied.
+ *
+ * @see template_preprocess_image()
+ */
+#}
+{%
+set classes = [
+ style_name ? 'image-style-' ~ style_name|clean_class,
+]
+%}
+
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/link-formatter-link-separate.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/link-formatter-link-separate.html.twig
new file mode 100644
index 000000000..52c8d29a7
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/link-formatter-link-separate.html.twig
@@ -0,0 +1,22 @@
+{#
+/**
+ * @file
+ * Theme override of a link with separate title and URL elements.
+ *
+ * Available variables:
+ * - link: The link that has already been formatted by l().
+ * - title: (optional) A descriptive or alternate title for the link, which may
+ * be different than the actual link text.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_link_formatter_link_separate()
+ */
+#}
+{% apply spaceless %}
+
+ {% if title %}
+
{{ title }}
+ {% endif %}
+
{{ link }}
+
+{% endapply %}
diff --git a/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/time.html.twig b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/time.html.twig
new file mode 100644
index 000000000..f2912b7f9
--- /dev/null
+++ b/templates/drupal10-govcms10/files/themes/obsolete/bartik/templates/classy/field/time.html.twig
@@ -0,0 +1,22 @@
+{#
+/**
+ * @file
+ * Theme override for a date / time element.
+ *
+ * Available variables
+ * - timestamp: (optional) A UNIX timestamp for the datetime attribute. If the
+ * datetime cannot be represented as a UNIX timestamp, use a valid datetime
+ * attribute value in attributes.datetime.
+ * - text: (optional) The content to display within the