mirror of
https://github.com/callstack/agent-device.git
synced 2026-09-14 20:06:34 +08:00
b15121ffc8
* test(ios): add snapshot convergence evidence harness * fix(ios): satisfy benchmark CI guards * fix(ios): constrain benchmark proxy routes * fix(ios-benchmark): enforce cell admission evidence * fix(ios-benchmark): protect benchmark state ownership * fix(ios-benchmark): use proxy port flag * fix(ios-benchmark): let proxy choose an ephemeral port * test(ios-benchmark): keep CLI process seam local * fix(ios-benchmark): parse proxy startup envelope * fix(ios-benchmark): bind proxy lease to simulator * fix(ios-benchmark): keep fresh proxy CLI sessions isolated * fix(ios-benchmark): preserve async timeout evidence * docs(ios-benchmark): retain exact-head evidence * test(ios): reveal offscreen alert fixture controls * test(ios): reset alert between relaunch samples * test(ios): admit native alert snapshots * docs(ios): publish snapshot convergence corpus * chore(ios): format benchmark evidence * fix(ios-benchmark): admit proxy fixture anchors * docs(ios): republish exact-head benchmark corpus * fix(size): make publish asset evidence hermetic * style(size): format package evidence test * test(size): update publish preparation contracts * fix: retire stale utils layering zone * test: pin shared publish asset owner * test: verify preserved size reporter closure * fix: move mutation ownership to snapshot module * test(ios): add snapshot convergence evidence harness * fix(ios): satisfy benchmark CI guards * fix(ios): constrain benchmark proxy routes * fix(ios-benchmark): enforce cell admission evidence * fix(ios-benchmark): protect benchmark state ownership * fix(ios-benchmark): use proxy port flag * fix(ios-benchmark): let proxy choose an ephemeral port * test(ios-benchmark): keep CLI process seam local * fix(ios-benchmark): parse proxy startup envelope * fix(ios-benchmark): bind proxy lease to simulator * fix(ios-benchmark): keep fresh proxy CLI sessions isolated * fix(ios-benchmark): preserve async timeout evidence * docs(ios-benchmark): retain exact-head evidence * test(ios): reveal offscreen alert fixture controls * test(ios): reset alert between relaunch samples * test(ios): admit native alert snapshots * docs(ios): publish snapshot convergence corpus * chore(ios): format benchmark evidence * fix(ios-benchmark): admit proxy fixture anchors * docs(ios): republish exact-head benchmark corpus * fix(size): make publish asset evidence hermetic * test(size): update publish preparation contracts * fix: keep git-state gates out of mutation sandboxes
47 lines
1.9 KiB
TypeScript
47 lines
1.9 KiB
TypeScript
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import { expect, test } from 'vitest';
|
|
import { parse } from 'yaml';
|
|
|
|
const repoRoot = path.resolve(import.meta.dirname, '../..');
|
|
const preservedReportDir = '/tmp/agent-device-size-report';
|
|
|
|
type WorkflowStep = { name?: string; run?: string };
|
|
type WorkflowDoc = {
|
|
jobs?: Record<string, { steps?: WorkflowStep[] }>;
|
|
};
|
|
|
|
function workflowStep(name: string): WorkflowStep {
|
|
const workflow = parse(
|
|
fs.readFileSync(path.join(repoRoot, '.github/workflows/size.yml'), 'utf8'),
|
|
) as WorkflowDoc;
|
|
const step = workflow.jobs?.['bundle-size']?.steps?.find((candidate) => candidate.name === name);
|
|
if (!step) {
|
|
throw new Error(`size.yml must declare the ${JSON.stringify(name)} step`);
|
|
}
|
|
return step;
|
|
}
|
|
|
|
test('the preserved size reporter keeps its entrypoint and relative modules together', () => {
|
|
const preserve = workflowStep('Preserve report scripts').run ?? '';
|
|
const measureBase = workflowStep('Measure base size').run ?? '';
|
|
|
|
expect(preserve).toContain(`mkdir -p ${preservedReportDir}`);
|
|
expect(preserve).toContain('cp scripts/size-report*.mjs');
|
|
expect(measureBase).toContain(`node ${preservedReportDir}/size-report.mjs`);
|
|
|
|
const reportSource = fs.readFileSync(path.join(repoRoot, 'scripts/size-report.mjs'), 'utf8');
|
|
const relativeModules = [...reportSource.matchAll(/from '\.\/([^']+\.mjs)'/g)].map(
|
|
(match) => match[1],
|
|
);
|
|
expect(relativeModules.length).toBeGreaterThan(0);
|
|
for (const moduleName of relativeModules) {
|
|
if (!moduleName) throw new Error('relative size-report import has no module name');
|
|
expect(fs.existsSync(path.join(repoRoot, 'scripts', moduleName)), moduleName).toBe(true);
|
|
expect(
|
|
moduleName.startsWith('size-report-') || preserve.includes(`scripts/${moduleName}`),
|
|
`${moduleName} must be preserved for the base checkout`,
|
|
).toBe(true);
|
|
}
|
|
});
|