mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
ci: полная история без блобов там, где содержимое старых файлов не нужно
Полный клон — 215 МБ .git, blobless — 26 МБ, история коммитов и теги в обоих полные (замер в #345). Две job Validate качают историю целиком: preflight и changes. Первой нужны сообщения коммитов, трейлеры и имена изменённых файлов, второй — только `git diff --name-only`. Содержимое старых ревизий не читает ни одна из них ни на одном шаге. Коммиты и деревья по-прежнему скачиваются полностью, поэтому диапазоны и merge-base работают как раньше. Единственная догрузка блоба по требованию — `git show origin/main:.github/workflows/process.yml` в шаге сверки, один файл. Браузерным job фильтр не нужен: у них глубина по умолчанию, истории они не касаются вовсе. Тест закрепляет и обратную сторону: --depth=1 сюда подставлять нельзя, он того же размера, но без merge-base, а на нём стоят процессный гейт, smoke-select и каждый диапазон origin/dev..HEAD. Два мутанта проверены руками — снятый фильтр и подмена на depth=1, — каждый убит. Issue: #345 User-Visible: no
This commit is contained in:
@@ -70,3 +70,22 @@ test('предполётные проверки не прячут друг др
|
||||
assert.equal(preflight.match(/continue-on-error: true/g)?.length, 4);
|
||||
assert.ok(preflight.includes('exit $fail'), 'вердикт обязан падать сам');
|
||||
});
|
||||
|
||||
test('джобы с полной историей качают её без блобов (#345)', () => {
|
||||
const workflow = read('validate.yml');
|
||||
// Полный клон — 215 МБ .git, blobless — 26 МБ, история и теги в обоих полные
|
||||
// (замер в #345). Обе эти job читают сообщения коммитов и ИМЕНА изменённых
|
||||
// файлов; содержимое старых ревизий им не нужно ни на одном шаге.
|
||||
for (const job of ['preflight', 'changes']) {
|
||||
const start = workflow.indexOf(` ${job}:`);
|
||||
assert.ok(start > 0, `нет job ${job}`);
|
||||
const chunk = workflow.slice(start, start + 1400);
|
||||
assert.match(chunk, /fetch-depth: 0, filter: 'blob:none'/,
|
||||
`${job} обязана качать историю без блобов`);
|
||||
}
|
||||
// Обратная сторона: --depth=1 сюда подставлять нельзя. Он того же размера, но
|
||||
// без merge-base, а на нём стоят процессный гейт, smoke-select и каждый
|
||||
// диапазон origin/dev..HEAD.
|
||||
assert.equal(workflow.includes('fetch-depth: 1'), false,
|
||||
'shallow-клон ломает merge-base: диапазоны и процессный гейт перестают работать');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user