mirror of
https://github.com/openclaw/clawhub.git
synced 2026-08-14 08:52:21 +00:00
* 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>
46 lines
1.5 KiB
TypeScript
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);
|
|
});
|
|
});
|