fix(docs): preserve theme assets in deny-by-default publication
Publish documentation / publish (push) Successful in 36s

This commit is contained in:
Codex
2026-09-16 09:36:30 +02:00
parent 5f3680a0fb
commit b1c510a097
4 changed files with 169 additions and 3 deletions
+41
View File
@@ -27,10 +27,18 @@ class PublicationBoundaryTest(unittest.TestCase):
self.write(self.root / "docs" / source, "# Public")
self.write(self.site / verifier.output_path(source), "public")
self.write(self.root / "mkdocs.yml", self.config)
for asset in sorted(verifier.THEME_ASSETS):
self.config += f" !/{asset}\n"
self.write(self.site / asset, "theme fixture")
self.write(self.root / "mkdocs.yml", self.config)
self.search = {"docs": [{"location": "", "text": "public"}]}
self.write_search()
self.write(self.root / "docs/plans/private.md", "# Internal")
self.write(self.root / "docs/reports/screenshot.png", "internal asset")
self.write(self.site / "index.html", '<link rel="stylesheet" href="css/base.css"><script src="js/base.js"></script>')
self.write(self.site / "css/base.css", '@font-face { src: url("../fonts/demo.woff2?v=1"); }')
self.write(self.site / "fonts/demo.woff2", "font fixture")
self.write(self.site / "js/base.js", "// script fixture")
@staticmethod
def write(path, content):
@@ -81,6 +89,39 @@ class PublicationBoundaryTest(unittest.TestCase):
with self.assertRaisesRegex(ValueError, "missing generated public"):
verifier.check(self.root, self.site)
def test_missing_theme_stylesheet(self):
(self.site / "css/base.css").unlink()
with self.assertRaisesRegex(ValueError, "missing generated page asset: css/base.css"):
verifier.check(self.root, self.site)
def test_docs_cannot_shadow_theme_assets(self):
self.write(self.root / "docs/css/base.css", "internal content")
with self.assertRaisesRegex(ValueError, "docs source shadows theme asset"):
verifier.check(self.root, self.site)
def test_missing_theme_script(self):
(self.site / "js/base.js").unlink()
with self.assertRaisesRegex(ValueError, "missing generated page asset: js/base.js"):
verifier.check(self.root, self.site)
def test_missing_css_font(self):
(self.site / "fonts/demo.woff2").unlink()
with self.assertRaisesRegex(ValueError, "missing generated page asset: fonts/demo.woff2"):
verifier.check(self.root, self.site)
def test_asset_outside_site_prefix(self):
self.write(self.root / "mkdocs.yml", self.config + "site_url: https://docs.example.invalid/manual/\n")
self.write(self.site / "index.html", '<link rel="stylesheet" href="/css/base.css">')
with self.assertRaisesRegex(ValueError, "asset escapes public site prefix"):
verifier.check(self.root, self.site)
def test_nested_installation_asset_resolution(self):
self.write(self.site / "install/manual/index.html", '<link rel="stylesheet" href="../../css/base.css">')
verifier.check_assets(self.site, ["install/manual.md"], "https://docs.example.invalid/manual/")
(self.site / "css/base.css").unlink()
with self.assertRaisesRegex(ValueError, "missing generated page asset: css/base.css"):
verifier.check_assets(self.site, ["install/manual.md"], "https://docs.example.invalid/manual/")
if __name__ == "__main__":
unittest.main()