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.