Files
wehub-resource-sync 426e9eeabd
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
Chat shell gestures / Chat shell gesture + parity e2e (push) Has been cancelled
Cloud Gateway Discord / Test (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Has been cancelled
Build Agent Image / build-and-push (push) Has been cancelled
Dev Smoke / bun run dev onboarding chat (push) Has been cancelled
Dev Smoke / Vite HMR dependency-level smoke (push) Has been cancelled
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Has been cancelled
Publish @elizaos/example-code / check_npm (push) Has been cancelled
Publish @elizaos/example-code / publish_npm (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / verify_version (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / publish_npm (push) Has been cancelled
Sandbox Live Smoke / Sandbox live smoke (push) Has been cancelled
Snap Build & Test / Build Snap (amd64) (push) Has been cancelled
Snap Build & Test / Build Snap (arm64) (push) Has been cancelled
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Has been cancelled
Cloud Gateway Webhook / Test (push) Has been cancelled
Cloud Tests / lint-and-types (push) Has been cancelled
Cloud Tests / unit-tests (push) Has been cancelled
Cloud Tests / integration-tests (push) Has been cancelled
Cloud Tests / e2e-tests (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Apps Worker (Product 2) / Determine environment (push) Has been cancelled
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Has been cancelled
Deploy Eliza Provisioning Worker / Determine environment (push) Has been cancelled
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Has been cancelled
Dev Smoke / Classify changed paths (push) Has been cancelled
supply-chain / sbom (push) Has been cancelled
supply-chain / vulnerability-scan (push) Has been cancelled
Build, Push & Deploy to Phala Cloud / build-and-push (push) Has been cancelled
Test Packaging / Validate Packaging Configs (push) Has been cancelled
Test Packaging / Build & Test PyPI Package (push) Has been cancelled
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Has been cancelled
Test Packaging / Pack & Test JS Tarballs (push) Has been cancelled
UI Fixture E2E / ui-fixture-e2e (push) Has been cancelled
UI Fixture E2E / fixture-e2e (push) Has been cancelled
UI Story Gate / story-gate (push) Has been cancelled
vault-ci / test (macos-latest) (push) Has been cancelled
vault-ci / test (ubuntu-latest) (push) Has been cancelled
vault-ci / test (windows-latest) (push) Has been cancelled
vault-ci / app-core wiring tests (push) Has been cancelled
verify-patches / verify patches/CHECKSUMS.sha256 (push) Has been cancelled
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Has been cancelled
Voice Benchmark Smoke / voice bench smoke summary (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Has been cancelled
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00

111 lines
3.7 KiB
TypeScript

/**
* Fail-closed contract for the real Eliza Cloud job in app-live-e2e.yml.
*
* The Playwright spec intentionally remains self-skipping in keyless contexts
* so PR lanes cannot spend Cloud credits. The secret-gated workflow job must
* therefore reject a missing credential before setup/build/test work; otherwise
* Playwright reports the only test as skipped and the declared live job is green.
*/
import { describe, expect, test } from "bun:test";
import { spawnSync } from "node:child_process";
import { readFileSync } from "node:fs";
const repoRoot = new URL("../../../", import.meta.url);
function read(path: string): string {
return readFileSync(new URL(path, repoRoot), "utf8");
}
interface WorkflowStep {
name?: string;
uses?: string;
run?: string;
}
interface WorkflowJob {
env?: Record<string, string>;
steps?: WorkflowStep[];
}
interface Workflow {
on?: Record<string, unknown>;
jobs?: Record<string, WorkflowJob>;
}
const workflow = Bun.YAML.parse(
read(".github/workflows/app-live-e2e.yml"),
) as Workflow;
const cloudJob = workflow.jobs?.["cloud-live"];
function namedStep(name: string): WorkflowStep {
const step = cloudJob?.steps?.find((candidate) => candidate.name === name);
if (!step) {
throw new Error(`Missing cloud-live workflow step: ${name}`);
}
return step;
}
describe("App Live E2E real Cloud job (#14357, #16194)", () => {
test("maps the runtime key to the established repository-secret fallback", () => {
expect(cloudJob?.env?.ELIZAOS_CLOUD_API_KEY).toBe(
"$" + "{{ secrets.ELIZAOS_CLOUD_API_KEY || secrets.ELIZACLOUD_API_KEY }}",
);
});
test("fails on a missing key before setup, build, or Playwright can skip", () => {
const steps = cloudJob?.steps ?? [];
const preflightIndex = steps.findIndex(
(step) => step.name === "Require real Cloud credential",
);
const firstExpensiveStepIndex = steps.findIndex(
(step) => step.name === "Free disk space for browser smoke",
);
const testIndex = steps.findIndex(
(step) => step.name === "Run real cloud login + provision + chat",
);
expect(preflightIndex).toBeGreaterThanOrEqual(0);
expect(firstExpensiveStepIndex).toBeGreaterThan(preflightIndex);
expect(testIndex).toBeGreaterThan(preflightIndex);
const run = namedStep("Require real Cloud credential").run;
expect(run).toBeDefined();
const missing = spawnSync("bash", ["-c", run ?? ""], {
encoding: "utf8",
env: { ...process.env, ELIZAOS_CLOUD_API_KEY: "" },
});
expect(missing.status).toBe(1);
expect(missing.stdout).toContain("refusing a green-by-skip Cloud job");
const whitespaceOnly = spawnSync("bash", ["-c", run ?? ""], {
encoding: "utf8",
env: { ...process.env, ELIZAOS_CLOUD_API_KEY: " \t\n" },
});
expect(whitespaceOnly.status).toBe(1);
const configured = spawnSync("bash", ["-c", run ?? ""], {
encoding: "utf8",
env: { ...process.env, ELIZAOS_CLOUD_API_KEY: "contract-test-key" },
});
expect(configured.status).toBe(0);
});
test("keeps the live spec keyless-safe and out of pull-request workflows", () => {
const spec = read("packages/app/test/ui-smoke/cloud-live.spec.ts");
expect(workflow.on?.pull_request).toBeUndefined();
expect(spec).toContain(
"const HAS_CLOUD_KEY = Boolean(process.env.ELIZAOS_CLOUD_API_KEY?.trim())",
);
expect(spec).toContain("test.skip(\n !HAS_CLOUD_KEY,");
});
test("hands the job credential to the browser without retaining secret-bearing traces", () => {
const spec = read("packages/app/test/ui-smoke/cloud-live.spec.ts");
expect(spec).toContain("await seedCloudLiveBrowserAuth(page)");
expect(spec).toContain('test.use({ trace: "off" });');
});
});