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.

CI zaznamenává každý test, který spustila, spolu s commitem a během, ve kterém proběhl, a web publikuje verdikt sledovaného ledgeru u tohoto commitu jako aktuální jen tehdy, když běh CI na publikovaném commitu měřil čisté stromy a nic nechybělo, nebylo odmítnuto ani neselhalo; jinak jako zastaralý se vzdáleností či selháními, jako neznámý s důvody, nebo jako nedostupný s důvodem

Každý push do masteru spouští behaviorální sadu, testy cratu a coverage

deklarovaný stavdeklarovaný stav: zaručeno Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.

zaznamenané důkazyzaznamenané důkazy: nespuštěno Deklarováno jako zaručené, ale nepodložené zaznamenaným během: test je pojmenován, ale žádný úspěšný běh nad současnými vstupy zaznamenán není. jak se zaznamenávají důkazy

Úloha evidence ve validate.yml nejprve odvodí report přes `majordomus evidence show` na vlastním checkoutu, změřeném čistém či špinavém, se staženými reporty a výstupem v dočasném adresáři runneru, takže tento report je verdiktem sledovaného ledgeru na commitu běhu. Teprve poté zaznamená výsledky sady a crate přes `majordomus evidence record --origin ci`, který každé provedení označí během z jeho prostředí; tyto řádky jsou záznamem běhu, počítají se v manifestu a o žádném verdiktu nerozhodují, a řádky běhu na trunku se do sledovaného ledgeru dostanou jen přes zaznamenávací pull request z ADR 0080. Sada i úloha rust měří každá strom, ve kterém běžely, s vyloučením jen výstupů, které jejich běh pojmenovává, na cestách, kam tento běh zapisuje (rust-check zapisuje v adresáři crate), a pracovní strom manifestu se odvozuje z těchto měření; report změřený na jiném commitu je odmítnut a report, který nepřinesl žádné provedení, je nepřítomný. U pull requestu je zaznamenaným commitem merge commit, který běžel, s head vedle něj. `scripts/pages evidence` publikuje artefakt publikovaného commitu nebo jeho nejbližšího předka do site/data/evidence.json, který se nikdy necommituje, a zadrží current, se všemi důvody, kdykoli běh nemůže report potvrdit, včetně reportu, který kolektor neodvodil nebo nepřinesl. ADR 68, ve znění ADR 0087.

Co to znamená

Každý push do masteru spouští behaviorální sadu, testy crate a měření pokrytí. Tyto běhy jsou důkazem pro většinu matice a až do tohoto tvrzení se žádný z nich nedostal k ničemu, co by čtenář viděl. CI nyní uchovává, co spustilo, a výsledek každého testu jako zaznamenané provedení. Každé nese commit, proti kterému běželo, a běh, v němž proběhlo: identifikátor běhu, pokus, workflow, job a adresu, kterou přidělil provider. U pull requestu je tím commitem merge commit, který běžel, a head, z něhož vznikl, je nesen vedle něj.

To, co web publikuje vedle tvrzení, je verdikt sledované účetní knihy u commitu, nad nímž běželo CI, ne verdikt, který rozhodla vlastní spuštění CI. Ta spuštění jsou záznam běhu: počítají se a o ničem nerozhodují. Web pak říká, zda běh CI tento verdikt pro commit, z něhož byl web sestaven, potvrzuje. Je aktuální jen tehdy, když je běh právě onoho commitu, každá úloha, která spouštěla testy, měřila čistý strom, zpráva byla odvozena na čistém checkoutu a dostala se do artefaktu a nic nechybělo, nebylo odmítnuto ani neselhalo. Běh staršího commitu je zastaralý, s počtem commitů a změněných souborů mezi nimi, a stejně tak běh onoho commitu, který zaznamenal selhání. Běh onoho commitu, který zprávu nemůže potvrdit, je neznámý, se všemi důvody, a zpráva, kterou kolektor nedokázal odvodit, je jedním z nich. Žádný důkaz vůbec je nedostupný, s důvodem. Jako aktuální se na stránce ukáže jen potvrzující běh právě onoho commitu.

Princip

Job evidence z validate.yml stáhne do dočasného adresáře runneru zprávy, které zanechaly joby suite, crate a coverage, a měření, která suite a job rust pořídily ze stromů, v nichž běžely, a předá je scripts/ci/evidence-collect. Každé měření vylučuje jménem výstupy, které jmenuje jeho vlastní běh, na cestách, kam tento běh zapisuje, a nic jiného: zprávu suite v kořeni a časování a adresář artefaktů jobu rust v adresáři crate, kde běží scripts/rust-check.

