Stamp 2.59.0 Docker leftover seams only, not PinScope product.
Images copy periscope/src, vendor/, and skipped Clerk/shadcn/billing/GCS files. dependency/ stays in git. Audit written; FastAPI boots with PYTHONPATH=src.
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
"""Docker copies leftover seams only; FastAPI boots without dependency product."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
BE_DOCKER = (ROOT / "periscope" / "src" / "backend" / "Dockerfile").read_text(encoding="utf-8")
|
||||
FE_DOCKER = (ROOT / "periscope" / "src" / "frontend" / "dockerfile").read_text(encoding="utf-8")
|
||||
AUDIT = ROOT / "periscope" / "src" / "docs" / "development" / "DEPENDENCY_AUDIT.md"
|
||||
|
||||
|
||||
def test_audit_is_written():
|
||||
text = AUDIT.read_text(encoding="utf-8")
|
||||
assert "leftover seams" in text.lower() or "Leftover" in text
|
||||
assert "simple_project" in text
|
||||
assert "Git-delete of the directory is **not** done" in text
|
||||
|
||||
|
||||
def test_dockerfiles_do_not_copy_dependency_product_trees():
|
||||
assert "COPY periscope/dependency/backend/ /app/backend/" not in BE_DOCKER
|
||||
assert "COPY periscope/dependency/taxonomy/" not in BE_DOCKER
|
||||
assert "COPY periscope/dependency/skills/" not in BE_DOCKER
|
||||
assert "COPY periscope/dependency/frontend/ ./" not in FE_DOCKER
|
||||
assert "COPY vendor/" in BE_DOCKER
|
||||
assert "COPY periscope/src/backend/" in BE_DOCKER
|
||||
assert "anthropic_provider.py" in BE_DOCKER
|
||||
assert "use-optional-auth.ts" in FE_DOCKER
|
||||
assert "report.png" in FE_DOCKER
|
||||
|
||||
|
||||
def test_boot_without_dependency_on_pythonpath():
|
||||
src = ROOT / "periscope" / "src"
|
||||
env = os.environ.copy()
|
||||
env["PYTHONPATH"] = str(src)
|
||||
env.pop("AUTH_JWT_SECRET", None)
|
||||
proc = subprocess.run(
|
||||
[
|
||||
sys.executable,
|
||||
"-c",
|
||||
"from backend.main import app; from backend.middleware.auth import verify_request_user; "
|
||||
"print(app.title); print(verify_request_user.__name__)",
|
||||
],
|
||||
cwd=ROOT,
|
||||
env=env,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=False,
|
||||
)
|
||||
assert proc.returncode == 0, proc.stderr
|
||||
assert "PeriscopeX" in proc.stdout
|
||||
assert "verify_request_user" in proc.stdout
|
||||
@@ -28,9 +28,9 @@ def test_legal_pages_are_operator_not_faradworks_controller():
|
||||
assert "This Service is **not** operated by Faradworks, Inc." in terms
|
||||
|
||||
|
||||
def test_changelog_stamp_is_2_58_0_and_src_wins():
|
||||
def test_changelog_stamp_is_2_59_0_and_src_wins():
|
||||
text = (SRC / "changelog.md").read_text(encoding="utf-8")
|
||||
assert "## 2.58.0 — 2026-09-20" in text
|
||||
assert "## 2.59.0 — 2026-09-20" in text
|
||||
first = changelog_paths()[0]
|
||||
assert first.parts[-3:] == ("src", "frontend", "content") or first.name == "changelog.md"
|
||||
assert first == SRC / "changelog.md"
|
||||
|
||||
@@ -17,7 +17,7 @@ DOCKERIGNORE = ROOT / ".dockerignore"
|
||||
def test_package_json_is_periscope_web():
|
||||
text = PKG.read_text(encoding="utf-8")
|
||||
assert '"name": "periscope-web"' in text
|
||||
assert '"version": "2.58.0"' in text
|
||||
assert '"version": "2.59.0"' in text
|
||||
assert "Native Periscope overlay" not in text[:400]
|
||||
assert LOCK.is_file()
|
||||
lock = LOCK.read_text(encoding="utf-8")
|
||||
@@ -45,6 +45,7 @@ def test_docker_installs_from_src():
|
||||
assert "COPY periscope/src/frontend/package.json" in fe
|
||||
assert "periscope/src/frontend/package-lock.json" in fe
|
||||
assert "COPY periscope/src/backend/requirements*.txt" in be
|
||||
assert "COPY periscope/dependency/backend/ /app/backend/" not in be
|
||||
ignore = DOCKERIGNORE.read_text(encoding="utf-8")
|
||||
assert "faradworks-logo-white.png" in ignore
|
||||
assert "power-tree.gif" in ignore
|
||||
|
||||
Reference in New Issue
Block a user