'zoomzilla.ru', 'indpic' => ['1' => 1, '2' => 0, 'default' => '1'], 'theme' => ['light' => 0, 'dark' => 1, 'default' => 'dark'], 'degr' => ['1' => 1, '2' => 0, 'default' => '1'], 'registration' => ['before' => 0, 'after' => 1, 'default' => 'after'], 'bchoice' => ['a' => 1, 'b' => 0, 'default' => 'a'], 'chb' => ['a' => 1, 'b' => 0, 'default' => 'b'], 'tp' => ['1' => 0, '2' => 1, 'default' => '1'], 'focus' => ['center' => 0, 'face' => 1, 'default' => 'face'], ]; if (($config['host'] ?? null) !== $expected['host']) { $failures[] = 'Рабочий config.json обязан направлять загрузку на zoomzilla.ru.'; } foreach (array_diff_key($expected, ['host' => true]) as $key => $settings) { $actual = $config['utm'][$key] ?? []; if (($actual['weights'] ?? null) !== array_diff_key($settings, ['default' => true]) || ($actual['default'] ?? null) !== $settings['default']) { $failures[] = "Рабочий config.json должен сохранять stage-настройку UTM {$key}."; } } } $workflow = (string) file_get_contents($root . '/.gitea/workflows/deploy.yml'); $legacyStart = strpos($workflow, ' deploy:'); $stageStart = strpos($workflow, 'deploy-zoomstage:'); $productionStart = strpos($workflow, 'deploy-zoompixel-production:'); $legacyBlock = $legacyStart === false || $stageStart === false ? '' : substr($workflow, $legacyStart, $stageStart - $legacyStart); $stageBlock = $stageStart === false || $productionStart === false ? '' : substr($workflow, $stageStart, $productionStart - $stageStart); $productionBlock = $productionStart === false ? '' : substr($workflow, $productionStart); foreach ([ 'legacy FTP' => $legacyBlock, 'deploy-zoomstage' => $stageBlock, 'deploy-zoompixel-production' => $productionBlock, ] as $delivery => $block) { if ($block === '' || !str_contains($block, 'config\\.json$') || !str_contains($block, 'ensure-focus-config.php') || !str_contains($block, 'Preserve host config and add focus if absent')) { $failures[] = "{$delivery} обязан сохранять хостовый config.json и добавлять только отсутствующий focus."; } } if (is_file($root . '/config.json.example')) { $failures[] = 'config.json.example не должен существовать: рабочий config.json единственный.'; } if ($failures !== []) { fwrite(STDERR, "FAILED\n- " . implode("\n- ", $failures) . "\n"); exit(1); } fwrite(STDOUT, "OK: versioned stage config and ZoomPixel delivery\n");