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.

Zaznamenané provedení nese commit a strom, které uvedlo měření jeho vlastního běhu, přičemž měření jmenuje report, ke kterému patří, a nikdy neskrývá sledovanou změnu; měření jiného commitu nebo jiného reportu se odmítne, lokální měření, které nejmenuje žádný report, se odmítne, report z CI bez měření se odmítne a report zaznamenaný bez měření nese neznámý strom, který se nikdy nečte jako prokázaný

Recorder neměří svůj vlastní checkout. Měří ho běh, když skončí, s

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

evidence stamp měří checkout tak, jak jej běh zanechal, přičemž účetní kniha důkazů je ignorována a vyloučeny jsou jen vlastní nesledované výstupy běhu; evidence record --provenance přenáší toto měření do provedení ve zprávě a digest čistého běhu bere z commitu. Razítko měří v okamžiku pořízení, ne v průběhu běhu, a soubor stromu úlohy CI nejmenuje žádnou zprávu, dokud CI neorazítkuje svou zprávou.

Co to znamená

Záznamník neměří vlastní checkout. Měří ho běh, když skončí, pomocí majordomus evidence stamp, a záznamník toto měření přenese do provedení zprávy, kterou pojmenovává:

  • commit a strom, s nimiž je provedení zaznamenáno, jsou ty, které uvedlo razítko běhu, ať vypadá checkout zapisovače při zápisu jakkoli;
  • strom ignoruje ledger důkazů a vylučuje jen vlastní nesledované výstupy běhu; změna sledovaného souboru je vždy změna;
  • když byl strom běhu čistý, otisk testu se bere z commitu, z bajtů, které běh provedl;
  • lokální report zaznamenaný bez měření nese strom unknown a nikdy nečte proven.

Zapisovač odmítne, dřív než cokoli zapíše, měření jiného commitu, měření jiných bajtů než report, měření pro report, který nebyl zadán nebo byl vázán na jiného producenta, lokální nebo release měření, které nejmenuje žádný report, a CI report bez měření.

Princip

evidence::stamp v apps/majordomus-cli/src/evidence/provenance.rs přečte HEAD, zkontroluje každý --exclude (odmítnut, když je to vzor, jmenuje celý checkout, není cestou repozitáře nebo drží sledované soubory, na což odpovídá git ls-files), vytvoří digest reportu a změří strom přes git::working_tree_excluding, jediné měření stromu, které skryje vyloučenou cestu jen tehdy, dokud není sledována. Výsledkem je EvidenceProvenance: commit, strom, co bylo vyloučeno, čas, toolchain producenta, verze zapisovače, cesta reportu (relativní vůči repozitáři nebo název souboru, nikdy cesta stroje) a digest, hostitel a běh CI.

evidence record --provenance [<producer>=]<file> přiřadí každý soubor k reportu, který měří, a evidence::record v apps/majordomus-cli/src/evidence/record.rs ověří každé měření proti HEAD a proti bajtům reportu, než report přečte nebo zapíše ledger. Každé provedení bere měřený strom svého reportu, nebo unknown, pokud žádný nemá, a řádek čerstvosti A1 čte strom, který není clean, jako inputs_unchanged.

Jak to vidět

MJ_TEST_REPORT=suite.tsv bash test/run.sh
majordomus evidence stamp --producer suite --report suite.tsv --out suite.provenance.json
majordomus evidence record --suite suite.tsv --provenance suite.provenance.json
majordomus evidence claim evidence-tree-is-measured-by-the-run
bash test/run.sh 505_a_recording_carries_what_its_run_measured

Případ orazítkuje fixture s vyloučenými výstupy svého běhu i bez nich, odmítne vyloučení, která by skryla sledovanou úpravu, zaznamená špinavé razítko nad čistým záznamníkem i čisté razítko nad špinavým, vezme digest čistého běhu z commitu a ověří, že každé odmítnutí nechá účetní knihu, jak byla.

Co nepokrývá

Razítko měří checkout v okamžiku, kdy je pořízeno, po zapsání zprávy, a ne strom v době běhu: běh na špinavém stromu, který se před razítkem vyčistí, se čte jako čistý. Pozdější řez měří na začátku a na konci lokálního běhu sady.

Dokud CI neopatřuje razítkem svůj report, je měřením CI soubor stromu produkujícího jobu, který žádný report nejmenuje, takže je vázán na commit, ne na bajty reportu.

Runner, jehož prostředí lže o svém commitu, a člověk, který ručně upravuje ledger, leží mimo to, co měření vidí.

Monotónní pravidlo, které dovoluje záznamu běhu zadržet proven, zatím neaplikuje žádný povrch.

Proč existuje

Recorder označoval každé provedení stromem, který viděl při zaznamenávání, a ručil tak za strom, který neviděl: CI zaznamenává v čerstvém checkoutu, takže strom, který označil, byl konstanta, ne měření, a lokální běh mohl být zaznamenán poté, co se jeho checkout změnil. ADR 0087 (navrženo), rozhodnutí 6, uvádí pravidlo, které toto provádí: běh měří, recorder nese a strom, který nikdo neměřil, není čistý.

Detail vykreslený z docs/claims/evidence-tree-is-measured-by-the-run.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Zaznamenané provedení nese commit a strom, které uvedlo měření jeho vlastního běhu, přičemž měření jmenuje report, ke kterému patří, a nikdy neskrývá sledovanou změnu; měření jiného commitu nebo jiného reportu se odmítne, lokální měření, které nejmenuje žádný report, se odmítne, report z CI bez měření se odmítne a report zaznamenaný bez měření nese neznámý strom, který se nikdy nečte jako prokázaný

    Vzniklo na Důkazy.

  2. 2 · kanonické tvrzení

    evidence-tree-is-measured-by-the-rundeklarovaný 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

    apps/majordomus-cli/src/evidence/record.rs

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

    Test: test/cases/505_a_recording_carries_what_its_run_measured.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 505_a_recording_carries_what_its_run_measured

Související tvrzení stejná implementace

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