Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
fa81b4b
Fix cross-project content leakage on multi-domain sites.
stooit Aug 11, 2026
7e7b13f
Route submodule publishing per domain, and repair the client tests.
stooit Aug 11, 2026
0010006
Add config schema, real CI test runs, and per-domain cache purging.
stooit Aug 11, 2026
10db020
Fix live entity saves failing to publish, and guard unknown hosts.
stooit Aug 11, 2026
8cfba0a
Scope the domain guard to multi-domain sites, and correct the shutdow…
stooit Aug 11, 2026
af6a138
Correct contrib dependency project prefixes.
stooit Aug 11, 2026
3214201
Declare the contrib modules the submodules need in composer.json.
stooit Aug 11, 2026
bcfc9ae
Make the purger update survive duplicate rows, and fix two static fin…
stooit Aug 11, 2026
15cb9b8
Stamp tome's queue items where they are created.
stooit Aug 11, 2026
c44a958
Fix malformed multilingual redirects, and guard redirects like content.
stooit Aug 11, 2026
9d442c3
Guard deletes, and stop malformed paths reaching the API.
stooit Aug 11, 2026
aaad0ef
Address review: absolute urls, requeue, clear() scope, host trust.
stooit Aug 12, 2026
6770485
Guard every write at the client, not only the ones that emit events.
stooit Aug 12, 2026
1d967a3
Install purge in CI, so the kernel tests can actually run.
stooit Aug 12, 2026
b6b3d3c
Commit the regression harness, and finish the purger end-to-end check.
stooit Aug 12, 2026
a56a1cb
Resolve per-domain projects on both Domain 2.x and 3.x.
stooit Sep 1, 2026
1a73beb
Report stale Domain Access grants rather than publishing through them.
stooit Sep 1, 2026
86c1254
Refuse content that provably belongs to another domain.
stooit Sep 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,16 @@ jobs:
run: drush si --db-url=mysql://root:drupal@mariadb:3306/drupal11 -y
working-directory: /var/www/drupal

# token is required by quant_search. purge is required by quant_purger,
# whose kernel tests install it, so the suite cannot run without it.
- name: Install module dependencies
run: composer --no-interaction --no-progress require drupal/token
run: composer --no-interaction --no-progress require drupal/token drupal/purge
working-directory: /var/www/drupal

# The image ships phpunit globally, but its bootstrap needs the test
# dependencies that core-dev pulls in.
- name: Install test dependencies
run: composer --no-interaction --no-progress require --dev -W drupal/core-dev:^11
working-directory: /var/www/drupal

- name: Set up custom module
Expand All @@ -52,3 +60,17 @@ jobs:
- name: Enable quant
run: drush en quant -y
working-directory: /var/www/drupal

- name: Prepare test output directory
run: mkdir -p /var/www/drupal/web/sites/simpletest/browser_output
working-directory: /var/www/drupal

# Runs every unit and kernel test in the module and its submodules.
# Previously this job installed the module and stopped, so a broken
# test file went unnoticed.
- name: Run tests
env:
SIMPLETEST_DB: mysql://root:drupal@mariadb:3306/drupal11
BROWSERTEST_OUTPUT_DIRECTORY: /var/www/drupal/web/sites/simpletest/browser_output
run: vendor/bin/phpunit -c web/core --display-deprecations web/modules/custom/quant
working-directory: /var/www/drupal
18 changes: 18 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "drupal/quant",
"description": "Static site generator for Drupal, integrating with the QuantCDN static edge.",
"type": "drupal-module",
"license": "GPL-2.0-or-later",
"homepage": "https://www.quantcdn.io",
"support": {
"issues": "https://github.com/quantcdn/drupal/issues",
"docs": "https://docs.quantcdn.io/docs/integrations/drupal",
"source": "https://github.com/quantcdn/drupal"
},
"suggest": {
"drupal/token": "Required by Quant Search (quant_search).",
"drupal/purge": "Required by Quant Purger (quant_purger).",
"drupal/webform": "Required by Quant Webform (quant_webform).",
"drupal/tome": "Required by Quant Tome (quant_tome)."
}
}
116 changes: 116 additions & 0 deletions config/schema/quant.schema.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
quant.settings:
type: config_object
label: 'Quant settings'
mapping:
quant_enabled:
type: boolean
label: 'Enable Quant tracking'
quant_enabled_nodes:
type: boolean
label: 'Track node changes'
quant_enabled_taxonomy:
type: boolean
label: 'Track taxonomy term changes'
quant_enabled_views:
type: boolean
label: 'Track view changes'
quant_enabled_redirects:
type: boolean
label: 'Track redirect changes'
quant_show_page_info_block:
type: boolean
label: 'Show the page info block'
quant_routes_export:
type: string
label: 'Routes to export'
nullable: true
ssl_cert_verify:
type: boolean
label: 'Verify SSL certificates'
disable_content_drafts:
type: boolean
label: 'Do not export unpublished drafts'
proxy_override:
type: boolean
label: 'Override existing proxy configuration'
xpath_selectors:
type: string
label: 'XPath selectors used to discover pager links'
local_server:
type: string
label: 'Local webserver address used for the crawl'
host_domain:
type: string
label: 'HTTP Host header sent with the crawl'
host_domain_strip:
type: boolean
label: 'Strip the host domain from generated content'
entity_node:
type: boolean
label: 'Export nodes'
entity_node_revisions:
type: boolean
label: 'Export node revisions'
entity_node_bundles:
type: sequence
label: 'Node bundles to export'
sequence:
type: string
label: 'Bundle'
entity_node_languages:
type: sequence
label: 'Languages to export'
sequence:
type: string
label: 'Language code'
entity_taxonomy_term:
type: boolean
label: 'Export taxonomy terms'
theme_assets:
type: boolean
label: 'Export theme assets'
views_pages:
type: boolean
label: 'Export view pages'
redirects:
type: boolean
label: 'Export redirects'
robots:
type: boolean
label: 'Export robots.txt'
routes:
type: boolean
label: 'Export custom routes'
routes_textarea:
type: string
label: 'Custom routes, one per line'
file_paths:
type: boolean
label: 'Export custom file paths'
file_paths_textarea:
type: string
label: 'Custom file paths, one per line'
lunr:
type: boolean
label: 'Export Lunr search assets'
export_sitemap:
type: boolean
label: 'Export the XML sitemap'

quant.token_settings:
type: config_object
label: 'Quant token settings'
mapping:
timeout:
type: string
label: 'Token lifetime, as a relative time string'
disable:
type: boolean
label: 'Disable token verification'
secret:
type: string
label: 'Shared secret used to sign tokens'
nullable: true
strict:
type: boolean
label: 'Reject requests whose token does not match the route'
23 changes: 23 additions & 0 deletions modules/quant_api/config/schema/quant_api.schema.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
quant_api.settings:
type: config_object
label: 'Quant API settings'
mapping:
api_endpoint:
type: string
label: 'API endpoint'
api_account:
type: string
label: 'API organization'
api_project:
type: string
label: 'API project'
# Multi-domain sites override this per domain, so that each domain
# publishes to its own project.
nullable: true
api_token:
type: string
label: 'API token'
nullable: true
api_tls_disabled:
type: boolean
label: 'Disable TLS verification'
2 changes: 1 addition & 1 deletion modules/quant_api/quant_api.info.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ type: module
core_version_requirement: ^11
configure: quant_api.settings_form
dependencies:
- drupal:quant
- quant:quant
Loading
Loading