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.

Zelené testy nad zastaralými generovanými soubory

Testy procvičují kód a o odvozených commitnutých výstupech neříkají nic, takže build je zelený a artefakty jsou špatně.

→ měl zelenou pipeline nad vygenerovanými soubory, které už neodpovídaly svým zdrojům

cena, když k tomu dojde
střední
jak často
běžné

Okamžik

Všechno je zelené. Testy procházejí, linter mlčí a čtyři commitnuté soubory generované z kódu popisují kód tak, jak byl před poslední změnou. Nic v pipeline se na ně nedívá, protože to není kód a nejsou to testy.

Proč k tomu dochází

Generované soubory, které jsou commitnuté, tvoří nepříjemnou kategorii: recenzují se jako zdroj a vznikají jako výstup. Jejich regenerace je krok a krok, který nespouští totéž, co spouští testy, přeskočí ten, kdo spěchá — což je čím dál častěji pracovník, kterému bylo řečeno změnit zdroj, a on udělal přesně to.

Proč to lepší model nevyřeší

Regenerace je krok buildu, ne úsudek. Pracovník, který ji nespustil, nezklamal v uvažování; nikdo mu to neřekl, a říkat mu to pokaždé je ruční synchronizace, kterou měla generace odstranit.

Co to stojí

Recenzenti čtou zastaralý artefakt a schválí ho. Konzumenti artefaktu — web, generátor klientů, jiný nástroj — servírují loňskou pravdu. A strom už není reprodukovatelný: spuštění generátoru vyrobí diff, který se každý naučí ignorovat.

Co Majordomus dělá

Graf odvozování je zapsán jednou, v pořadí závislostí, takže člověk a CI spouštějí totéž ve stejné posloupnosti. Každý commitnutý odvozený artefakt má kontrolu, která jej regeneruje a porovná: generate --check pojmenuje každý soubor, který se liší nebo chybí, a skončí nenulově, a data webu mají tutéž kontrolu proti hashi svých vstupů. Dvojí spuštění celého odvození nic nemění, což je to, s čím kontrola porovnává.

Před a po

before   tests: green      docs/generated/*.json: from two commits ago

after    $ scripts/derive-check
         stale: docs/generated/openapi.json (differs)
                site/data/registry/registry.json (differs)
         exit 10

Co nedělá

Nerozhoduje, co se má generovat, a během kontroly nic tiše nepřegeneruje — kontrola, která zapisuje, není kontrola. Pojmenuje, co je zastaralé, a příkaz, který to opraví.

Jak to vypadá

Konkrétní situace, jedna pro každé publikum. Každá je deklarována v záhlaví okamžiku, takže stav před a po jsou data, ne próza, od které by se stránka mohla odchýlit.

  1. Worker, který změnil jen zdroj ai-native-team

    před
    Worker změní deklaraci, testy projdou a commitnutá reference z ní odvozená je nyní popisem předchozí verze.
    po
    `generate --check` jmenuje každý artefakt, který se liší od toho, co produkuje jeho zdroj, a CI jej spouští.
  2. Derivace s pořadím platform-team

    před
    Regenerace se provádí ve špatném pořadí, takže jeden výstup je sestaven ze zastaralého vstupu a vypadá aktuálně.
    po
    Graf odvození je zapsán jednou, spouští se v pořadí závislostí a dokazuje se opětovným spuštěním a porovnáním.
  3. Recenze artefaktu, který nebyl znovu postaven enterprise

    před
    Generovaný dokument je zkontrolován a schválen, zatímco zdroj, který údajně popisuje, se pohnul.
    po
    Artefakt se v CI regeneruje a strom se odmítne, pokud se liší; schválení se vztahuje na něco, co je z konstrukce aktuální.

Jak to poznáte

Pozorovatelné příznaky, které tento okamžik deklaruje. Jsou dotazníkem na indexu a vstupem pro majordomus why diagnose; nic jiného je nedefinuje.

  • Změna přistála bez regenerace souborů z ní odvozených. forgot-to-regenerate
  • Pipeline je zelená a commitnutý generovaný soubor je zastaralý. green-but-stale
  • Regenerace odvozených souborů je krok, na který si někdo musí vzpomenout. regeneration-is-manual

Kde to v nástroji najdete

Vše níže je načteno z vlastního záhlaví tohoto okamžiku a ověřeno proti repozitáři. Neexistující název by neprošel validací.

příkazy, které na to odpovídají

schopnosti spustitelného souboru, které na to odpovídají

co dohlíží — odvozeno z tvrzení níže

tvrzení, která tuto stránku podpírají, a důkazy za každým z nich

pravidla, která jej řídí

  • project.derived-files-regenerated
  • project.derived-once
  • majordomus.projection-integrity
  • project.interfaces-are-projections

případy užití, které ukazují cestu ven

Pokud vám tohle zní povědomě, další také

Co tento okamžik pojmenovává, co pojmenovává jeho a co sdílí jeho oblast, publikum nebo štítky. Druhé a třetí je odvozeno; zapsáno je jen první.

Všech 38 a jak souvisejí s nástrojem →

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