Files
admin/host-stacks/local/sched-pipelines/render-tasks.cjs
vitya 5d57f49e80 ops: schedd 0.7.0 (cancelUrl-канал), dry-run мок-publish оба зелёные, ТЗ worker-cancel-url
- schedd.Dockerfile: daemon 0.6.0 → 0.7.0 (cancel-канал: cancelUrl в accepted-envelope)
- tasks.json: publish+githubDistro с dryRun:true у обеих тасок (мок-publish dry, ноль мутаций)
- compose: DRY_RUN=1 безопасный дефолт; ozon state персистентен (bind-mount, noop работает)
- тесты: мок-publish dry — yandex 13/13, ozon 10/10, GitHub/Gitea/verdaccio чисто
- баг cancel воспроизведён (воркер продолжает после cancel) → ТЗ worker-cancel-url обеим командам
2026-08-20 23:49:51 +03:00

47 lines
1.7 KiB
JavaScript

'use strict';
/**
* Рендер tasks.generated.json из tasks.json (шаблон) + .env.
* Подставляет __SCHED_API_KEY__ / __WEBHOOK_SECRET__; после рендера валидирует
* «ни одного плейсхолдера не осталось».
*
* Запуск: node render-tasks.mjs (в этой папке; .env рядом)
*/
const fs = require('node:fs');
const path = require('node:path');
const envPath = path.join(__dirname, '.env');
const tplPath = path.join(__dirname, 'tasks.json');
const outPath = path.join(__dirname, 'tasks.generated.json');
function loadEnv(file) {
const out = {};
for (const line of fs.readFileSync(file, 'utf8').split(/\r?\n/)) {
const m = /^\s*([A-Z0-9_]+)\s*=\s*(.*)\s*$/.exec(line);
if (m && !line.trim().startsWith('#')) out[m[1]] = m[2].replace(/^["']|["']$/g, '');
}
return out;
}
const env = loadEnv(envPath);
const tpl = fs.readFileSync(tplPath, 'utf8');
const subs = {
__SCHED_API_KEY__: env.SCHED_API_KEY,
__WEBHOOK_SECRET__: env.WEBHOOK_SECRET,
__PUBLISH_REGISTRY__: env.PUBLISH_REGISTRY || 'null',
__PUBLISH_REMOTE_BASE__: env.PUBLISH_REMOTE_BASE || 'null',
__PUBLISH_GH_API_BASE__: env.PUBLISH_GH_API_BASE || 'null',
};
let out = tpl;
for (const [k, v] of Object.entries(subs)) {
if (!v) throw new Error(`.env не содержит ${k.slice(2, -2)} — рендер невозможен`);
out = out.split(k).join(v);
}
const leftovers = [...out.matchAll(/__[A-Z_]+__/g)].map((m) => m[0]);
if (leftovers.length) throw new Error(`незаменённые плейсхолдеры: ${[...new Set(leftovers)].join(', ')}`);
fs.writeFileSync(outPath, out);
console.log(`tasks.generated.json записан (${outPath})`);