import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[1] class DeploymentContract(unittest.TestCase): def test_container_builds_web_and_server_in_one_image(self): dockerfile = (ROOT / "Dockerfile").read_text() self.assertIn("pnpm install --frozen-lockfile", dockerfile) self.assertIn("pnpm run build", dockerfile) self.assertIn("gf pack resource internal/packed/packed.go", dockerfile) self.assertIn("go build", dockerfile) self.assertIn("/app/resource/public/admin", dockerfile) self.assertIn('ENTRYPOINT ["/app/hotgo"]', dockerfile) def test_container_excludes_local_and_generated_files(self): dockerignore = (ROOT / ".dockerignore").read_text().splitlines() for ignored in (".git", "web/node_modules", "web/dist", "server/temp"): self.assertIn(ignored, dockerignore) def test_manual_workflow_builds_and_rolls_out_pro_image(self): workflow = (ROOT / ".gitea/workflows/deploy.yml").read_text() self.assertIn("workflow_dispatch:", workflow) self.assertIn("git.olns.shop/pro/olons_admin", workflow) self.assertIn("docker compose pull olons-admin", workflow) self.assertIn("docker compose up -d --no-deps --wait olons-admin", workflow) if __name__ == "__main__": unittest.main()