mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-25 11:45:51 +03:00
test(runner): шаг preRun git для кейсов с репозиторием
Кейсы навыков, читающих изменения из git, строят репозиторий шагом
{ "git": [...] }. Общая реализация для runner.mjs и verify-snapshots.mjs
в tests/common/git-step.mjs — настройки машины на фикстуру не влияют.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ANXwbMUhuRFSCsq2RgmTTm
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
bd10ec08b6
commit
ce7238792e
@@ -0,0 +1,14 @@
|
||||
// Шаг preRun `git` — общий для runner.mjs и verify-snapshots.mjs, чтобы оба раннера строили
|
||||
// одинаковый репозиторий. Настройки машины не влияют: автор коммита задан, перевод строк и
|
||||
// подпись коммитов выключены.
|
||||
import { execFileSync } from 'child_process';
|
||||
|
||||
const GIT_STEP_CONFIG = [
|
||||
'-c', 'user.name=test', '-c', 'user.email=test@example.com',
|
||||
'-c', 'core.autocrlf=false', '-c', 'core.safecrlf=false',
|
||||
'-c', 'commit.gpgsign=false', '-c', 'init.defaultBranch=main',
|
||||
];
|
||||
|
||||
export function runGitStep(workDir, args) {
|
||||
execFileSync('git', [...GIT_STEP_CONFIG, ...args], { cwd: workDir, stdio: 'pipe' });
|
||||
}
|
||||
@@ -478,6 +478,8 @@ ibcmd-проход автоматически `○ skipped`, если рядом
|
||||
|---|---|
|
||||
| `{ "script": "<навык>/scripts/<файл>", "input": {...}, "args": { "-Flag": "{inputFile}" } }` | Прогон другого навыка для подготовки фикстуры. Плейсхолдеры: `{inputFile}`, `{workDir}` |
|
||||
| `{ "writeFile": { "path": "<путь>", "content": "<строка или объект>" } }` | Записать произвольный файл в `workDir` (объект сериализуется в JSON). Ключ `"executable": true` ставит бит исполнения — нужен фейку платформы на *nix, где навык запускает её через `exec`; на Windows no-op |
|
||||
| `{ "deletePath": "<путь>" }` | Удалить файл или каталог в `workDir` — состояние «файла нет», которое навыки сами не создают |
|
||||
| `{ "git": ["<аргумент>", ...] }` | Выполнить `git` с аргументами в `workDir` — репозиторий для навыков, читающих изменения из git. Автор коммита задан, `core.autocrlf` выключен |
|
||||
|
||||
Дополнительно у шага-скрипта: `"cwd": "{workDir}"` — запустить шаг из рабочего каталога. Нужно,
|
||||
когда относительный путь в `args` (напр. `-OutputPath: "Template.xml"`) должен лечь в фикстуру, а
|
||||
|
||||
@@ -12,6 +12,7 @@ import { tmpdir, cpus } from 'os';
|
||||
// есть не-ASCII символы — кириллическое имя пользователя в %TEMP%, кириллическое имя объекта 1С
|
||||
// в deletePath. Подробности и таблица сборок — в самом модуле.
|
||||
import { removePathSync, copyTreeSync } from '../common/fsutil.mjs';
|
||||
import { runGitStep } from '../common/git-step.mjs';
|
||||
|
||||
// ─── Paths ──────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -869,6 +870,12 @@ async function runCaseAsync(testCase, opts) {
|
||||
removePathSync(join(workDir, step.deletePath));
|
||||
continue;
|
||||
}
|
||||
// git step — git-команда в workDir: так строится репозиторий для навыков, читающих
|
||||
// изменения из git (общая реализация с verify-snapshots — tests/common/git-step.mjs).
|
||||
if (step.git) {
|
||||
runGitStep(workDir, step.git);
|
||||
continue;
|
||||
}
|
||||
const preScript = resolveScript(step.script, opts.runtime);
|
||||
const preArgs = [];
|
||||
for (const [flag, value] of Object.entries(step.args || {})) {
|
||||
|
||||
@@ -20,6 +20,7 @@ import { tmpdir } from 'os';
|
||||
// fs.rmSync/fs.cpSync напрямую не зовём: на Windows они молча ничего не делают, когда в пути
|
||||
// есть не-ASCII символы. Подробности и таблица сборок — в самом модуле.
|
||||
import { removePathSync, copyTreeSync } from '../common/fsutil.mjs';
|
||||
import { runGitStep } from '../common/git-step.mjs';
|
||||
|
||||
// ─── Paths ──────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -646,8 +647,14 @@ function runPreSteps(preRun, workDir, runtime, log) {
|
||||
log(`preRun: deletePath ${step.deletePath}`, true);
|
||||
continue;
|
||||
}
|
||||
// git step — как в runner.mjs: репозиторий для навыков, читающих изменения из git.
|
||||
if (step.git) {
|
||||
runGitStep(workDir, step.git);
|
||||
log(`preRun: git ${step.git.join(' ')}`, true);
|
||||
continue;
|
||||
}
|
||||
if (!step.script) {
|
||||
throw new Error(`preRun: шаг без script/writeFile/deletePath — ${JSON.stringify(step).slice(0, 120)}`);
|
||||
throw new Error(`preRun: шаг без script/writeFile/deletePath/git — ${JSON.stringify(step).slice(0, 120)}`);
|
||||
}
|
||||
const preArgs = [];
|
||||
for (const [flag, value] of Object.entries(step.args || {})) {
|
||||
|
||||
Reference in New Issue
Block a user