Kolektor nejdřív odvodí report: změří vlastní checkout a spustí majordomus evidence show, než se cokoli zaznamená, takže report je verdiktem sledovaného ledgeru na onom commitu. Teprve potom reporty zaznamená přes majordomus evidence record --origin ci. Pro původ ci uvnitř prostředí GitHub Actions to opatří každé provedení run čteným RunRef::from_env; lokální záznam nejmenuje žádný běh, ani uvnitř CI shellu. Report, jehož job změřil jiný commit, je odmítnut a nikdy se nezaznamená, a report, který nepřinesl žádné provedení, je označen jako chybějící. Kolektor shrne pokrytí přes scripts/rust-coverage --summary-json a zapíše manifest, který nese měření producentů, z nich odvozený pracovní strom, strom, v němž byl report odvozen, a to, co chybělo nebo bylo odmítnuto. Výsledek se uchovává jako artefakt evidence.

Před každým buildem pages.yml spustí scripts/pages evidence. Najde artefakt zaznamenaný k publikovanému commitu nebo jeho nejbližšímu předkovi a zapíše site/data/evidence.json, který se nikdy necommituje. Publikuje zprávu tak, jak byla odvozena, a manifest čte jen proto, aby rozhodl o stavu: důvod může odepřít stav aktuální, ale zprávu nikdy nemění. /evidence/ ji vykreslí stejným terminálem, ve kterém domovská stránka přehrává běhy, a pod stavem vypíše každý důvod. Když běh masteru skončí, zatímco jeho commit je stále špičkou, znovu spustí workflow Pages a tato publikace řekne aktuální, když běh zprávu potvrdí.

Rozhodnutí je ADR 68, jak ho mění ADR 0087. Validační běh nikdy necommituje své řádky a řádky běhu na trunku se dostanou do sledovaného ledgeru jen přes zaznamenávací pull request z ADR 0080.

Jak to vidět

bash test/run.sh 357_ci_records_evidence
scripts/pages evidence --commit HEAD --out /tmp/evidence.json && jq 'del(.panels)' /tmp/evidence.json

Případ zaznamenává uvnitř popsaného běhu i mimo něj a sbírá běhy ve fixture s vlastní maticí tvrzení. Ukazuje, že tvrzení prokázané jen během běhu se ve sebraném reportu stále čte jako not_run, že strom je ten, který změřily produkující joby (jeden neměřený runner ho nechá neznámým vedle čistého) a že report změřený na jiném commitu je odmítnut. Publikuje sebrané důkazy proti publikovanému commitu, potvrzené i nepotvrzené, včetně reportu, který nebyl odvozen nebo nebyl přenesen, proti jeho rodiči a proti commitu mimo jeho historii. Čte commitnuté validate.yml kvůli zapojení a vylučované cesty jobu rust bere z jeho kroku rust-check a z místa, kde běží scripts/rust-check.

Co nepokrývá

Důkazy jsou připojeny k tvrzením, zatím ne k funkcím, příkazům, nástrojům MCP ani pravidlům, a pokrytí se hlásí pro crate a jeho doménu relací, ne pro jednotlivé subjekty. Zaznamenané řádky stále nesou razítko stromu samotného zapisovače, ne měření producentů, které manifest drží zvlášť; označení měření do každého řádku je pozdější změna. Řádky běhu na kmeni se zatím necommitují do sledovaného ledgeru, protože zaznamenávající pull request není zapojen. Job evidence nebrání sloučení: rozbitý kolektor způsobí, že web hlásí nedostupné, což je vidět a nic neodmítá. Vlastní kód shellového nástroje nemá žádné měření pokrytí a nic zde nepředstírá, že ho má.

Proč existuje

Většina tvrzení hlásí not_run v repozitáři, jehož CI spouštělo jejich testy při každém pushi. Důkaz, který se stane a zahodí se, je pro čtenáře totéž co žádný důkaz. A důkaz publikovaný nad vlastními řádky běhu, z checkoutu, který nezměřil nic, co běželo, pod odznakem hlásícím aktuálnost, je horší: vypadá jako verdikt autority a není jím.

Detail vykreslen z docs/claims/evidence-recorded-in-ci.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    CI zaznamenává každý test, který spustila, spolu s commitem a během, ve kterém proběhl, a web publikuje verdikt sledovaného ledgeru u tohoto commitu jako aktuální jen tehdy, když běh CI na publikovaném commitu měřil čisté stromy a nic nechybělo, nebylo odmítnuto ani neselhalo; jinak jako zastaralý se vzdáleností či selháními, jako neznámý s důvody, nebo jako nedostupný s důvodem

    Žádná funkce ani odpovědnost v README ji nepojmenovává; tato stránka je místo, kde je uvedena.

  2. 2 · kanonické tvrzení

    evidence-recorded-in-cideklarovaný stav: zaručeno v docs/CLAIMS.yaml

    Definováno v přečtěte si to na tomto webu · docs/EVIDENCE.md

  3. 3 · implementace

    scripts/ci/evidence-collect

  4. 4 · test a scénáře

    Test: test/cases/357_ci_records_evidence.sh

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: nespuštěno jak se zaznamenávají důkazy

Ověřte si to sami

Test běží v jednorázovém dočasném repozitáři a ověřuje chování, ne řetězec ve zdrojovém kódu.

z klonu repozitáře
bash test/run.sh 357_ci_records_evidence

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