diff --git a/tests/test_shared_sources.py b/tests/test_shared_sources.py index 0deeec12..1b0d5506 100644 --- a/tests/test_shared_sources.py +++ b/tests/test_shared_sources.py @@ -14,6 +14,9 @@ def fixture(self, root: Path) -> None: (root / "developer_manual/integration").mkdir(parents=True) (root / "developer_manual/integration/index.rst").write_text("Architecture") (root / "developer_manual/integration/new-guide.rst").write_text("New guide") + (root / "developer_manual/integration/_native-webhooks.inc").write_text( + "Development completion event" + ) (root / "developer_manual/api").mkdir() (root / "developer_manual/api/openapi.rst").write_text("OpenAPI") (root / "developer_manual/html").mkdir() @@ -44,6 +47,8 @@ def test_new_rst_is_shared_without_editing_python(self): (stable / "integration/_native-webhooks.inc").read_text(), "Only polling") self.assertEqual( (upcoming / "integration/_native-webhooks.inc").read_text(), "Native event") + self.assertEqual((dev / "integration/_native-webhooks.inc").read_text(), + "Development completion event") self.assertFalse((stable / "integration/source-only.rst").exists()) def test_unlisted_development_section_is_not_leaked(self): diff --git a/versioning/build.py b/versioning/build.py index 27683bce..b51ee70c 100644 --- a/versioning/build.py +++ b/versioning/build.py @@ -49,11 +49,11 @@ def source_tree(stage: Path, slug: str, manual: str) -> Path: if slug == "main": shutil.copytree(ROOT / manual, target) else: - shutil.copytree(ROOT / "versioned/base" / manual, target) - # Contributors declare version-safe sections in versioned/shared.json. - # Copy them before release overlays; no Python change for new RST pages. + target.mkdir(parents=True, exist_ok=True) + # Stable base documentation takes precedence over shared sections. for relative, source in shared_sources(manual): shutil.copytree(source, target / relative, dirs_exist_ok=True) + shutil.copytree(ROOT / "versioned/base" / manual, target, dirs_exist_ok=True) overlay = ROOT / "versioned" / slug / manual if overlay.exists(): shutil.copytree(overlay, target, dirs_exist_ok=True)