mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-10-01 12:23:50 +00:00
* OpenInstall 0.1: one idempotent bin/install.sh that puts an app into service A repository carries bin/install.sh and, when the defaults are not right, bin/install.conf. Run on a box from a checkout it installs the runtime and a local Postgres or Redis, builds, writes a systemd unit and an nginx site with TLS, restarts and health-checks the app. Phases setup, build, activate and status; exit 0, 1 or 3; never overwrites a file without its marker line; secrets only in STATE_DIR/app.env. sh1pt's deploy-ssh install.sh is the reference script and `sh1pt ship --target deploy-ssh` the reference deployer. Registered in the process family, with a landing page at /openinstall and a contract test holding the page's tables to the spec. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * docs(openinstall): describe DATABASE_URL without a credentials-shaped URL ThreatCrush flagged the placeholder postgres URL in the worked example. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
44 lines
2.3 KiB
TypeScript
44 lines
2.3 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { familyOfSpec } from "../src/lib/specs";
|
|
import { listDocs, readDoc } from "../src/lib/docs";
|
|
import { GET as llms } from "../src/app/llms.txt/route";
|
|
import { GET as llmsFull } from "../src/app/llms-full.txt/route";
|
|
import sitemap from "../src/app/sitemap";
|
|
|
|
// Spec discovery must work even when the optional blog database is offline.
|
|
vi.mock("../src/lib/supabase", () => ({ publicClient: () => { throw new Error("offline"); } }));
|
|
|
|
describe.each([
|
|
{ slug: "openagent", name: "OpenAgent", family: "people" },
|
|
{ slug: "openskill", name: "OpenSkill", family: "people" },
|
|
{ slug: "openabtest", name: "OpenABTest", family: "process" },
|
|
{ slug: "openfleet", name: "OpenFleet", family: "process" },
|
|
{ slug: "openrental", name: "OpenRental", family: "catalogs" },
|
|
{ slug: "openmodel", name: "OpenModel", family: "catalogs" },
|
|
{ slug: "openwall", name: "OpenWall", family: "people" },
|
|
{ slug: "openobject", name: "OpenObject", family: "catalogs" },
|
|
{ slug: "openslice", name: "OpenSlice", family: "catalogs" },
|
|
{ slug: "openstack", name: "OpenStack.md", family: "catalogs" },
|
|
{ slug: "openinstall", name: "OpenInstall", family: "process" }
|
|
])("$name public discovery", ({ slug, name, family }) => {
|
|
it("serves the specification through its family and docs index", () => {
|
|
expect(familyOfSpec(slug)?.slug).toBe(family);
|
|
expect(listDocs()).toContainEqual(expect.objectContaining({ slug, title: name }));
|
|
expect(readDoc(slug)).toMatch(/Status: \*{0,2}0\.1/);
|
|
});
|
|
|
|
it("includes a reachable docs URL and the full contract in the LLM feeds", async () => {
|
|
// A spec with a landing page is linked there and cites its docs URL after
|
|
// it; a docs-only spec is linked straight to /docs/<slug>. Both must name
|
|
// the docs URL somewhere on the line.
|
|
const text = await llms().text();
|
|
expect(text).toMatch(new RegExp(`\\[${name}\\]\\(https://[^)]+/(docs/)?${slug}\\)`));
|
|
expect(text).toContain(`/docs/${slug}`);
|
|
expect(await llmsFull().text()).toContain(readDoc(slug)!.trim());
|
|
});
|
|
|
|
it("includes the docs route in the sitemap without a blog connection", async () => {
|
|
const entries = await sitemap();
|
|
expect(entries.some((entry) => new URL(entry.url).pathname === `/docs/${slug}`)).toBe(true);
|
|
});
|
|
});
|