Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Relace nekončí za vlastním publikovaným webem

Relace nekončí za vlastním publikovaným webem

majordomus://rule/majordomus.publication-currency@1aktivní úlohycompletionnasazeníevidence

odkazuje na

odkazuje na něj

Nic ve vrstvě to nejmenuje. Zpětné odkazy se odvozují, takže prázdný seznam je odpověď, ne opomenutí.

Zdůvodnění

majordomus.completion-gates učinil verdikt validační pipeline vlastností úlohy, ne pull requestu. Odvozuje, které kontroly platí, z vlastních cest sady změn, což je správné odvození pro každou kontrolu, která měří strom — a strukturálně není schopen dosáhnout na ty, které ne.

Repozitář, který publikuje, má dva stromy. Jeden je v checkoutu a prozkoumává ho každá kontrola modelu, druhý je ten, který se veřejnosti skutečně servíruje, a ten nevidí žádná z nich. Druhý není funkcí prvního: je funkcí toho, zda proběhl deployment, zda doběhl do konce, zda uspěl vlastní build toho, co bylo pushnuto, na straně hostingového providera, a zda od té doby něco přistálo. Žádná úprava žádného souboru nemůže způsobit, aby ta otázka dopadla jinak, takže ji žádná třída cest nikdy nemůže vybrat jako kontrolu, která se na ni ptá, a kontrola v žádné třídě se klade jen v plném plánu — který v repozitáři, jenž plánuje svůj plný běh při pushi do trunku, běží před publikací, kterou by měl posoudit.

Výsledkem je otázka, kterou nikdo nevlastní. Tři případy naměřené v repozitáři Majordomus, kde bylo toto pravidlo napsáno, z nichž každý nechal všechny kontroly na úrovni commitů zelené:

  • nesloučený ref se asi půl hodiny servíroval jako veřejný web a všiml si toho člověk očima;
  • dvacet pull requestů přistálo za jedno odpoledne a web zůstal o hodiny za trunkem;
  • vlastní build správně pushnutého commitu u hostingového poskytovatele skončil chybou a předchozí commit se servíroval 27 minut.

Okamžik, kdy má smysl se na to ptát, není, když se soubor změní. Je to, když pracovník říká, že práce je hotová, protože „hotovo“ a „veřejnost to nevidí“ je rozpor, který kontrakt dokončení existuje, aby jej odmítl.

Proč se toto měří a nezaznamenává. majordomus.completion-gates splní kontrolu řádkem knihy nesoucím hash souborů, nad nimiž kontrola běžela, a běh přestane platit, když se tento hash změní. Tento mechanismus nemůže udržet tento verdikt, protože jeho předmět není ve stromu: kontrola publikace spuštěná před deseti minutami popisuje web, který mohl být mezitím nahrazen, aniž by se dotkl jediného souboru repozitáře. Důkaz, jehož předmět se může změnit bez změny stromu, nemá hash, s nímž by vypršel, a proto se neukládá. Kontrola se spouští živě, v okamžiku tvrzení.

Požadované chování

Model CI deklaruje, které kontroly měří nasazení. Jednou z nich je kontrola s at-finish: true. Nic tu není napevno: repozitář, který nic nepublikuje, neoznačí žádnou kontrolu, a požadavek pak nemá co spouštět a říká to.

Politika vybírá požadavek. publication_current v verification.finish_requires ho zapíná, jako každý jiný řádek smlouvy.

finish se na to ptá a check ne. check se spouští často a levně a tato kontrola sahá na síť a čeká na CDN; zařazení do každého check by bylo pomalé, nespolehlivé check, což je check, které lidé přestanou spouštět. Hook konce relace zapisuje předávku, ne finish, takže relace, která předává, se také nikdy nedotazuje — ze stejného důvodu, proč se nedotazuje poctivé blocked: handed_over je tvrzení o nedokončené práci a tento požadavek se týká tvrzení, že práce je hotová.

Odmítnut je jen výsledek completed. Úloha, která se hlásí jako partial, blocked, failed nebo no_match, je poctivá o nedokončené práci, a odmítnutí by workera naučilo místo toho tvrdit completed — argument, který majordomus.completion-gates už vznáší, zde aplikovaný beze změny.

Verdikt, který nešlo zjistit, se ohlásí, nikdy nedomýšlí. Kontrola rozlišuje „publikace není aktuální“ od „nepodařilo se zjistit“ — žádná síť, žádná publikovaná větev, žádné API hostingu. První odmítne. Druhé se ohlásí jménem, s exit kódem a důvodem, a odmítne completed také: relace ve vlaku není důkaz, že web je zastaralý, ale completed tvrdí, že je aktuální, a požadavek, který projde vždy, když nemůže měřit, je dekorace. Nikdy se neohlásí jako to první a poctivé partial nebo blocked se kvůli němu nikdy neodmítne. Ticho není zelená; pojmenuje se — je to argument, který repozitář Majordomus uvádí jako project.never-reported-is-not-green, na nějž balíček nemůže záviset, protože vendorované pravidlo se musí vyřešit uvnitř balíčku, ve kterém se dodává.

Chování při selhání

Porušení je zjištění FAIL v kategorii gate, které pojmenovává kontrolu, příkaz, který byl spuštěn, a důvod, který kontrola uvedla — který commit je publikován, který commit je na trunku, jak dlouho je publikace dlužná. finish skončí kódem 10 a nic nezapíše, takže úloha zůstane aktivní a záznam nikdy neřekne completed. Náprava je nasazení, a ne příznak.

Ověření

mj_validate_publication_currency o tom rozhoduje, je spouštěno z finish, čte kontroly, které model CI označuje at-finish, a spouští každou z nich. test/cases/275_publication_is_current.sh to dokazuje na fixture repozitářích, jejichž skripty kontrol píše sám případ: jeden, který skončí s 0, jeden s 10, jeden s 12 (odmítnuto a pojmenováno jako nedosažitelné), jeden, který takovou kontrolu nedeklaruje, a jeden končící s jiným výsledkem než completed; test/cases/578_an_unknown_gate_refuses_completed.sh dokazuje odmítnutí nedosažitelnosti vedle čtečky kontrol dokončení.

Odkud to pochází

kanonický soubor
.ai/repo/rules/vendor/majordomus/rules/publication-currency.v1.md
identity
majordomus.publication-currency@1
dostupné také jako
Zdroj MCP majordomus://rule/majordomus.publication-currency@1 · majordomus entity show rule/majordomus-publication-currency-1 · GET /api/v1/entity?uri=majordomus://rule/majordomus.publication-currency@1
v Cockpitu
/cockpit/objects/rule/majordomus-publication-currency-1

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.