Files
clawhub/scripts/claws-feed-openclaw-workflow.test.ts
T
Gio Della-LiberaandPatrick Erichsen 5a3b050751 Add gated Claw hosted feed and lifecycle proof (#3092)
* feat(claws): publish hosted feed with OpenClaw proof

* test(claws): prove package-local profile feed flow

* fix(claws): encode scoped package artifact routes

* fix(claws): enforce feed rollback and binding

* test(claws): pin hosted OpenClaw contract proof

* test(claws): add Convex feed runtime smoke

* chore(schema): refresh experimental feed declarations

---------

Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com>
2026-07-24 19:29:12 -05:00

46 lines
1.5 KiB
TypeScript

import { readFile } from "node:fs/promises";
import { describe, expect, it } from "vitest";
import { parse as parseYaml } from "yaml";
describe("Claw feed OpenClaw contract workflow", () => {
it("runs the real bridge against a pinned OpenClaw source revision", async () => {
const workflow = parseYaml(await readFile(".github/workflows/ci.yml", "utf8")) as {
jobs: Record<
string,
{
env?: Record<string, string>;
steps?: Array<{
uses?: string;
with?: Record<string, string>;
env?: Record<string, string>;
run?: string;
}>;
}
>;
};
const job = workflow.jobs["claws-openclaw-contract"];
expect(job?.env?.OPENCLAW_CONTRACT_SHA).toBe("59fc573fb9e938a93b93522be6bf4d7bec0dbc6f");
expect(job?.steps).toContainEqual(
expect.objectContaining({
uses: "actions/checkout@v7.0.1",
with: expect.objectContaining({
repository: "openclaw/openclaw",
ref: "${{ env.OPENCLAW_CONTRACT_SHA }}",
path: ".artifacts/openclaw-contract",
}),
}),
);
expect(job?.steps?.some((step) => step.run?.includes("pnpm install --frozen-lockfile"))).toBe(
true,
);
expect(
job?.steps?.some(
(step) =>
step.env?.OPENCLAW_CLAWS_CHECKOUT ===
"${{ github.workspace }}/.artifacts/openclaw-contract" &&
step.run?.includes("claws-feed-openclaw-e2e.test.ts"),
),
).toBe(true);
});
});