ci: исполнять TS/Python parity на чистом runner (#548)

Issue: #548
User-Visible: no
This commit is contained in:
Sergey Matyunin
2026-09-13 10:49:07 +03:00
parent e85849b86e
commit 76d8017e87
20 changed files with 520 additions and 92 deletions
+15 -1
View File
@@ -122,7 +122,7 @@ test('замыкание останавливается на копиях бан
});
test('каждая проверка объявлена, у тяжёлых job включён реюз, у остальных нет', () => {
assert.deepEqual(REUSE_JOBS, ['smoke', 'golden', 'performance_smoke', 'backend']);
assert.deepEqual(REUSE_JOBS, ['smoke', 'golden', 'performance_smoke', 'geometry_parity', 'backend']);
for (const name of CHECK_NAMES) {
assert.ok(MANIFEST[name].size > 0, `${name}: пустой manifest`);
assert.ok(Array.isArray(CHECKS[name].entries) && Array.isArray(CHECKS[name].roots), name);
@@ -132,6 +132,16 @@ test('каждая проверка объявлена, у тяжёлых job в
test('§8.1 представители: каждая категория каждой тяжёлой job — её вход', () => {
const expect = {
geometry_parity: {
source: ['src/junction-limits.ts', 'src/space-geometry.ts',
'custom_components/houseplan/junction_limits.py', 'custom_components/houseplan/wall_segment_model.py'],
tests: ['tests_backend/junction_parity.py'],
fixtures: ['test/fixtures/junction-limits-parity.json'],
config: ['tsconfig.junction-parity.json', 'tsconfig.json'],
toolchain: ['package.json', 'package-lock.json', '.nvmrc', '.python-version',
'.github/workflows/validate.yml'],
protocol: ['scripts/fix-test-build.mjs', 'scripts/gate-reuse.mjs', 'scripts/check-inputs.mjs'],
},
backend: {
source: ['custom_components/houseplan/websocket_api.py', 'scripts/support-relay/relay.py',
'scripts/support-relay/hp_relay/app.py', 'scripts/sh3d-convert/convert.mjs', 'scripts/dump-config-schema.py'],
@@ -216,6 +226,10 @@ test('§8.1 обратная проба (AC6): UI — не вход backend, bac
for (const job of ['smoke', 'golden', 'performance_smoke']) {
assert.ok(![...MANIFEST[job]].some((f) => f.startsWith('tests_backend/')), `${job} читает tests_backend`);
}
for (const file of ['src/houseplan-card.ts', 'src/houseplan-editor-runtime.ts',
'custom_components/houseplan/websocket_api.py']) {
assert.ok(!MANIFEST.geometry_parity.has(file), `geometry_parity зависит от ${file}`);
}
});
test('§5.5 лист покрытия: ни одного неизвестного исполняемого файла, ни одной лишней записи NOT_AN_INPUT', () => {