diff --git a/all-written-paths.txt b/all-written-paths.txt new file mode 100644 index 0000000000..ac86ecbb96 --- /dev/null +++ b/all-written-paths.txt @@ -0,0 +1,1599 @@ +[ + "/", + "/1-and-1", + "/404.html", + "/404/", + "/add-site", + "/add-site-clone", + "/add-site-custom-upstream", + "/add-site-dashboard", + "/addons", + "/agency-tips", + "/apcu", + "/application-containers", + "/automate", + "/autopilot", + "/basic-troubleshooting", + "/behat", + "/billing", + "/bots-and-indexing", + "/cache", + "/cache-control", + "/caching-advanced-topics", + "/certificate-bundles", + "/certification", + "/certification/about", + "/certification/exam", + "/certification/study-guide", + "/certification/study-guide/automate", + "/certification/study-guide/cdn", + "/certification/study-guide/cms", + "/certification/study-guide/create", + "/certification/study-guide/custom-upstreams", + "/certification/study-guide/deploy", + "/certification/study-guide/extend", + "/certification/study-guide/people", + "/certification/study-guide/platform", + "/certification/study-guide/webops", + "/clamav", + "/clear-caches", + "/client-ip", + "/cloud-optimization", + "/cloudflare", + "/code-of-conduct", + "/composer-convert", + "/composer-convert-from-empty", + "/connection-modes", + "/content-staging", + "/continuous-integration", + "/contribute", + "/contributors/", + "/contributors/BFTrick", + "/contributors/CdrMarks", + "/contributors/LukasRos", + "/contributors/afragen", + "/contributors/albertcausing", + "/contributors/aleksandrkorolyov", + "/contributors/alexfornuto", + "/contributors/andrewmallis", + "/contributors/ari", + "/contributors/ataylorme", + "/contributors/backlineint", + "/contributors/bmackinney", + "/contributors/bwood", + "/contributors/caitybishop", + "/contributors/calevans", + "/contributors/carl-alberto", + "/contributors/carolynshannon", + "/contributors/ccjjmartin", + "/contributors/cityofoaksdesign", + "/contributors/clintonPantheon", + "/contributors/cobypear", + "/contributors/cteitzel", + "/contributors/curmudgeon", + "/contributors/danielbachhuber", + "/contributors/davidneedham", + "/contributors/dgorton", + "/contributors/digisavvy", + "/contributors/dts", + "/contributors/dustinleblanc", + "/contributors/dwayne", + "/contributors/eabquina", + "/contributors/edwardangert", + "/contributors/eeeschwartz", + "/contributors/erikmathy", + "/contributors/fatimask", + "/contributors/greg-1-anderson", + "/contributors/hckia", + "/contributors/iameap", + "/contributors/jazzsequence", + "/contributors/jessifischer", + "/contributors/jms-pantheon", + "/contributors/joan-ing", + "/contributors/joshkoenig", + "/contributors/jrastaban", + "/contributors/jspellman814", + "/contributors/kate", + "/contributors/katiemac", + "/contributors/kyletaylored", + "/contributors/masonjames", + "/contributors/michellecolon-pantheon", + "/contributors/mmenavas", + "/contributors/mrfelton", + "/contributors/nathantyler", + "/contributors/peter-pantheon", + "/contributors/petersuhm", + "/contributors/populist", + "/contributors/rachelwhitton", + "/contributors/rvtraveller", + "/contributors/ryanwagner", + "/contributors/sarahg", + "/contributors/scottmassey", + "/contributors/sdubois", + "/contributors/sparklingrobots", + "/contributors/stevector", + "/contributors/stovak", + "/contributors/suzannealdrich", + "/contributors/szipfel", + "/contributors/tessak22", + "/contributors/wbconnor", + "/contributors/whitneymeredith", + "/contributors/wordsmither", + "/cookies", + "/core-updates", + "/crisis-response-upstream", + "/custom-certificates", + "/custom-upstreams", + "/customer-scheduled-cron-jobs", + "/cygwin-windows", + "/dashboard", + "/date-and-time", + "/debug-cache", + "/debug-connections", + "/debug-slow-performance", + "/deploybot", + "/develop", + "/develop-drupal", + "/develop-wordpress", + "/dns-made-easy", + "/dns-providers", + "/doc-template", + "/dreamhost", + "/drupal-10", + "/drupal-advanced-page-cache", + "/drupal-broken-links", + "/drupal-cache", + "/drupal-caching-views", + "/drupal-cloudfront", + "/drupal-commerce", + "/drupal-composer-managed", + "/drupal-configuration-management", + "/drupal-cron", + "/drupal-from-dist", + "/drupal-launch-check", + "/drupal-migration", + "/drupal-phpstorm", + "/drupal-s3", + "/drupal-security-patches", + "/drupal-to-build-tools", + "/drupal-updates", + "/dyn", + "/email", + "/enom", + "/enterprise-billing-center", + "/external-libraries", + "/faq", + "/gandi", + "/get-started", + "/glossary/", + "/go-live", + "/godaddy", + "/google", + "/guides", + "/guides/accessibility", + "/guides/accessibility/best-practices", + "/guides/accessibility/get-started", + "/guides/accessibility/resources", + "/guides/accessibility/tools", + "/guides/account-mgmt", + "/guides/account-mgmt/account", + "/guides/account-mgmt/account/delete", + "/guides/account-mgmt/account/recover", + "/guides/account-mgmt/account/types", + "/guides/account-mgmt/billing", + "/guides/account-mgmt/billing/invoices", + "/guides/account-mgmt/billing/methods", + "/guides/account-mgmt/billing/periods", + "/guides/account-mgmt/billing/transfer", + "/guides/account-mgmt/billing/troubleshooting", + "/guides/account-mgmt/plans", + "/guides/account-mgmt/plans/faq", + "/guides/account-mgmt/plans/pricing", + "/guides/account-mgmt/plans/resources", + "/guides/account-mgmt/plans/site-plans", + "/guides/account-mgmt/plans/workspace-plans", + "/guides/account-mgmt/traffic", + "/guides/account-mgmt/traffic/overages", + "/guides/account-mgmt/traffic/remedy", + "/guides/account-mgmt/workspace-sites-teams", + "/guides/account-mgmt/workspace-sites-teams/sites", + "/guides/account-mgmt/workspace-sites-teams/teams", + "/guides/account-mgmt/workspace-sites-teams/tools", + "/guides/account-mgmt/workspace-sites-teams/workspaces", + "/guides/acquia", + "/guides/acquia/faq", + "/guides/acquia/migrate", + "/guides/acquia/prepare", + "/guides/acquia/troubleshooting", + "/guides/agcdn", + "/guides/agcdn/agcdn-faq", + "/guides/agcdn/agcdn-features", + "/guides/agcdn/agcdn-wafio", + "/guides/agcdn/submit-request", + "/guides/autopilot", + "/guides/autopilot-custom-upstream", + "/guides/autopilot-custom-upstream/autopilot-custom-upstream-config", + "/guides/autopilot-custom-upstream/wp-autopilot-custom-upstream", + "/guides/autopilot/apply-updates/", + "/guides/autopilot/autopilot-deactivate", + "/guides/autopilot/autopilot-faq/", + "/guides/autopilot/autopilot-preconfiguration/", + "/guides/autopilot/enable-autopilot/", + "/guides/autopilot/tests-results/", + "/guides/autopilot/troubleshoot-autopilot/", + "/guides/backups", + "/guides/backups/access-backups", + "/guides/backups/code-archives-backups-log", + "/guides/backups/create-backups", + "/guides/backups/faqs-backups", + "/guides/backups/restore-from-backup", + "/guides/build-tools/", + "/guides/build-tools/configure/", + "/guides/build-tools/create-project/", + "/guides/build-tools/custom-theme/", + "/guides/build-tools/extend/", + "/guides/build-tools/merge/", + "/guides/build-tools/pr-workflow/", + "/guides/build-tools/tests/", + "/guides/build-tools/update/", + "/guides/create-wp-site", + "/guides/custom-upstream", + "/guides/custom-upstream/create-custom-upstream", + "/guides/custom-upstream/delete-custom-upstream", + "/guides/custom-upstream/edit-custom-upstream", + "/guides/custom-upstream/maintain-custom-upstream", + "/guides/custom-upstream/manage-dependencies-custom-upstream", + "/guides/custom-upstream/switch-custom-upstream", + "/guides/custom-upstream/test-custom-upstream", + "/guides/custom-upstream/troubleshooting", + "/guides/decoupled", + "/guides/decoupled/drupal-backend-starters", + "/guides/decoupled/drupal-backend-starters/build-hooks", + "/guides/decoupled/drupal-backend-starters/caching", + "/guides/decoupled/drupal-backend-starters/create", + "/guides/decoupled/drupal-backend-starters/manage-settings", + "/guides/decoupled/drupal-nextjs-frontend-starters", + "/guides/decoupled/drupal-nextjs-frontend-starters/build-details", + "/guides/decoupled/drupal-nextjs-frontend-starters/caching", + "/guides/decoupled/drupal-nextjs-frontend-starters/content-preview", + "/guides/decoupled/drupal-nextjs-frontend-starters/create", + "/guides/decoupled/drupal-nextjs-frontend-starters/manage-settings", + "/guides/decoupled/drupal-nextjs-frontend-starters/robots-indexing", + "/guides/decoupled/no-starter-kit", + "/guides/decoupled/no-starter-kit/any-framework", + "/guides/decoupled/no-starter-kit/build-details", + "/guides/decoupled/no-starter-kit/create", + "/guides/decoupled/no-starter-kit/import-repo", + "/guides/decoupled/no-starter-kit/manage-settings", + "/guides/decoupled/overview", + "/guides/decoupled/overview/considerations", + "/guides/decoupled/overview/faq", + "/guides/decoupled/overview/fes-multidev", + "/guides/decoupled/overview/manage-settings", + "/guides/decoupled/overview/site", + "/guides/decoupled/overview/site-options", + "/guides/decoupled/overview/support", + "/guides/decoupled/overview/troubleshooting", + "/guides/decoupled/overview/v1-pipeline", + "/guides/decoupled/wp-backend-starters", + "/guides/decoupled/wp-backend-starters/build-hooks", + "/guides/decoupled/wp-backend-starters/caching", + "/guides/decoupled/wp-backend-starters/create", + "/guides/decoupled/wp-backend-starters/manage-settings", + "/guides/decoupled/wp-gatsby-frontend-starters", + "/guides/decoupled/wp-gatsby-frontend-starters/build-details", + "/guides/decoupled/wp-gatsby-frontend-starters/create", + "/guides/decoupled/wp-gatsby-frontend-starters/manage-settings", + "/guides/decoupled/wp-gatsby-frontend-starters/robots-indexing", + "/guides/decoupled/wp-nextjs-frontend-starters", + "/guides/decoupled/wp-nextjs-frontend-starters/build-details", + "/guides/decoupled/wp-nextjs-frontend-starters/caching", + "/guides/decoupled/wp-nextjs-frontend-starters/content-preview", + "/guides/decoupled/wp-nextjs-frontend-starters/create", + "/guides/decoupled/wp-nextjs-frontend-starters/manage-settings", + "/guides/decoupled/wp-nextjs-frontend-starters/robots-indexing", + "/guides/disaster-recovery", + "/guides/disaster-recovery/incident-remediation", + "/guides/disaster-recovery/planning-ahead", + "/guides/disaster-recovery/site-goes-down", + "/guides/domains", + "/guides/domains/custom-domains", + "/guides/domains/dns", + "/guides/domains/domain-hijacking", + "/guides/domains/domains-faq", + "/guides/domains/hosts-file", + "/guides/domains/platform-domains", + "/guides/domains/primary-domain", + "/guides/domains/troubleshooting", + "/guides/domains/vanity-domains", + "/guides/drupal-hosted", + "/guides/drupal-hosted-btworkflow", + "/guides/drupal-hosted-btworkflow/backup-token", + "/guides/drupal-hosted-btworkflow/contrib-custom", + "/guides/drupal-hosted-btworkflow/copy-config", + "/guides/drupal-hosted-btworkflow/database", + "/guides/drupal-hosted-btworkflow/deploy", + "/guides/drupal-hosted-btworkflow/prepare", + "/guides/drupal-hosted-btworkflow/restore-token", + "/guides/drupal-hosted-btworkflow/troubleshooting", + "/guides/drupal-hosted-btworkflow/upload-files", + "/guides/drupal-hosted-createbt", + "/guides/drupal-hosted-createbt/core", + "/guides/drupal-hosted-createbt/deploy", + "/guides/drupal-hosted-createbt/mariadb", + "/guides/drupal-hosted-createbt/prepare", + "/guides/drupal-hosted-createbt/troubleshooting", + "/guides/drupal-hosted-createbt/upgrade", + "/guides/drupal-hosted-createcustom", + "/guides/drupal-hosted-createcustom/contrib-custom", + "/guides/drupal-hosted-createcustom/dependencies", + "/guides/drupal-hosted-createcustom/deploy-dev", + "/guides/drupal-hosted-createcustom/deploy-live", + "/guides/drupal-hosted-createcustom/new-branch", + "/guides/drupal-hosted-createcustom/site-customizations", + "/guides/drupal-hosted-createcustom/troubleshooting", + "/guides/drupal-hosted-createdashboard-set8", + "/guides/drupal-hosted-createdashboard-set8/core-updates", + "/guides/drupal-hosted-createdashboard-set8/deploy", + "/guides/drupal-hosted-createdashboard-set8/drupal-core-version", + "/guides/drupal-hosted-createdashboard-set8/prepare", + "/guides/drupal-hosted-createdashboard-set8/troubleshooting", + "/guides/drupal-hosted-createempty-md", + "/guides/drupal-hosted-createempty-md/change-upstream", + "/guides/drupal-hosted-createempty-md/composer-upstream", + "/guides/drupal-hosted-createempty-md/contrib-custom", + "/guides/drupal-hosted-createempty-md/dependency-versions", + "/guides/drupal-hosted-createempty-md/deploy-dev", + "/guides/drupal-hosted-createempty-md/deploy-live", + "/guides/drupal-hosted-createempty-md/prepare", + "/guides/drupal-hosted-createempty-md/troubleshooting", + "/guides/drupal-hosted-md", + "/guides/drupal-hosted-md/core-updates", + "/guides/drupal-hosted-md/deploy", + "/guides/drupal-hosted-md/drupal-core-version", + "/guides/drupal-hosted-md/prepare", + "/guides/drupal-hosted-md/troubleshooting", + "/guides/drupal-hosted/code", + "/guides/drupal-hosted/create-site", + "/guides/drupal-hosted/deploy", + "/guides/drupal-hosted/prepare", + "/guides/drupal-hosted/troubleshooting", + "/guides/drupal-unhosted", + "/guides/drupal-unhosted-composer", + "/guides/drupal-unhosted-composer/contrib-custom", + "/guides/drupal-unhosted-composer/database", + "/guides/drupal-unhosted-composer/deploy-dev", + "/guides/drupal-unhosted-composer/deploy-live", + "/guides/drupal-unhosted-composer/files", + "/guides/drupal-unhosted-composer/prepare", + "/guides/drupal-unhosted-composer/troubleshooting", + "/guides/drupal-unhosted/add-database", + "/guides/drupal-unhosted/contrib-custom", + "/guides/drupal-unhosted/copy-config", + "/guides/drupal-unhosted/deploy", + "/guides/drupal-unhosted/deploy-dev", + "/guides/drupal-unhosted/prepare", + "/guides/drupal-unhosted/troubleshooting", + "/guides/drupal-unhosted/upload-files", + "/guides/drush", + "/guides/drush/drupal-commandline", + "/guides/drush/drush-aliases", + "/guides/drush/drush-commands", + "/guides/drush/drush-import", + "/guides/drush/drush-known-limitations", + "/guides/drush/drush-sql-queries", + "/guides/drush/drush-versions", + "/guides/drush/troubleshoot-drush", + "/guides/edge-integrations/", + "/guides/edge-integrations/analytics/", + "/guides/edge-integrations/configuration-overview/", + "/guides/edge-integrations/drupal-sdk/", + "/guides/edge-integrations/wordpress-sdk/", + "/guides/enterprise-billing-center", + "/guides/enterprise-billing-center/faq", + "/guides/enterprise-billing-center/interacting", + "/guides/enterprise-billing-center/invoices", + "/guides/enterprise-billing-center/site-portfolio-report", + "/guides/environment-configuration", + "/guides/environment-configuration/environment-indicator", + "/guides/environment-configuration/environment-specific-config", + "/guides/environment-configuration/environment-specific-config-drupal", + "/guides/environment-configuration/read-environment-config", + "/guides/environment-configuration/restore-environment-backup", + "/guides/errors-and-server-responses", + "/guides/errors-and-server-responses/4xx-errors", + "/guides/errors-and-server-responses/5xx-errors", + "/guides/errors-and-server-responses/external-web-service-calls", + "/guides/errors-and-server-responses/overloaded-workers", + "/guides/errors-and-server-responses/retries-server-containers", + "/guides/errors-and-server-responses/slow-and-high-queries", + "/guides/fastly-pantheon", + "/guides/fastly-pantheon/connect-fastly", + "/guides/fastly-pantheon/fastly-amazon-s3", + "/guides/fastly-pantheon/fastly-datadog", + "/guides/fastly-pantheon/fastly-faq", + "/guides/fastly-pantheon/fastly-new-relic", + "/guides/fastly-pantheon/fastly-sftp", + "/guides/fastly-pantheon/fastly-splunk", + "/guides/fastly-pantheon/fastly-syslog", + "/guides/filesystem/", + "/guides/filesystem/batch-files", + "/guides/filesystem/files-directories", + "/guides/filesystem/large-files", + "/guides/filesystem/tmp", + "/guides/filesystem/troubleshooting", + "/guides/frontend-performance", + "/guides/frontend-performance/additional-resources", + "/guides/frontend-performance/caching", + "/guides/frontend-performance/code-css", + "/guides/frontend-performance/diagnostics", + "/guides/frontend-performance/media", + "/guides/frontend-performance/metrics", + "/guides/frontend-performance/queries", + "/guides/frontend-performance/redirects", + "/guides/frontend-performance/static", + "/guides/getstarted", + "/guides/getstarted/addsite", + "/guides/getstarted/launch", + "/guides/getstarted/nextsteps", + "/guides/getstarted/purchase", + "/guides/getstarted/signup", + "/guides/getstarted/team", + "/guides/git", + "/guides/git/collaborative-development", + "/guides/git/faq-git", + "/guides/git/git-config", + "/guides/git/resolve-merge-conflicts", + "/guides/git/troubleshooting", + "/guides/git/undo-commits", + "/guides/git/useful-commands", + "/guides/global-cdn", + "/guides/global-cdn/experience-protection", + "/guides/global-cdn/global-cdn-caching", + "/guides/global-cdn/global-cdn-faq", + "/guides/global-cdn/https", + "/guides/global-cdn/test-global-cdn-caching", + "/guides/guided", + "/guides/guided/faq", + "/guides/guided/migrate", + "/guides/guided/prepare", + "/guides/guided/troubleshooting", + "/guides/integrated-composer", + "/guides/integrated-composer/create", + "/guides/integrated-composer/dependencies", + "/guides/integrated-composer/ic-support", + "/guides/integrated-composer/ic-troubleshooting", + "/guides/integrated-composer/ic-upstreams", + "/guides/kinsta", + "/guides/kinsta/faq", + "/guides/kinsta/migrate", + "/guides/kinsta/prepare", + "/guides/kinsta/troubleshooting", + "/guides/launch/", + "/guides/launch/advanced-curls/", + "/guides/launch/configure-dns/", + "/guides/launch/create-site-launch", + "/guides/launch/domains/", + "/guides/launch/launch-check/", + "/guides/launch/next-steps/", + "/guides/launch/plans/", + "/guides/launch/redirects", + "/guides/local-development", + "/guides/local-development/configuration", + "/guides/local-development/continuous-integration", + "/guides/local-development/cygwin-windows", + "/guides/local-development/ddev", + "/guides/local-development/drupal-phpstorm", + "/guides/local-development/graphql-requests", + "/guides/local-development/jenkins", + "/guides/local-development/lando-wordpress", + "/guides/local-development/visual-studio-code", + "/guides/local-development/wordpress-phpstorm", + "/guides/logs-pantheon", + "/guides/logs-pantheon/access-logs", + "/guides/logs-pantheon/automate-log-downloads", + "/guides/logs-pantheon/faq-logs", + "/guides/logs-pantheon/nginx-access-logs", + "/guides/manual-d8-composer-to-d8", + "/guides/manual-d8-composer-to-d8/contrib-custom", + "/guides/manual-d8-composer-to-d8/database", + "/guides/manual-d8-composer-to-d8/deploy-dev", + "/guides/manual-d8-composer-to-d8/deploy-live", + "/guides/manual-d8-composer-to-d8/files", + "/guides/manual-d8-composer-to-d8/prepare", + "/guides/manual-d8-composer-to-d8/troubleshooting", + "/guides/mariadb-mysql", + "/guides/mariadb-mysql/database-connection-errors", + "/guides/mariadb-mysql/database-workflow-tool", + "/guides/mariadb-mysql/kill-mysql-queries", + "/guides/mariadb-mysql/mariadb-mysql-faq", + "/guides/mariadb-mysql/myisam-to-innodb", + "/guides/mariadb-mysql/mysql-access", + "/guides/mariadb-mysql/mysql-slow-log", + "/guides/mariadb-mysql/mysql-workbench", + "/guides/multidev", + "/guides/multidev/access-branch", + "/guides/multidev/clone-content", + "/guides/multidev/compare-environments", + "/guides/multidev/create-multidev", + "/guides/multidev/delete-multidev", + "/guides/multidev/edit-multidev", + "/guides/multidev/multidev-faq", + "/guides/multisite/", + "/guides/multisite/config/", + "/guides/multisite/considerations/", + "/guides/multisite/debug/", + "/guides/multisite/multisite-governance/", + "/guides/multisite/search-replace/", + "/guides/multisite/workflows/", + "/guides/new-relic", + "/guides/new-relic/activate-new-relic", + "/guides/new-relic/debug-mysql-new-relic", + "/guides/new-relic/monitor-new-relic", + "/guides/new-relic/new-relic-faq", + "/guides/new-relic/new-relic-quicksilver", + "/guides/new-relic/troubleshoot-new-relic", + "/guides/pagely", + "/guides/pagely/faq", + "/guides/pagely/migrate", + "/guides/pagely/prepare", + "/guides/pagely/troubleshooting", + "/guides/pagerduty/", + "/guides/pagerduty/monitor/", + "/guides/pagerduty/next-steps/", + "/guides/pagerduty/notify/", + "/guides/pagerduty/schedule/", + "/guides/pagerduty/slack/", + "/guides/php", + "/guides/php/deprecated-constructor-notices", + "/guides/php/php-errors", + "/guides/php/php-slow-log", + "/guides/php/php-versions", + "/guides/php/settings-php", + "/guides/php/wordpress-sessions", + "/guides/php/wp-config-php", + "/guides/platform-considerations", + "/guides/platform-considerations/media-email-support", + "/guides/platform-considerations/php-platform", + "/guides/platform-considerations/platform-security", + "/guides/platform-considerations/platform-site-info", + "/guides/platform-considerations/terminus-platform", + "/guides/platformsh", + "/guides/platformsh/faq", + "/guides/platformsh/migrate", + "/guides/platformsh/prepare", + "/guides/platformsh/troubleshooting", + "/guides/professional-services", + "/guides/professional-services/advanced-global-cdn", + "/guides/professional-services/application-performance", + "/guides/professional-services/managed-updates", + "/guides/professional-services/onboarding", + "/guides/professional-services/website-migration-service", + "/guides/quicksilver", + "/guides/quicksilver/asana", + "/guides/quicksilver/hooks", + "/guides/quicksilver/install-script", + "/guides/quicksilver/jira", + "/guides/quicksilver/trello", + "/guides/quicksilver/troubleshoot-quicksilver", + "/guides/quicksilver/variables", + "/guides/redirect", + "/guides/redirect/advanced", + "/guides/redirect/https/", + "/guides/redirect/mobile", + "/guides/redirect/php", + "/guides/redirect/primary-domain", + "/guides/secrets", + "/guides/secrets/composer", + "/guides/secrets/drupal", + "/guides/secrets/local", + "/guides/secrets/overview", + "/guides/secrets/php", + "/guides/secrets/troubleshooting", + "/guides/secure-development", + "/guides/secure-development/phpinfo", + "/guides/secure-development/private-paths", + "/guides/secure-development/secure-integration", + "/guides/secure-development/secure-runtime-access", + "/guides/secure-development/security-tool", + "/guides/secure-development/ssh-tunnels", + "/guides/secure-development/two-factor-authentication", + "/guides/security", + "/guides/sftp", + "/guides/sftp/port-2222", + "/guides/sftp/rsync-and-sftp", + "/guides/sftp/sftp-connection-info", + "/guides/sftp/sftp-development", + "/guides/sftp/troubleshooting-sftp", + "/guides/sftp/vscode-sftp", + "/guides/sftp/winscp", + "/guides/solr-drupal", + "/guides/solr-drupal/solr-drupal", + "/guides/solr-drupal/solr-drupal-7", + "/guides/sso", + "/guides/sso/shibboleth-sso", + "/guides/sso/sso", + "/guides/sso/sso-organizations", + "/guides/support/", + "/guides/support/contact-support/", + "/guides/support/curl", + "/guides/support/early-access/", + "/guides/support/faq/", + "/guides/support/har/", + "/guides/support/support-ticket/", + "/guides/woocommerce/", + "/guides/woocommerce/commit/", + "/guides/woocommerce/configure/", + "/guides/woocommerce/develop/", + "/guides/woocommerce/initialize-prod/", + "/guides/woocommerce/launch/", + "/guides/woocommerce/store-setup/", + "/guides/wordpress-composer/pre-ga", + "/guides/wordpress-configurations", + "/guides/wordpress-configurations/installing-updating-from-third-party-sources", + "/guides/wordpress-configurations/mu-plugin", + "/guides/wordpress-configurations/plugins", + "/guides/wordpress-configurations/sendgrid-wordpress-wp-mail-smtp", + "/guides/wordpress-configurations/wordpress-cache-plugin", + "/guides/wordpress-configurations/wordpress-custom-code", + "/guides/wordpress-configurations/wordpress-font-library", + "/guides/wordpress-configurations/wp-cfm", + "/guides/wordpress-developer", + "/guides/wordpress-developer/performant-translations", + "/guides/wordpress-developer/wordpress-best-practices", + "/guides/wordpress-developer/wordpress-broken-links", + "/guides/wordpress-developer/wordpress-cron", + "/guides/wordpress-developer/wordpress-development-versions", + "/guides/wordpress-developer/wordpress-gcs", + "/guides/wordpress-developer/wordpress-login-attacks", + "/guides/wordpress-developer/wordpress-s3", + "/guides/wordpress-developer/wordpress-secrets-management", + "/guides/wordpress-developer/wordpress-solr", + "/guides/wordpress-developer/xml-rpc-attacks", + "/guides/wordpress-git/", + "/guides/wordpress-git/media/", + "/guides/wordpress-git/next-steps/", + "/guides/wordpress-git/plugins/", + "/guides/wordpress-git/remove-editor/", + "/guides/wordpress-git/themes/", + "/guides/wordpress-google-sso/", + "/guides/wordpress-google-sso/access-and-mappings", + "/guides/wordpress-google-sso/advanced-configuration", + "/guides/wordpress-google-sso/going-live", + "/guides/wordpress-google-sso/install/", + "/guides/wordpress-google-sso/saml-app/", + "/guides/wordpress-pantheon/", + "/guides/wordpress-pantheon/create-wp-site", + "/guides/wordpress-pantheon/migrate-existing-wp-site", + "/guides/wordpress-pantheon/plugins", + "/guides/wordpress-pantheon/plugins-recommended", + "/guides/wordpress-pantheon/troubleshooting", + "/guides/wordpress-pantheon/wordpress-developers", + "/guides/wordpress-pantheon/wordpress-launch-check", + "/guides/wordpress-pantheon/wp-content-management", + "/guides/wordpress-pantheon/wp-optimization", + "/guides/wordpress-pantheon/wp-security", + "/guides/wordpressvip", + "/guides/wordpressvip/faq", + "/guides/wordpressvip/migrate", + "/guides/wordpressvip/prepare", + "/guides/wordpressvip/troubleshooting", + "/guides/wp-cli", + "/guides/wp-cli/install-wp-plugins-themes", + "/guides/wp-cli/wp-cli-global-parameters", + "/guides/wp-cli/wp-cli-pantheon-commands", + "/guides/wp-cli/wp-cli-sql-php-subcommands", + "/guides/wp-cli/wp-cli-troubleshoot", + "/guides/wpengine", + "/guides/wpengine/faq", + "/guides/wpengine/migrate", + "/guides/wpengine/prepare", + "/guides/wpengine/troubleshooting", + "/headless", + "/horizontal-scalability", + "/hotfixes", + "/http-to-https", + "/iframeembeds/certification/pressure-on-developers", + "/iframeembeds/certification/pressure-on-it", + "/iframeembeds/certification/what-is-webops", + "/iframeembeds/certification/what-problems-does-webops-solve", + "/inclusive-language", + "/integrations", + "/jenkins", + "/ldap-and-ldaps", + "/load-and-performance-testing", + "/load-testing-with-blazemeter", + "/local-dns-cache", + "/lockr", + "/machine-tokens", + "/manage", + "/migrate-cpanel", + "/migrate-manual", + "/migrate-wordpress", + "/migrate-wordpress-multisite", + "/mime-types", + "/modules", + "/modules-known-issues", + "/modules-plugins-known-issues", + "/monthly-maintenance", + "/multizone-failover", + "/namecheap", + "/nested-docroot", + "/network-solutions", + "/newrelic", + "/object-cache", + "/object-cache/cli", + "/object-cache/drupal", + "/object-cache/errors", + "/object-cache/faq", + "/object-cache/remove", + "/object-cache/wordpress", + "/object-cache/wordpress-deprecated", + "/opensolr", + "/optimize-wp-options-table-autoloaded-data", + "/oss-support-levels", + "/outgoing-ips", + "/overview", + "/pantheon-community", + "/pantheon-workflow", + "/pantheon-yml", + "/pantheon-yml-overview", + "/pantheon_stripped", + "/partial-composer", + "/performance", + "/personal-settings", + "/pingdom-uptime-check", + "/pivotal-tracker", + "/platform", + "/platform-notifications", + "/platform-upgrade", + "/plugins-known-issues", + "/products", + "/regions", + "/relaunch", + "/release-notes/", + "/release-notes/1/", + "/release-notes/10/", + "/release-notes/11/", + "/release-notes/12/", + "/release-notes/13/", + "/release-notes/14/", + "/release-notes/15/", + "/release-notes/16/", + "/release-notes/17/", + "/release-notes/18/", + "/release-notes/19/", + "/release-notes/2/", + "/release-notes/20/", + "/release-notes/2015/01/concerned-about-cve-2015-0235-aka-ghost", + "/release-notes/2015/01/php-upgrade", + "/release-notes/2015/01/supporting-orgs-multi-org", + "/release-notes/2015/02/documentation", + "/release-notes/2015/02/new-wordpress-upstream", + "/release-notes/2015/02/terminus-0-5-released", + "/release-notes/2015/02/try-drupal-8-beta", + "/release-notes/2015/02/varnish-testing-harness", + "/release-notes/2015/03/dashboard-optimization", + "/release-notes/2015/03/documentation", + "/release-notes/2015/03/drupal-7-35-update", + "/release-notes/2015/03/terminus-improvement", + "/release-notes/2015/04/documentation", + "/release-notes/2015/04/edge-cache-configuration-update", + "/release-notes/2015/04/fedora-update", + "/release-notes/2015/04/saml-users", + "/release-notes/2015/04/styx-to-appserver-encryption", + "/release-notes/2015/04/wordpress-core-updates-to-4-2-1", + "/release-notes/2015/04/wordpress-launch-check", + "/release-notes/2015/05/barrel-roll-reboots", + "/release-notes/2015/05/dashboard-load-times", + "/release-notes/2015/05/free-backups", + "/release-notes/2015/05/webinars", + "/release-notes/2015/06/documentation", + "/release-notes/2015/06/improved-workflows-notifications", + "/release-notes/2015/06/single-sign-on-sso-release", + "/release-notes/2015/06/walkme-tours", + "/release-notes/2015/07/documentation", + "/release-notes/2015/07/kalabox-2-pantheon", + "/release-notes/2015/07/multidev-ui-updated", + "/release-notes/2015/07/scripts-to-quickly-make-a-drupal-7-project-using-composer", + "/release-notes/2015/07/wordpress-4-2-3-is-live", + "/release-notes/2015/08/documentation", + "/release-notes/2015/08/nginx-conf-update-for-photon", + "/release-notes/2015/08/php-5-5-opcache-revalidate-freq-value-is-now-set-to-zero", + "/release-notes/2015/08/php-default-arg-separator", + "/release-notes/2015/08/saint-mode-saves-your-images", + "/release-notes/2015/08/terminus-cli-version-0-7-1", + "/release-notes/2015/09/documentation", + "/release-notes/2015/09/login-destination", + "/release-notes/2015/09/pantheon-enterprise-is-now-available", + "/release-notes/2015/09/terminus-0-8-0", + "/release-notes/2015/10/documentation", + "/release-notes/2015/10/drupal-7-defaults-to-php-5-5", + "/release-notes/2015/10/drupal-8-rc2-released-and-available", + "/release-notes/2015/10/edge-cache-upgraded-to-varnish-4", + "/release-notes/2015/10/organization-renaming", + "/release-notes/2015/10/terminus-0-9-2-released", + "/release-notes/2015/10/terminus-commands-updated", + "/release-notes/2015/10/wp-cli-search-replace", + "/release-notes/2015/12/documentation", + "/release-notes/2016/01/documentation", + "/release-notes/2016/01/machine-token-authentication", + "/release-notes/2016/01/pantheon-hud-plugin", + "/release-notes/2016/01/quicksilver-platform-hooks-are-now-available", + "/release-notes/2016/01/terminus-0-10-2-released", + "/release-notes/2016/02/cloud-integration-tools", + "/release-notes/2016/02/code-archives", + "/release-notes/2016/02/documentation", + "/release-notes/2016/02/end-of-life-for-drupal-6", + "/release-notes/2016/02/platform-domains", + "/release-notes/2016/02/terminus-0-10-2-released", + "/release-notes/2016/02/wordpress-at-scale", + "/release-notes/2016/02/wordpress-core-updates", + "/release-notes/2016/03/documentation", + "/release-notes/2016/03/freezing-inactive-sites", + "/release-notes/2016/03/terminus-0-11-0-released", + "/release-notes/2016/04/documentation", + "/release-notes/2016/04/new-terminus-plugins-for-quicksilver-integrations", + "/release-notes/2016/04/terminus-0-11-1-released", + "/release-notes/2016/04/workflow-tab-renamed-to-databases-files", + "/release-notes/2016/05/pantheon-enterprise-support-now-available", + "/release-notes/2016/05/terminus-0-11-1", + "/release-notes/2016/06/drupal-8-site-imports-now-supported", + "/release-notes/2016/06/new-migration-button-on-the-dashboard", + "/release-notes/2016/06/new-reliable-screenshots-microservice-&-user-dashboard-design-update", + "/release-notes/2016/06/new-relic-pro", + "/release-notes/2016/07/documentation", + "/release-notes/2016/07/drupal-contrib-module-security-updates", + "/release-notes/2016/07/migrating-wordpress-sites-to-pantheon-just-got-easier", + "/release-notes/2016/07/terminus-0-11-2", + "/release-notes/2016/07/tls-1-0-deprecated", + "/release-notes/2016/08/advanced-site-configurations-available", + "/release-notes/2016/08/documentation", + "/release-notes/2016/08/new-hooks-for-quicksilver-platform-integration", + "/release-notes/2016/08/php-5-6-7-0-released", + "/release-notes/2016/08/solr-power-for-wordpress-0-5-update", + "/release-notes/2016/08/terminus-0-12-0", + "/release-notes/2016/09/bug-fixes", + "/release-notes/2016/09/dashboard-design-updates", + "/release-notes/2016/09/documentation", + "/release-notes/2016/09/drush_version-is-now-managed-in-pantheon-yml", + "/release-notes/2016/09/kalabox-2-0-is-available", + "/release-notes/2016/09/terminus-0-13-2", + "/release-notes/2016/10/custom-domains-in-multidev-environments", + "/release-notes/2016/10/documentation", + "/release-notes/2016/10/solr-power-for-wordpress-0-6-update", + "/release-notes/2016/10/terminus-1-0-alpha-release", + "/release-notes/2016/11/chat-support", + "/release-notes/2016/11/drupal-6-long-term-support-(lts)-partners", + "/release-notes/2016/11/drupal-core-updates", + "/release-notes/2016/11/early-release-pantheon-advanced-page-cache-plugin", + "/release-notes/2016/11/new-relic-agent-upgrade", + "/release-notes/2016/11/php-upgrade", + "/release-notes/2016/11/platform-security-update", + "/release-notes/2016/11/terminus-0-13-4-and-terminus-1-0-alpha", + "/release-notes/2016/12/documentation", + "/release-notes/2016/12/drupal-core-updates", + "/release-notes/2016/12/privacy-shield-framework-compliance", + "/release-notes/2016/12/supported-mime-types", + "/release-notes/2016/12/terminus-manual-and-terminus-1-0-beta-releases", + "/release-notes/2016/12/upgraded-wp-cli", + "/release-notes/2016/12/wordpress-4-7-core-update", + "/release-notes/2016/12/wordpress-4-7-security-patches", + "/release-notes/2017/01/drupal-8-2-5-upgrade", + "/release-notes/2017/01/terminus-1-0", + "/release-notes/2017/01/terminus-plugins", + "/release-notes/2017/01/wordpress-4-7-2-upgrade", + "/release-notes/2017/02/documentation", + "/release-notes/2017/02/drupal-core-upgrade", + "/release-notes/2017/02/patched-for-linux-kernel-vulnerability", + "/release-notes/2017/02/php-upgrade", + "/release-notes/2017/03/documentation", + "/release-notes/2017/03/drupal-core-upgrades", + "/release-notes/2017/03/wp-cli-upgrade", + "/release-notes/2017/04/bug-fixes", + "/release-notes/2017/04/documentation", + "/release-notes/2017/04/drupal-core-upgrades", + "/release-notes/2017/04/terminus-1-3-0", + "/release-notes/2017/04/wordpress-upgrades", + "/release-notes/2017/05/documentation", + "/release-notes/2017/05/drupal-core-upgrades", + "/release-notes/2017/05/php-upgrade", + "/release-notes/2017/05/platform-security", + "/release-notes/2017/06/core-upgrades", + "/release-notes/2017/06/default-php-versions", + "/release-notes/2017/06/documentation", + "/release-notes/2017/06/new-relic", + "/release-notes/2017/06/pantheon-upstream-configuration", + "/release-notes/2017/06/terminus-1-4-0", + "/release-notes/2017/06/wp-cli", + "/release-notes/2017/07/custom-upstreams-self-serve-github-and-bitbucket", + "/release-notes/2017/07/documentation", + "/release-notes/2017/07/drupal-8-with-redirect-and-simple-xml-sitemap-modules-now-supported", + "/release-notes/2017/07/drupal-core-upgrades", + "/release-notes/2017/07/nginx-web-server-integer-overflow-vulnerability-mitigated", + "/release-notes/2017/07/terminus-1-4-1", + "/release-notes/2017/08/documentation", + "/release-notes/2017/08/drupal-core-upgrades", + "/release-notes/2017/08/global-cdn-surrogate-key-cache-clearing-api-improvement", + "/release-notes/2017/08/php-upgrades", + "/release-notes/2017/08/terminus-1-5", + "/release-notes/2017/08/wordpress-core-upgrades", + "/release-notes/2017/09/documentation", + "/release-notes/2017/09/new-relic", + "/release-notes/2017/09/wp-cli", + "/release-notes/2017/09/wp-native-php-sessions", + "/release-notes/2017/10/custom-upstreams", + "/release-notes/2017/10/documentation", + "/release-notes/2017/10/php-7-1-&-ioncube-decoder", + "/release-notes/2017/10/terminus-1-6", + "/release-notes/2017/10/webp-image-support", + "/release-notes/2017/10/wordpress-core-upgrades", + "/release-notes/2017/11/documentation", + "/release-notes/2017/11/drupal-core-upgrades", + "/release-notes/2017/11/site-dashboard-update", + "/release-notes/2017/11/sites-requiring-upgrade-to-global-cdn-now-shown-on-user-&-org-dashboards", + "/release-notes/2017/11/wordpress-core-upgrades", + "/release-notes/2017/12/bug-fixes-and-improvements", + "/release-notes/2017/12/documentation", + "/release-notes/2017/12/drupal-core-upgrades", + "/release-notes/2017/12/php-upgrades", + "/release-notes/2018/01/documentation", + "/release-notes/2018/01/drupal-core-upgrades", + "/release-notes/2018/01/launch-check-now-supports-drupal-8", + "/release-notes/2018/01/new-relic-php-7-2-support", + "/release-notes/2018/01/pantheon-moves-to-google-cloud-platform", + "/release-notes/2018/01/php-upgrades", + "/release-notes/2018/01/registry-rebuild-upgrade", + "/release-notes/2018/01/wordpress-core-upgrade", + "/release-notes/2018/01/wp-cli-upgrades", + "/release-notes/2018/02/custom-upstream-quicksilver-enhancement", + "/release-notes/2018/02/drupal-core-upgrades", + "/release-notes/2018/02/legacy-ssl-add-on-price-increase", + "/release-notes/2018/02/php-updates", + "/release-notes/2018/02/wordpress-core-upgrade", + "/release-notes/2018/03/drupal-core-upgrades", + "/release-notes/2018/03/global-cdn-surrogate-key-raw-disabled-by-default", + "/release-notes/2018/03/php-security-upgrades", + "/release-notes/2018/03/terminus-1-8", + "/release-notes/2018/03/wordpress-core-upgrade", + "/release-notes/2018/04/documentation", + "/release-notes/2018/04/drupal-core-upgrades", + "/release-notes/2018/04/ocsp-stapling-enabled-on-global-cdn", + "/release-notes/2018/04/testing-seo-now-supported-on-platform-domains", + "/release-notes/2018/04/wordpress-core-upgrade", + "/release-notes/2018/05/documentation", + "/release-notes/2018/05/duplicate-pantheon-sites-with-terminus-site-clone", + "/release-notes/2018/05/filemount-configuration", + "/release-notes/2018/05/php-7-2-ms-sql-support", + "/release-notes/2018/05/php-updates", + "/release-notes/2018/05/upgrade-to-php-7-1-or-7-2-before-december", + "/release-notes/2018/05/wordpress-core-upgrade", + "/release-notes/2018/07/crawler-access-to-platform-domains", + "/release-notes/2018/07/documentation", + "/release-notes/2018/07/drupal-8-5-5", + "/release-notes/2018/07/terminus-1-8-1", + "/release-notes/2018/07/wordpress-4-9-7", + "/release-notes/2018/08/apache-tika-update", + "/release-notes/2018/08/documentation", + "/release-notes/2018/08/https-provisioning-accelerated", + "/release-notes/2018/08/php-upgrades", + "/release-notes/2018/09/drupal-7-59", + "/release-notes/2018/09/drupal-8-5-6", + "/release-notes/2018/09/new-php-default-versions-for-pantheon-maintained-upstreams", + "/release-notes/2018/09/php-upgrades", + "/release-notes/2018/09/wordpress-4-9-8", + "/release-notes/2018/10/documentation", + "/release-notes/2018/10/drupal-8-6-1", + "/release-notes/2018/10/drupal-maintenance-mode-imagecache-fix", + "/release-notes/2018/10/improve-email-deliverability-with-spf-records", + "/release-notes/2018/10/php-version-updates", + "/release-notes/2018/11/drupal-7-60", + "/release-notes/2018/11/drupal-8-6-2", + "/release-notes/2018/11/php-7-2-11-and-7-1-23", + "/release-notes/2018/12/documentation", + "/release-notes/2018/12/drupal-8-6-3-and-7-61-now-available-as-1-click-updates", + "/release-notes/2018/12/multidev-access", + "/release-notes/2018/12/partner-program", + "/release-notes/2018/12/php-updates", + "/release-notes/2019/01/disaster-recovery", + "/release-notes/2019/01/documentation", + "/release-notes/2019/01/drupal-8-6-5-and-wordpress-5-0-1-now-available-as-1-click-updates", + "/release-notes/2019/02/drupal-8-6-7,-7-63,-and-wordpress-5-0-3-now-available-as-1-click-updates", + "/release-notes/2019/02/new-relic-php-agent-upgraded", + "/release-notes/2019/02/php-7-2-and-7-1-updated", + "/release-notes/2019/02/php-intl-extension-now-available", + "/release-notes/2019/03/documentation", + "/release-notes/2019/03/drupal-8-6-10,-7-64,-and-wordpress-5-1-now-available-as-1-click-updates", + "/release-notes/2019/03/eu-region-early-access", + "/release-notes/2019/03/php-7-2-updated", + "/release-notes/2019/03/terminus-2-0-released!", + "/release-notes/2019/03/wordpress-launch-check-shows-vulnerability-info", + "/release-notes/2019/04/community-updates", + "/release-notes/2019/04/documentation", + "/release-notes/2019/04/drupal-core-upgrades", + "/release-notes/2019/04/pantheon-heroes", + "/release-notes/2019/04/wordpress-5-1-1", + "/release-notes/2019/05/disaster-recovery-now-supports-redis-cache", + "/release-notes/2019/05/drupal-core-updates-available", + "/release-notes/2019/05/european-union-region-in-limited-availability", + "/release-notes/2019/05/new-relic-agent-upgraded", + "/release-notes/2019/05/pantheon-heroes", + "/release-notes/2019/05/php-7-3-default-for-drupal-8-and-wordpress-sites", + "/release-notes/2019/05/site-files-and-backups-moved-to-google-cloud", + "/release-notes/2019/05/terminus-2-0-1-release", + "/release-notes/2019/06/australia-and-canada-regions-in-limited-availability", + "/release-notes/2019/06/drupal-core-updates-available", + "/release-notes/2019/06/php-7-1,-7-2,-and-7-3-updated", + "/release-notes/2019/06/wordpress-5-2-1", + "/release-notes/2019/07/dns-recommendations-update", + "/release-notes/2019/07/drupal-core-updates-available", + "/release-notes/2019/07/general-availability-for-new-regions", + "/release-notes/2019/07/more-consistent-cron-runs", + "/release-notes/2019/07/wordpress-5-2-2-update-available", + "/release-notes/2019/08/drupal-core-updates-available", + "/release-notes/2019/08/new-relic-php-agent-upgrade", + "/release-notes/2019/09/drupal-core-updates-available", + "/release-notes/2019/09/php-7-1,-7-2-and-7-3-updated", + "/release-notes/2019/10/documentation", + "/release-notes/2019/10/drupal-core-updates-available", + "/release-notes/2019/10/pantheon-now-enforces-https-by-default", + "/release-notes/2019/10/platform-robots-txt-now-allows-swiftbot", + "/release-notes/2019/10/wordpress-5-2-3", + "/release-notes/2019/11/documentation", + "/release-notes/2019/11/drupal-8-7-8", + "/release-notes/2019/11/pantheon-localdev-0-5-6", + "/release-notes/2019/11/php-7-1,-7-2,-and-7-3-updated", + "/release-notes/2019/11/wordpress-5-2-4", + "/release-notes/2019/12/documentation", + "/release-notes/2019/12/drupal-8-7-10", + "/release-notes/2019/12/php-7-2,-and-7-3-updated", + "/release-notes/2019/12/wordpress-5-3", + "/release-notes/2020/01/drupal-8-8-1-and-7-69", + "/release-notes/2020/01/localdev-0-6-0-beta-9-released", + "/release-notes/2020/01/php-7-2-and-7-3-updated", + "/release-notes/2020/01/security-enhancement-outgoing-udp-traffic-blocked", + "/release-notes/2020/01/terminus-now-runs-site-local-drush-&-wp-cli", + "/release-notes/2020/01/wordpress-5-3-2", + "/release-notes/2020/02/drush-8-3-2-released", + "/release-notes/2020/02/localdev-0-7-0-released", + "/release-notes/2020/02/php-7-3-14-and-7-2-27-updated", + "/release-notes/2020/02/terminus-2-3-0-released", + "/release-notes/2020/03/advanced-global-cdn", + "/release-notes/2020/03/documentation", + "/release-notes/2020/03/drupal-8-8-2-released", + "/release-notes/2020/03/drush-10", + "/release-notes/2020/03/global-cdn-network-expansion", + "/release-notes/2020/04/documentation", + "/release-notes/2020/04/drupal-8-8-4", + "/release-notes/2020/04/localdev-0-9-3", + "/release-notes/2020/04/new-relic-agent-9-7-0-258", + "/release-notes/2020/04/wp-cli-2-4-0", + "/release-notes/2020/05/documentation", + "/release-notes/2020/05/drupal-8-8-5", + "/release-notes/2020/05/early-access-to-drupal-9-with-integrated-composer", + "/release-notes/2020/05/localdev-0-10-0", + "/release-notes/2020/05/multidev-cloud-environments-offer", + "/release-notes/2020/05/wordpress-5-4-1", + "/release-notes/2020/06/documentation", + "/release-notes/2020/06/drupal-7-70", + "/release-notes/2020/06/drupal-8-8-6", + "/release-notes/2020/06/drupal-9-0", + "/release-notes/2020/06/global-cdn", + "/release-notes/2020/06/go-live-enhancements", + "/release-notes/2020/06/localdev-0-10-0", + "/release-notes/2020/06/resources-to-navigate-covid-19", + "/release-notes/2020/07/documentation", + "/release-notes/2020/07/drupal-8-9-1,-8-8-8,-and-7-72", + "/release-notes/2020/07/drupal-9-0", + "/release-notes/2020/07/localdev-0-10-1", + "/release-notes/2020/07/multidev-and-covid-response-site-offers", + "/release-notes/2020/07/terminus-2-4-0", + "/release-notes/2020/07/traffic-metrics", + "/release-notes/2020/07/wordpress-5-4-2", + "/release-notes/2020/08/dedicated-certificates-&-updated-go-live", + "/release-notes/2020/08/drupal-8-9-2", + "/release-notes/2020/08/drupal-9-0", + "/release-notes/2020/08/multidev-and-covid-response-site-offers", + "/release-notes/2020/09/drupal-8-9-3", + "/release-notes/2020/09/drupal-9-0", + "/release-notes/2020/09/wordpress-5-5", + "/release-notes/2020/10/documentation", + "/release-notes/2020/10/drupal-7-73", + "/release-notes/2020/10/drupal-8-8-10", + "/release-notes/2020/10/drupal-8-9-6", + "/release-notes/2020/10/drupal-9-preview-multidev-script", + "/release-notes/2020/10/php-7-3-22-and-7-4-10-updated", + "/release-notes/2020/10/wordpress-5-5-1", + "/release-notes/2020/11/documentation", + "/release-notes/2020/11/drupal-8-9-7", + "/release-notes/2020/11/drupal-9", + "/release-notes/2020/12/documentation", + "/release-notes/2020/12/drupal-7-74", + "/release-notes/2020/12/drupal-8-9-9", + "/release-notes/2020/12/drupal-9-with-one-click-composer-updates", + "/release-notes/2020/12/wordpress-5-5-3", + "/release-notes/2021/01/documentation", + "/release-notes/2021/01/drupal-8-9-11", + "/release-notes/2021/01/drupal-9-with-one-click-composer-updates", + "/release-notes/2021/01/wordpress-5-6", + "/release-notes/2021/02/documentation", + "/release-notes/2021/02/drupal-7-78", + "/release-notes/2021/02/drupal-8-9-13", + "/release-notes/2021/02/drupal-9-with-one-click-composer-updates", + "/release-notes/2021/02/localdev-1-0-1", + "/release-notes/2021/03/documentation", + "/release-notes/2021/03/drupal-9-with-one-click-composer-updates", + "/release-notes/2021/03/wordpress-5-6-1", + "/release-notes/2021/04/convert-your-drupal-8-pantheon-site-to-drupal-9-with-integrated-composer", + "/release-notes/2021/04/documentation", + "/release-notes/2021/04/wordpress-5-7", + "/release-notes/2021/05/documentation", + "/release-notes/2021/05/drupal-7-80", + "/release-notes/2021/05/drupal-8-9-14", + "/release-notes/2021/05/drupal-9-1-7", + "/release-notes/2021/05/wordpress-5-7-1", + "/release-notes/2021/06/documentation", + "/release-notes/2021/06/drupal-8-9-15", + "/release-notes/2021/06/drupal-9-1-8", + "/release-notes/2021/06/wordpress-5-7-2", + "/release-notes/2021/06/wp-cli-2-5-0", + "/release-notes/2021/07/documentation", + "/release-notes/2021/07/drupal-7-81", + "/release-notes/2021/07/drupal-8-9-16", + "/release-notes/2021/07/drupal-9-2-0", + "/release-notes/2021/07/wordpress-5-7-2", + "/release-notes/2021/08/documentation", + "/release-notes/2021/08/drupal-7-82", + "/release-notes/2021/08/drupal-8-9-17", + "/release-notes/2021/08/drupal-9-2-0", + "/release-notes/2021/08/wordpress-5-8", + "/release-notes/2021/09/documentation", + "/release-notes/2021/09/drupal-7-82", + "/release-notes/2021/09/drupal-8-9-18", + "/release-notes/2021/09/drupal-9-2-3", + "/release-notes/2021/10/documentation", + "/release-notes/2021/10/drupal-8-9-19", + "/release-notes/2021/10/drupal-9-2-6", + "/release-notes/2021/10/wordpress-5-8-1", + "/release-notes/2021/11/documentation", + "/release-notes/2021/11/drupal-9-2-7", + "/release-notes/2021/12/documentation", + "/release-notes/2021/12/drupal-8-9-20", + "/release-notes/2021/12/drupal-9-2-8", + "/release-notes/2021/12/wordpress-5-8-2", + "/release-notes/2022/01/documentation", + "/release-notes/2022/01/drupal-9", + "/release-notes/2022/01/legacy-edge-shutdown-update", + "/release-notes/2022/01/new-and-improved-workspace-switcher", + "/release-notes/2022/01/one-click-database-and-php-upgrades", + "/release-notes/2022/01/terminus", + "/release-notes/2022/02/documentation", + "/release-notes/2022/02/drupal-9-2-11", + "/release-notes/2022/02/drupal-9-3-3", + "/release-notes/2022/02/email-preferences-in-the-new-dashboard", + "/release-notes/2022/02/wordpress-5-9", + "/release-notes/2022/03/documentation", + "/release-notes/2022/03/drupal-9-2-13", + "/release-notes/2022/03/drupal-9-3-6", + "/release-notes/2022/03/wordpress-5-9-1", + "/release-notes/2022/04/documentation", + "/release-notes/2022/04/drupal-9-2-16", + "/release-notes/2022/04/drupal-9-3-9", + "/release-notes/2022/05/documentation", + "/release-notes/2022/05/drupal-9-2-18", + "/release-notes/2022/05/drupal-9-3-12", + "/release-notes/2022/06/documentation", + "/release-notes/2022/06/drupal-9-2-20", + "/release-notes/2022/06/drupal-9-3-14", + "/release-notes/2022/06/wordpress-6-0", + "/release-notes/2022/07/documentation", + "/release-notes/2022/07/drupal-9-2-20", + "/release-notes/2022/07/drupal-9-3-17", + "/release-notes/2022/07/drupal-9-4-1", + "/release-notes/2022/07/wordpress-6-0-1", + "/release-notes/2022/08/documentation", + "/release-notes/2022/08/drupal-9-3-21", + "/release-notes/2022/08/drupal-9-4-5", + "/release-notes/2022/08/wordpress-6-0-1", + "/release-notes/2022/09/documentation", + "/release-notes/2022/09/drupal-9-4-5", + "/release-notes/2022/09/php-8-1", + "/release-notes/2022/09/wordpress-6-0-2", + "/release-notes/2022/09/wordpress-composer-managed-upstream-in-early-access", + "/release-notes/2022/10/documentation", + "/release-notes/2022/10/drupal-9-3-22", + "/release-notes/2022/10/drupal-9-4-5", + "/release-notes/2022/10/new-dashboard", + "/release-notes/2022/11/autopilot", + "/release-notes/2022/11/documentation", + "/release-notes/2022/11/drupal-9-3-22", + "/release-notes/2022/11/drupal-9-4-8", + "/release-notes/2022/11/new-dashboard", + "/release-notes/2022/11/wordpress-6-1", + "/release-notes/2022/12/drupal-10", + "/release-notes/2022/12/drupal-9-4-8", + "/release-notes/2022/12/drupal-9-5-0", + "/release-notes/2022/12/wordpress-6-1-1", + "/release-notes/2023/01/drupal-10-0-2", + "/release-notes/2023/01/drupal-9-4-9", + "/release-notes/2023/01/drupal-9-5-2", + "/release-notes/2023/02/documentation", + "/release-notes/2023/02/drupal-10-0-3", + "/release-notes/2023/02/drupal-9-4-11", + "/release-notes/2023/02/drupal-9-5-3", + "/release-notes/2023/02/enterprise-billing-center", + "/release-notes/2023/02/front-end-sites", + "/release-notes/2023/02/localdev", + "/release-notes/2023/02/pantheon-learning", + "/release-notes/2023/02/pantheon-object-cache", + "/release-notes/2023/02/roles-and-permissions", + "/release-notes/2023/02/wordpress-6-1-1", + "/release-notes/2023/02/wordpress-multisite", + "/release-notes/2023/05/cache-hit-ratio-metrics", + "/release-notes/2023/05/wordpress-6-2", + "/release-notes/2023/06/launch-check-updates", + "/release-notes/2023/06/wordpress-6-2-1", + "/release-notes/2023/06/wp-cli-2-8-0", + "/release-notes/2023/07/deprecation-of-obsolete-tls-1-2-cipher-suites", + "/release-notes/2023/07/drupal-7-98", + "/release-notes/2023/07/integrated-composer", + "/release-notes/2023/07/wp-cli-2-8-1", + "/release-notes/2023/09/drupal-sa-core-2023-006", + "/release-notes/2023/09/early-access-customer-scheduled-jobs", + "/release-notes/2023/09/early-access-streamlined-user-offboarding", + "/release-notes/2023/09/front-end-sites-enhancements", + "/release-notes/2023/09/new-php-defaults", + "/release-notes/2023/09/object-cache-pro", + "/release-notes/2023/09/pantheon-advanced-page-cache-wordpress-plugin-updates", + "/release-notes/2023/09/php-security-updates", + "/release-notes/2023/09/solr-search-for-wordpress-2-5-0-update", + "/release-notes/2023/09/wordpress-multisite-search-and-replace", + "/release-notes/2023/10/design-system-integration-docs", + "/release-notes/2023/10/drupal-security-update", + "/release-notes/2023/10/front-end-sites-settings", + "/release-notes/2023/10/php-8-1-and-8-2-updated-to-their-latest-patch-releases", + "/release-notes/2023/10/php-memory-limits-updates", + "/release-notes/2023/10/wpml-improved-edge-caching-compatibility-cache-hit-ratio-increased-24-percent", + "/release-notes/2023/11/composer-logs-visibility", + "/release-notes/2023/11/faster-backups", + "/release-notes/2023/11/front-end-sites-build-caching-and-node-js-versions", + "/release-notes/2023/11/streamlined-user-offboarding", + "/release-notes/2023/11/vpat-issued-for-product-accessibility", + "/release-notes/2023/11/wordpress-native-php-sessions-1-4-update", + "/release-notes/2023/12/delete-front-end-sites-multidevs-directly-from-dashboard-for-streamlined-management", + "/release-notes/2023/12/elevated-experience-with-front-end-sites-drupal-starter-kit", + "/release-notes/2023/12/optimized-monitoring-for-high-volume-directories", + "/release-notes/2023/12/upgraded-security-measures-for-uninterrupted-webops-experience", + "/release-notes/2024/01/drupal-7-99-release-bug fixes-and-feature-enhancements", + "/release-notes/2024/01/pantheon-release-notes-a-new-year-a-new-chapter", + "/release-notes/2024/01/wordpress-6-4-2-security-update", + "/release-notes/2024/01/wordpress-6-4-3", + "/release-notes/2024/01/wp-cli-v2-9-0-release-now-available-on-pantheon", + "/release-notes/2024/02/php-8.3.3-8.2.16-8.1.27", + "/release-notes/2024/02/wp-cli-2-10", + "/release-notes/2024/02/wp-cli-changes", + "/release-notes/2024/03/PHP-7-1-EOS", + "/release-notes/2024/03/drupal-7-100", + "/release-notes/2024/03/overages-policy-change", + "/release-notes/2024/03/pantheon-advanced-page-cache-1.5.0", + "/release-notes/2024/03/pantheon-mu-plugin-1-3-2", + "/release-notes/2024/03/pantheon-mu-plugin-1-3-3", + "/release-notes/2024/03/papc-drupal-file-cache", + "/release-notes/2024/03/php-8-2-8-3", + "/release-notes/2024/03/terminus-github-action-sessions-cache", + "/release-notes/2024/04/community-slack", + "/release-notes/2024/04/ea-workflow-logs", + "/release-notes/2024/04/enhanced-support-ticket-search-functionality", + "/release-notes/2024/04/new-relic-agent", + "/release-notes/2024/04/pantheon-mu-plugin-1-4-0-update", + "/release-notes/2024/04/php-8-3-recommended", + "/release-notes/2024/04/php-81-82-82", + "/release-notes/2024/04/sftp-authentication-changes", + "/release-notes/2024/04/solr-power-2-5-3", + "/release-notes/2024/04/wordpress-6-5", + "/release-notes/2024/04/wordpress-6-5-2", + "/release-notes/2024/04/wordpress-composer-managed-update", + "/release-notes/2024/04/wordpress-pantheon-mu-plugin-1-4-1-update", + "/release-notes/2024/05/5xx-error-messages", + "/release-notes/2024/05/Synthetics-Check-Limits", + "/release-notes/2024/05/load-balancing", + "/release-notes/2024/05/new-relic-agent-update-released", + "/release-notes/2024/05/pantheon-advanced-page-cache-2-0", + "/release-notes/2024/05/pantheon-mu-plugin-1-4-2-update", + "/release-notes/2024/05/pantheon-mu-plugin-1-4-3-update", + "/release-notes/2024/05/php-82-83", + "/release-notes/2024/05/sendgrid-transactional-emails", + "/release-notes/2024/05/wordpress-6-5-3-update", + "/release-notes/2024/06/drupal-7-101", + "/release-notes/2024/06/login-update", + "/release-notes/2024/06/pantheon-mu-plugin-1-4-4-wordpress-composer-managed-update", + "/release-notes/2024/06/php-81-82-83-updates", + "/release-notes/2024/06/quicksilver-examples-new-relic", + "/release-notes/2024/06/release-note-multi-select-filter", + "/release-notes/2024/06/wordpress-6-5-4", + "/release-notes/2024/06/wordpress-6-5-5", + "/release-notes/2024/07/domain-validation", + "/release-notes/2024/07/new-relic-agent-update-released", + "/release-notes/2024/07/new-relic-v2-api-migration", + "/release-notes/2024/07/pantheon-mu-plugin-1-4-5", + "/release-notes/2024/07/pantheon-mu-plugin-1-5-0", + "/release-notes/2024/07/php-82-83", + "/release-notes/2024/07/php-defaults", + "/release-notes/2024/07/platform-robots-txt-now-supports-pope-tech", + "/release-notes/2024/07/rss-feed", + "/release-notes/2024/07/wordpress-6-6", + "/release-notes/2024/07/wordpress-6-6-1", + "/release-notes/2024/07/wordpress-composer-managed-1-31-0-update", + "/release-notes/2024/07/wordpress-composer-managed-1-31-1-update", + "/release-notes/2024/07/workflow-logs", + "/release-notes/2024/08/launchcheck-0-8-0", + "/release-notes/2024/08/overage-charges-updates", + "/release-notes/2024/08/pantheon-advanced-page-cache-2-1-0", + "/release-notes/2024/08/pantheon-secrets-limited-availability", + "/release-notes/2024/08/prevent-filesystem-overload", + "/release-notes/2024/08/site-plan-checkout-experience", + "/release-notes/2024/08/wordpress-composer-managed-1-32-0", + "/release-notes/2024/08/wordpress-composer-managed-1-32-1", + "/release-notes/2024/09/domain-verification", + "/release-notes/2024/09/emergency-ticket-workspace-phase1", + "/release-notes/2024/09/pantheon-mu-plugin-1-5-1", + "/release-notes/2024/09/php-82-83", + "/release-notes/2024/09/rss-bug-fix", + "/release-notes/2024/09/terminus-360", + "/release-notes/2024/09/wordpress-662", + "/release-notes/2024/09/wordpress-composer-managed-1-32-2", + "/release-notes/2024/09/wordpress-composer-managed-1-32-3", + "/release-notes/2024/09/wp-cli-2-11", + "/release-notes/2024/10/drupal-11-site-creation", + "/release-notes/2024/10/drupal-7-lts", + "/release-notes/2024/10/gravityforms-bug-fix", + "/release-notes/2024/10/new-relic-agent", + "/release-notes/2024/10/php-81-82-83", + "/release-notes/21/", + "/release-notes/22/", + "/release-notes/23/", + "/release-notes/24/", + "/release-notes/25/", + "/release-notes/26/", + "/release-notes/27/", + "/release-notes/28/", + "/release-notes/29/", + "/release-notes/3/", + "/release-notes/30/", + "/release-notes/31/", + "/release-notes/32/", + "/release-notes/33/", + "/release-notes/34/", + "/release-notes/35/", + "/release-notes/36/", + "/release-notes/37/", + "/release-notes/38/", + "/release-notes/39/", + "/release-notes/4/", + "/release-notes/40/", + "/release-notes/41/", + "/release-notes/42/", + "/release-notes/43/", + "/release-notes/44/", + "/release-notes/45/", + "/release-notes/46/", + "/release-notes/47/", + "/release-notes/48/", + "/release-notes/49/", + "/release-notes/5/", + "/release-notes/50/", + "/release-notes/51/", + "/release-notes/52/", + "/release-notes/53/", + "/release-notes/54/", + "/release-notes/55/", + "/release-notes/56/", + "/release-notes/57/", + "/release-notes/58/", + "/release-notes/59/", + "/release-notes/6/", + "/release-notes/60/", + "/release-notes/61/", + "/release-notes/62/", + "/release-notes/63/", + "/release-notes/64/", + "/release-notes/65/", + "/release-notes/66/", + "/release-notes/67/", + "/release-notes/68/", + "/release-notes/69/", + "/release-notes/7/", + "/release-notes/70/", + "/release-notes/71/", + "/release-notes/72/", + "/release-notes/73/", + "/release-notes/8/", + "/release-notes/9/", + "/required-reading", + "/rerouting-outbound-email", + "/resetting-passwords", + "/route53", + "/search/", + "/sendgrid", + "/server_name-and-server_port", + "/services-yml", + "/sign-up", + "/single-application-sites", + "/site-dashboard", + "/solr", + "/ssh-keys", + "/start-state", + "/static-site-empty-upstream", + "/style-guide", + "/support", + "/supported-drupal", + "/supported-wp", + "/switch-drupal-recommended-upstream", + "/symlinks-assumed-write-access", + "/tax-exempt-status", + "/terminus", + "/terminus-demo", + "/terminus-drupal-site-management", + "/terminus-overview", + "/terminus/ci/bitbucket", + "/terminus/ci/circleci", + "/terminus/ci/github-actions", + "/terminus/ci/gitlab", + "/terminus/commands", + "/terminus/commands/aliases", + "/terminus/commands/art", + "/terminus/commands/art-list", + "/terminus/commands/auth-login", + "/terminus/commands/auth-logout", + "/terminus/commands/auth-whoami", + "/terminus/commands/backup-automatic-disable", + "/terminus/commands/backup-automatic-enable", + "/terminus/commands/backup-automatic-info", + "/terminus/commands/backup-create", + "/terminus/commands/backup-get", + "/terminus/commands/backup-info", + "/terminus/commands/backup-list", + "/terminus/commands/backup-restore", + "/terminus/commands/branch-list", + "/terminus/commands/completion", + "/terminus/commands/connection-info", + "/terminus/commands/connection-set", + "/terminus/commands/dashboard-view", + "/terminus/commands/domain-add", + "/terminus/commands/domain-dns", + "/terminus/commands/domain-list", + "/terminus/commands/domain-lookup", + "/terminus/commands/domain-primary-add", + "/terminus/commands/domain-primary-remove", + "/terminus/commands/domain-remove", + "/terminus/commands/env-clear-cache", + "/terminus/commands/env-clone-content", + "/terminus/commands/env-code-log", + "/terminus/commands/env-code-rebuild", + "/terminus/commands/env-commit", + "/terminus/commands/env-deploy", + "/terminus/commands/env-diffstat", + "/terminus/commands/env-info", + "/terminus/commands/env-list", + "/terminus/commands/env-metrics", + "/terminus/commands/env-rotate-random-seed", + "/terminus/commands/env-view", + "/terminus/commands/env-wake", + "/terminus/commands/env-wipe", + "/terminus/commands/help", + "/terminus/commands/https-info", + "/terminus/commands/https-remove", + "/terminus/commands/https-set", + "/terminus/commands/import-complete", + "/terminus/commands/import-database", + "/terminus/commands/import-files", + "/terminus/commands/import-site", + "/terminus/commands/list", + "/terminus/commands/local-clone", + "/terminus/commands/local-commitAndPush", + "/terminus/commands/local-dockerize", + "/terminus/commands/local-getLiveDB", + "/terminus/commands/local-getLiveFiles", + "/terminus/commands/lock-disable", + "/terminus/commands/lock-enable", + "/terminus/commands/lock-info", + "/terminus/commands/machine-token-delete", + "/terminus/commands/machine-token-delete-all", + "/terminus/commands/machine-token-list", + "/terminus/commands/multidev-create", + "/terminus/commands/multidev-delete", + "/terminus/commands/multidev-list", + "/terminus/commands/multidev-merge-from-dev", + "/terminus/commands/multidev-merge-to-dev", + "/terminus/commands/new-relic-disable", + "/terminus/commands/new-relic-enable", + "/terminus/commands/new-relic-info", + "/terminus/commands/org-info", + "/terminus/commands/org-list", + "/terminus/commands/org-people-add", + "/terminus/commands/org-people-list", + "/terminus/commands/org-people-remove", + "/terminus/commands/org-people-role", + "/terminus/commands/org-site-list", + "/terminus/commands/org-site-remove", + "/terminus/commands/org-upstream-list", + "/terminus/commands/owner-set", + "/terminus/commands/payment-method-add", + "/terminus/commands/payment-method-list", + "/terminus/commands/payment-method-remove", + "/terminus/commands/plan-info", + "/terminus/commands/plan-list", + "/terminus/commands/plan-set", + "/terminus/commands/redis-disable", + "/terminus/commands/redis-enable", + "/terminus/commands/remote-drush", + "/terminus/commands/remote-wp", + "/terminus/commands/self-clear-cache", + "/terminus/commands/self-config-dump", + "/terminus/commands/self-console", + "/terminus/commands/self-info", + "/terminus/commands/self-plugin-create", + "/terminus/commands/self-plugin-install", + "/terminus/commands/self-plugin-list", + "/terminus/commands/self-plugin-migrate", + "/terminus/commands/self-plugin-reload", + "/terminus/commands/self-plugin-search", + "/terminus/commands/self-plugin-uninstall", + "/terminus/commands/self-plugin-update", + "/terminus/commands/self-update", + "/terminus/commands/service-level-set", + "/terminus/commands/site-create", + "/terminus/commands/site-delete", + "/terminus/commands/site-info", + "/terminus/commands/site-label-set", + "/terminus/commands/site-list", + "/terminus/commands/site-lookup", + "/terminus/commands/site-org-add", + "/terminus/commands/site-org-list", + "/terminus/commands/site-org-remove", + "/terminus/commands/site-team-add", + "/terminus/commands/site-team-list", + "/terminus/commands/site-team-remove", + "/terminus/commands/site-team-role", + "/terminus/commands/site-upstream-clear-cache", + "/terminus/commands/site-upstream-set", + "/terminus/commands/solr-disable", + "/terminus/commands/solr-enable", + "/terminus/commands/ssh-key-add", + "/terminus/commands/ssh-key-list", + "/terminus/commands/ssh-key-remove", + "/terminus/commands/tag-add", + "/terminus/commands/tag-list", + "/terminus/commands/tag-remove", + "/terminus/commands/upstream-info", + "/terminus/commands/upstream-list", + "/terminus/commands/upstream-updates-apply", + "/terminus/commands/upstream-updates-list", + "/terminus/commands/upstream-updates-status", + "/terminus/commands/workflow-info-logs", + "/terminus/commands/workflow-info-operations", + "/terminus/commands/workflow-info-status", + "/terminus/commands/workflow-list", + "/terminus/commands/workflow-wait", + "/terminus/commands/workflow-watch", + "/terminus/configuration", + "/terminus/create", + "/terminus/directory", + "/terminus/examples", + "/terminus/install", + "/terminus/plugins", + "/terminus/scripting", + "/terminus/supported-terminus", + "/terminus/terminus-3-0", + "/terminus/updates", + "/timeouts", + "/trainers", + "/troubleshoot", + "/unwind-drupal-multisite", + "/upgrade-drupal-with-ic-to-latest", + "/visual-studio-code", + "/wordpress", + "/wordpress-known-issues", + "/workflow-logs", + "/workshops" +] \ No newline at end of file diff --git a/gatsby-node.js b/gatsby-node.js index 369bcc6896..2804d56e9a 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -1,7 +1,7 @@ -const path = require(`path`) -const crypto = require("crypto") -const matter = require("gray-matter") -var fs = require("fs-extra") +const path = require(`path`); +const crypto = require('crypto'); +const matter = require('gray-matter'); +var fs = require('fs-extra'); /* For additional reference material, see @@ -13,37 +13,37 @@ into web pages. It is prime for refactoring. /** This helper function determines what slug a piece of content will use */ const calculateSlug = (node, getNode) => { - const fileName = getNode(node.parent).name // Sets the filename from GraphQL + const fileName = getNode(node.parent).name; // Sets the filename from GraphQL if (node.frontmatter.permalink) { //If the "permalink" frontmatter value is present... return node.frontmatter.permalink // return it. - .replace(":basename", fileName) // If permalink includes ":basename", prepend the filename to the slug - .replace("docs", "") // If it includes "docs", remove it. Docs is added by the pathPrefix in gatsby-config.js + .replace(':basename', fileName) // If permalink includes ":basename", prepend the filename to the slug + .replace('docs', ''); // If it includes "docs", remove it. Docs is added by the pathPrefix in gatsby-config.js } // I'm honestly not sure about this. If Alex isn't around and you need to know, ask Octahedroid. if (fileName === undefined) { - return `${fileName}` + return `${fileName}`; } // This section creates the changelog slug based on the YYYY-MM-DD-MONTH.md template - if (getNode(node.parent).absolutePath.includes("changelogs")) { + if (getNode(node.parent).absolutePath.includes('changelogs')) { // If the file is in the changelogs directory... - const split = fileName.split("-") // split the file name where hyphenated... - return `changelog/${split[0]}/${split[1]}` // and return a slug of changelog/YYYY/MM + const split = fileName.split('-'); // split the file name where hyphenated... + return `changelog/${split[0]}/${split[1]}`; // and return a slug of changelog/YYYY/MM } // This section creates the releasenotes slug based on the YYYY-MM-DD-slug.md template - if (getNode(node.parent).absolutePath.includes("releasenotes")) { + if (getNode(node.parent).absolutePath.includes('releasenotes')) { // If the file is in the releasenotes directory... // split the file name where hyphenated. - const split = fileName.split("-") + const split = fileName.split('-'); // set a const to remaining slug based on the keys from split that are not the date. - const remainingSlug = split.slice(3).join("-") - return `release-notes/${split[0]}/${split[1]}/${remainingSlug}` // and return a slug of releasenotes/YYYY/MM/slug + const remainingSlug = split.slice(3).join('-'); + return `release-notes/${split[0]}/${split[1]}/${remainingSlug}`; // and return a slug of releasenotes/YYYY/MM/slug } - return `${fileName}` // Otherwise, as long as there is a filename in GraphQL, use it as the slug. -} + return `${fileName}`; // Otherwise, as long as there is a filename in GraphQL, use it as the slug. +}; /* This helper function helps determine which template should be applied to a piece of content */ const calculateTemplate = (node, defaultTemplate) => { @@ -54,11 +54,11 @@ const calculateTemplate = (node, defaultTemplate) => { node.frontmatter.layout !== null ) { // If the node has the layout value in frontmatter... - return node.frontmatter.layout // use that value. + return node.frontmatter.layout; // use that value. } - return defaultTemplate // Otherwise, use the default template argument value. -} + return defaultTemplate; // Otherwise, use the default template argument value. +}; /* These helper functions are used to provide multi-page guide pages with the previous and next pages in the guide, to be used in the construction of the table of contents. @@ -67,43 +67,43 @@ const calculatePrevious = (guide) => { // The function accepts as an argument the node of the guide page in question if (!guide.previous) { // If the page doesn't have a value for the "previous" field in GraphQL - return null // return nothing. + return null; // return nothing. } // Also return nothing if the guide_directory value doesn't exist. if ( guide.node.fields.guide_directory !== guide.previous.fields.guide_directory ) { - return null + return null; } // Otherwise, return the slug of the page identified as previous by GraphQL. How it determines which one is previous, unclear to me at this time. - return guide.previous.fields.slug -} + return guide.previous.fields.slug; +}; // Same as above. const calculateNext = (guide) => { if (!guide.next) { - return null + return null; } if (guide.node.fields.guide_directory !== guide.next.fields.guide_directory) { - return null + return null; } - return guide.next.fields.slug -} + return guide.next.fields.slug; +}; const digest = (str) => str != null - ? crypto.createHash("md5").update(str).digest("hex") - : crypto.createHash("md5").update(" ").digest("hex") + ? crypto.createHash('md5').update(str).digest('hex') + : crypto.createHash('md5').update(' ').digest('hex'); exports.onCreateWebpackConfig = ({ actions }) => { actions.setWebpackConfig({ resolve: { - modules: [path.resolve(__dirname, "src"), "node_modules"], + modules: [path.resolve(__dirname, 'src'), 'node_modules'], }, - }) -} + }); +}; exports.createSchemaCustomization = ({ actions, schema }) => { actions.createFieldExtension({ @@ -112,13 +112,13 @@ exports.createSchemaCustomization = ({ actions, schema }) => { return { resolve(source, args, context, info) { if (source[info.fieldName] == null) { - return false + return false; } - return source[info.fieldName] + return source[info.fieldName]; }, - } + }; }, - }) + }); actions.createTypes(` type Mdx implements Node { @@ -128,11 +128,11 @@ exports.createSchemaCustomization = ({ actions, schema }) => { type Frontmatter { draft: Boolean @defaultFalse } - `) -} + `); +}; exports.createPages = ({ graphql, actions }) => { - const { createPage } = actions + const { createPage } = actions; return graphql(` { @@ -195,15 +195,17 @@ exports.createPages = ({ graphql, actions }) => { } } - - allIframeEmbeds: allMdx(limit: 10, filter: {fileAbsolutePath: {regex: "/iframeembeds/"}}) { - edges { - node { - slug - body - } + allIframeEmbeds: allMdx( + limit: 10 + filter: { fileAbsolutePath: { regex: "/iframeembeds/" } } + ) { + edges { + node { + slug + body } } + } allReleaseNotes: allMdx( filter: { fileAbsolutePath: { regex: "/releasenotes/" } } @@ -300,29 +302,29 @@ exports.createPages = ({ graphql, actions }) => { } `).then((result) => { if (result.errors) { - throw result.errors + throw result.errors; } // Create doc pages. - const docs = result.data.allDocs.edges + const docs = result.data.allDocs.edges; docs.forEach((doc) => { - const template = calculateTemplate(doc.node, "doc") + const template = calculateTemplate(doc.node, 'doc'); createPage({ path: doc.node.fields.slug, component: path.resolve(`./src/templates/${template}.js`), context: { slug: doc.node.fields.slug, }, - }) - }) + }); + }); // Create guide pages. - const guides = result.data.allGuides.edges + const guides = result.data.allGuides.edges; guides.forEach((guide) => { if (guide.node.fields.guide_directory !== null) { - const previous = calculatePrevious(guide) - const next = calculateNext(guide) - const template = calculateTemplate(guide.node, "guide") + const previous = calculatePrevious(guide); + const next = calculateNext(guide); + const template = calculateTemplate(guide.node, 'guide'); createPage({ path: guide.node.fields.slug, component: path.resolve(`./src/templates/${template}.js`), @@ -332,27 +334,27 @@ exports.createPages = ({ graphql, actions }) => { previous, next, }, - }) + }); } else { - const template = calculateTemplate(guide.node, "doc") + const template = calculateTemplate(guide.node, 'doc'); createPage({ path: guide.node.fields.slug, component: path.resolve(`./src/templates/${template}.js`), context: { slug: guide.node.fields.slug, }, - }) + }); } - }) + }); // Create changelog pages. - const changelogs = result.data.allChangelogs.edges + const changelogs = result.data.allChangelogs.edges; changelogs.forEach((changelog) => { const previous = changelog.previous ? changelog.previous.fields.slug || null - : null - const next = changelog.next ? changelog.next.fields.slug || null : null - const template = calculateTemplate(changelog.node, "changelog") + : null; + const next = changelog.next ? changelog.next.fields.slug || null : null; + const template = calculateTemplate(changelog.node, 'changelog'); createPage({ path: changelog.node.fields.slug, component: path.resolve(`./src/templates/${template}.js`), @@ -361,25 +363,25 @@ exports.createPages = ({ graphql, actions }) => { next: previous, previous: next, }, - }) - }) + }); + }); // Create changelog pagination. - const postsPerPage = 6 - const numPages = Math.ceil(changelogs.length / postsPerPage) + const postsPerPage = 6; + const numPages = Math.ceil(changelogs.length / postsPerPage); Array.from({ length: numPages }).forEach((_, i) => { - const currentPage = i + 1 + const currentPage = i + 1; const next = currentPage === 1 ? null : currentPage === 2 - ? `/changelog/` - : `/changelog/page/${currentPage - 1}` + ? `/changelog/` + : `/changelog/page/${currentPage - 1}`; const previous = - currentPage < numPages ? `/changelog/page/${currentPage + 1}` : null + currentPage < numPages ? `/changelog/page/${currentPage + 1}` : null; createPage({ path: i === 0 ? `/changelog/` : `/changelog/page/${i + 1}`, - component: path.resolve("./src/templates/changelogs.js"), + component: path.resolve('./src/templates/changelogs.js'), context: { limit: postsPerPage, skip: i * postsPerPage, @@ -388,14 +390,14 @@ exports.createPages = ({ graphql, actions }) => { previous, next, }, - }) - }) + }); + }); // Create Terminus Command pages - const terminusCommands = result.data.dataJson.commands + const terminusCommands = result.data.dataJson.commands; terminusCommands.forEach((command) => { - const slugRegExp = /:/g - const slug = command.name.replace(slugRegExp, "-") + const slugRegExp = /:/g; + const slug = command.name.replace(slugRegExp, '-'); createPage({ path: `terminus/commands/${slug}`, component: path.resolve(`./src/templates/terminusCommand.js`), @@ -403,33 +405,35 @@ exports.createPages = ({ graphql, actions }) => { slug: slug, name: command.name, }, - }) - }) + }); + }); // Create release notes without pagination. At a later date, we may want to add pagination. // And can reused the code above. createPage({ path: `/release-notes/`, - component: path.resolve("./src/templates/releaseNotesListing/index.js"), - }) + component: path.resolve('./src/templates/releaseNotesListing/index.js'), + }); // Create release notes pages for pagination. - const releaseNotesPostsPerPage = 8 - const releaseNotesNumPages = Math.ceil(result.data.allReleaseNotes.edges.length / releaseNotesPostsPerPage) + const releaseNotesPostsPerPage = 8; + const releaseNotesNumPages = Math.ceil( + result.data.allReleaseNotes.edges.length / releaseNotesPostsPerPage, + ); Array.from({ length: releaseNotesNumPages }).forEach((_, i) => { - const path2 = `/release-notes/${i+1}/`; + const path2 = `/release-notes/${i + 1}/`; createPage({ path: path2, - component: path.resolve("./src/templates/releaseNotesListing/index.js"), + component: path.resolve('./src/templates/releaseNotesListing/index.js'), context: { limit: releaseNotesPostsPerPage, skip: i * releaseNotesPostsPerPage, numPages: releaseNotesNumPages, i, }, - }) - }) + }); + }); // terminusCommands.forEach(command => { // const slugRegExp = /:/g @@ -445,27 +449,26 @@ exports.createPages = ({ graphql, actions }) => { // }) // Create each release note page. - const releaseNotes = result.data.allReleaseNotes.edges + const releaseNotes = result.data.allReleaseNotes.edges; releaseNotes.forEach((releaseNote) => { - const template = calculateTemplate(releaseNote.node, "releaseNotePage") + const template = calculateTemplate(releaseNote.node, 'releaseNotePage'); createPage({ path: releaseNote.node.fields.slug, component: path.resolve(`./src/templates/${template}.js`), context: { slug: releaseNote.node.fields.slug, }, - }) - }) + }); + }); // Create iframeembed page const iframeEmbeds = result.data.allIframeEmbeds.edges; iframeEmbeds.forEach((iframeEmbed) => { - // There's an odd bug where the slug value is inconsistent, even for the same file // across different gatsby builds. This is a workaround. // if the slug does not contain "iframeembeds" the add it - if (!iframeEmbed.node.slug.includes("iframeembeds")) { - iframeEmbed.node.slug = `iframeembeds/${iframeEmbed.node.slug}` + if (!iframeEmbed.node.slug.includes('iframeembeds')) { + iframeEmbed.node.slug = `iframeembeds/${iframeEmbed.node.slug}`; } createPage({ @@ -475,11 +478,11 @@ exports.createPages = ({ graphql, actions }) => { slug: iframeEmbed.node.slug, body: iframeEmbed.node.body, }, - }) - }) + }); + }); // Create contributor pages. - const contributors = result.data.allContributorYaml.edges + const contributors = result.data.allContributorYaml.edges; contributors.forEach((contributor) => { createPage({ path: `contributors/${contributor.node.yamlId}`, @@ -487,11 +490,11 @@ exports.createPages = ({ graphql, actions }) => { context: { id: contributor.node.yamlId, }, - }) - }) + }); + }); // Create topics pages. - const topics = result.data.allLandingsYaml.edges + const topics = result.data.allLandingsYaml.edges; topics.forEach((topic) => { createPage({ path: topic.node.path, @@ -499,153 +502,193 @@ exports.createPages = ({ graphql, actions }) => { context: { id: topic.node.id, }, - }) - }) + }); + }); - return null - }) -} + return null; + }); +}; exports.onCreateNode = ({ node, getNode, actions }) => { - const { createNode, createNodeField } = actions + const { createNode, createNodeField } = actions; - if (node.internal.owner === "gatsby-transformer-yaml") { + if (node.internal.owner === 'gatsby-transformer-yaml') { Object.keys(node).forEach((item) => { - if (!item.endsWith("Markdown")) { - return + if (!item.endsWith('Markdown')) { + return; } const textNode = { id: `${node.id}-${item}`, parent: node.id, - dir: path.resolve("./"), + dir: path.resolve('./'), internal: { type: `${node.internal.type}${item}`, - mediaType: "text/markdown", + mediaType: 'text/markdown', content: node[item], contentDigest: digest(node[item]), }, - } - createNode(textNode) + }; + createNode(textNode); createNodeField({ node, name: `${item}___NODE`, value: textNode.id, - }) - }) + }); + }); } // MDX content if (node.internal.type === `Mdx`) { - const sourceInstanceName = getNode(node.parent).sourceInstanceName - if (sourceInstanceName === "content") { - const editPath = `source/content/${getNode(node.parent).relativePath}` + const sourceInstanceName = getNode(node.parent).sourceInstanceName; + if (sourceInstanceName === 'content') { + const editPath = `source/content/${getNode(node.parent).relativePath}`; // Add editPath field createNodeField({ name: `editPath`, node, value: editPath, - }) + }); } // Add slug field - const slug = calculateSlug(node, getNode) + const slug = calculateSlug(node, getNode); createNodeField({ name: `slug`, node, value: slug, - }) + }); - if (slug.includes("guides/")) { - if (getNode(node.parent).relativeDirectory !== "guides") { + if (slug.includes('guides/')) { + if (getNode(node.parent).relativeDirectory !== 'guides') { // Add guide_directory field createNodeField({ name: `guide_directory`, node, value: `${getNode(node.parent).relativeDirectory}`, - }) + }); } } if ( - sourceInstanceName === "changelogs" || - sourceInstanceName === "releasenotes" + sourceInstanceName === 'changelogs' || + sourceInstanceName === 'releasenotes' ) { const content = matter(node.internal.content, { excerpt: true, - excerpt_separator: "", - }) - const excerpt = content.excerpt || "" + excerpt_separator: '', + }); + const excerpt = content.excerpt || ''; createNodeField({ name: `excerpt`, node, value: excerpt, - }) + }); const textNode = { id: `${node.id}-MarkdownBody`, parent: node.id, - dir: path.resolve("./"), + dir: path.resolve('./'), internal: { type: `${node.internal.type}MarkdownBody`, - mediaType: "text/markdown", + mediaType: 'text/markdown', content: excerpt, contentDigest: digest(excerpt), }, - } - createNode(textNode) + }; + createNode(textNode); // Create markdownBody___NODE field createNodeField({ node, - name: "markdownBody___NODE", + name: 'markdownBody___NODE', value: textNode.id, - }) + }); } } // Releases and Changelog Content - var nodeString = node.internal.type.toString() - var isReleaseJson = nodeString.includes("ReleasesJson") - if (isReleaseJson && !nodeString.includes("MarkdownBody")) { + var nodeString = node.internal.type.toString(); + var isReleaseJson = nodeString.includes('ReleasesJson'); + if (isReleaseJson && !nodeString.includes('MarkdownBody')) { //console.log("Creating markdownBody for ", node.internal.type.toString()) // For debugging // Add original_id as int to filter using GraphQL createNodeField({ name: `original_id`, node, value: parseInt(node.id), - }) + }); // Add text/markdown node children to Release and Changelog nodes const textNode = { id: `${node.id}-MarkdownBody`, parent: node.id, - dir: path.resolve("./"), + dir: path.resolve('./'), internal: { type: `${node.internal.type}MarkdownBody`, - mediaType: "text/markdown", - content: node.body || "", + mediaType: 'text/markdown', + content: node.body || '', contentDigest: digest(node.body), }, - } - createNode(textNode) + }; + createNode(textNode); // Create markdownBody___NODE field createNodeField({ node, - name: "markdownBody___NODE", + name: 'markdownBody___NODE', value: textNode.id, - }) + }); } -} +}; // This block moves script files from source to the public (build artifact) directory. exports.onPreBootstrap = () => { - const scriptsCopyFrom = `${__dirname}//source/scripts` - const scriptsCopyTo = `${__dirname}/public/scripts` + const scriptsCopyFrom = `${__dirname}//source/scripts`; + const scriptsCopyTo = `${__dirname}/public/scripts`; + + fs.copySync(scriptsCopyFrom, scriptsCopyTo); +}; + +exports.onPostBuild = async ({ graphql, getNodes }) => { + // Fetch all pages created by Gatsby + const pages = getNodes().filter((node) => node.internal.type === 'SitePage'); + + //console.log('pages', pages); + //loop over pages and log the path + const pagePaths = pages.map((page) => page.path); + console.log('pagePaths', pagePaths); + pages.forEach((page) => { + console.log('path', page.path); + }); + + // const exceptions = ['https://certification.pantheon.io/', '/404.html']; + // const OmniItems = getOmniItems(); + // const menuReport = calculateNumberOfPathsInMenu(pagePaths, OmniItems, exceptions); + // console.log('menuReport', menuReport); + + fs.writeFile( + 'all-written-paths.txt', + JSON.stringify(pagePaths, null, 2), + (err) => { + if (err) throw err; + console.log('The file has been saved!'); + }, + ); + + // // Read the menu links from your menu file (assuming it's a JSON file) + // const menuFilePath = path.resolve(__dirname, 'src/data/menu.json'); + // const menuData = JSON.parse(fs.readFileSync(menuFilePath, 'utf-8')); + + // // Extract the paths from the menu links + // const menuLinks = menuData.map(item => item.path); + + // // Check how many pages are in the menu + // const pagesInMenu = pages.filter(page => menuLinks.includes(page.path)); - fs.copySync(scriptsCopyFrom, scriptsCopyTo) -} + // console.log(`Total Pages Created by Gatsby: ${pages.length}`); + // console.log(`Total Pages in Menu: ${pagesInMenu.length}`); +}; /* todo should there be an error thrown if a release note category is set that is not allowed */ /* todo, infer published date from file name. And throw an error if there are files that don't follow the pattern. */ diff --git a/gatsby-ssr.js b/gatsby-ssr.js index c256b36a8b..8fd91c4c06 100644 --- a/gatsby-ssr.js +++ b/gatsby-ssr.js @@ -1,26 +1,42 @@ -import React from 'react' +import React from 'react'; // Import PDS Global wrapper for applying global context providers. -import { GlobalWrapper } from "@pantheon-systems/pds-toolkit-react" -import { MOBILE_MENU_BREAKPOINT } from './src/vars/responsive' +import { GlobalWrapper } from '@pantheon-systems/pds-toolkit-react'; +import { MOBILE_MENU_BREAKPOINT } from './src/vars/responsive'; /* * Add global scripts to ensure Bootstrap and jQuery JS is included */ export const onRenderBody = ({ setPostBodyComponents }) => { setPostBodyComponents([ -