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.

Tag s předběžnou částí se publikuje jako prerelease, zaznamená se na kanálu prereleasů a nikdy se nevyhodnotí jako stabilní release, takže nepřipnutý instalátor a uzel sledující stabilní verzi si ponechají nejvyšší stabilní verzi

Publikace v1.0.0-alpha.1 nemění, co instaluje curl -fsSL https://majordomus.dev/install.sh | sh. Alfa je GitHub prerelease, její záznam říká channel: prerelease a releases/latest.json dál jmenuje nejvyšší stabilní release. Kdo alfu chce, pojmenuje ji přes --version 1.0.0-alpha.1.

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

Drží se na třech místech, která se musí shodovat. scripts/release-record odvodí kanál ze tagu a odmítne stable u tagu s příponou; release.yml pro něj předává --prerelease --latest=false; Release::is_stable_candidate odmítne jakoukoli verzi s pre-release částí bez ohledu na to, co říká její záznam, a Release::findings hlásí chybné označení. Rozlišení a precedenci semver (alpha.2 před alpha.10, build metadata se ignorují) dokazují distribuční testy crate, které případ nespouští. Nalezeno auditem před v1.0.0-alpha.1, kdy by pipeline zveřejnila alpha jako stabilní release.

Co to znamená

Publikování v1.0.0-alpha.1 nemění, co instaluje curl -fsSL https://majordomus.dev/install.sh | sh. Alfa je GitHub prerelease, její záznam říká channel: prerelease a releases/latest.json dál jmenuje nejvyšší stabilní release. Kdo chce alfu, pojmenuje ji pomocí --version 1.0.0-alpha.1.

Princip

Štítek určují tři místa a tvrzení platí, jen dokud se shodují. scripts/release-record odvodí kanál z tagu (- ve verzi znamená prerelease), pokud není zadáno --channel, a na takovém tagu odmítne --channel stable s exit 2. Publikační krok release.yml předává --prerelease --latest=false pro tytéž tagy. V crate je Release::is_stable_candidate false pro každou verzi s pre-release částí, ať záznam říká cokoli, takže chybně označený záznam se nikdy nemůže stát stabilním ukazatelem; Release::findings chybné označení hlásí. Přednost se řídí sémantickým verzováním: identifikátory se porovnávají po jednom, číselné jako čísla (alpha.2 před alpha.10), pre-release je pod svou finální verzí, build metadata se ignorují.

Jak to vidět

bash test/run.sh 3179_a_prerelease_is_never_published_as_stable
scripts/release-record --tag v1.0.0-alpha.1 --dir dist --channel stable    # exit 2: cannot be recorded on the stable channel
cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib distribution::

Co nepokrývá

Nic nepublikuje a GitHub nevyzkouší: workflow se kontroluje na příznaky, které předává, ne během. Kontroly verze, které parsují deklarovanou verzi (Version::parse, kontrola kompatibility, release bump), jsou samostatná závada a stále odmítají část pre-release. majordomus self update je návrh (ADR 0161) a není implementován, takže jeho pravidlo jen pro stabilní verze se zde netvrdí.

Proč existuje

Audit před první alfou zjistil, že pipeline zaznamenávala každý tag jako stabilní a vytvářela každý release bez --prerelease a že latest_stable řadí podle verze. v1.0.0-alpha.1 by přeskočil v0.27.0 v releases/latest.json a stal by se tím, co instaluje každý instalátor bez připnutí. Řazení bylo navíc po řetězcích, takže alpha.10 se řadilo pod alpha.2.

Detail vykreslen z docs/claims/release-prerelease-channel.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Tag s předběžnou částí se publikuje jako prerelease, zaznamená se na kanálu prereleasů a nikdy se nevyhodnotí jako stabilní release, takže nepřipnutý instalátor a uzel sledující stabilní verzi si ponechají nejvyšší stabilní verzi

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

  2. 2 · kanonické tvrzení

    release-prerelease-channeldeklarovaný stav: zaručeno v docs/CLAIMS.yaml

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

  3. 3 · implementace

    scripts/release-record

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

    Test: test/cases/3179_a_prerelease_is_never_published_as_stable.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 3179_a_prerelease_is_never_published_as_stable

Související tvrzení stejná implementace

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