Политика инженерии выпусков
Пять канонических политик для версионирования, тегирования выпусков, циклов устаревания, несовместимых изменений и процедур отката.
Пять политик определяют, как выпускается apothem.
1. Семантическое версионирование
Проект поставляется в соответствии с семантическим версионированием 2.0.
Номера версий имеют вид MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD].
| Повышение | Триггеры |
|---|---|
| MAJOR | Несовместимые изменения схем артефактов, идентификаторов мандатов (CM-N / TM-N / CP-N) или контрактов хуков |
| MINOR | Новые правила, делегированные исполнители, команды, навыки, события хуков или несовместимости-не-вносящие расширения схем |
| PATCH | Уточнения, добавления антипаттернов, исправления документации и правки, не меняющие поведение |
Теги кандидатов используют формат vX.Y.Z-rc.N (кандидат на выпуск)
или vX.Y.Z-alpha.N / vX.Y.Z-beta.N (ранний доступ).
2. Теги выпусков
Каждый выпуск размещает в main подписанный git-тег вида
vMAJOR.MINOR.PATCH. Тег запускает .github/workflows/release.yml, который
собирает, подписывает, генерирует SBOM и происхождение SLSA-3, и
публикует страницу GitHub Release.
Соглашения по тегам:
- Формат — ровно
vMAJOR.MINOR.PATCH. Без префиксаrelease-, без суффикса-final. - Аннотация — каждый тег является аннотированным тегом (
git tag -a -s), несущим сводку примечаний к выпуску в сообщении тега. - Подпись — каждый тег подписан GPG. Рабочий процесс выпуска дополнительно создаёт бесключевую подпись Sigstore cosign для каждого артефакта и доказательство происхождения выпуска SLSA-3, оба прикрепляются к странице GitHub Release.
3. Политика устаревания
Текущая линия публичной поддержки — последняя выпущенная минорная версия. Когда у проекта несколько публичных минорных версий, матрица поддерживаемых версий в SECURITY.md является источником истины для любых дополнительных окон поддержки только критических исправлений.
Ритм устаревания:
- Объявление — устаревший символ или поведение
объявляется в разделе
### DeprecatedфайлаCHANGELOG.mdтого выпуска, в котором появляется устаревание. Примечания к выпуску отражают объявление об устаревании. - Окно отсрочки — устаревшие символы остаются доступными в течение как минимум одного полного минорного цикла до удаления.
- Удаление — удаление происходит при повышении
MAJOR. Каждый удалённый символ несёт строку### RemovedвCHANGELOG.mdи запись в руководстве по миграции под Практическими руководствами.
4. Политика несовместимых изменений
Несовместимые изменения требуют:
- Тикета RFC — открытого с меткой тикета
rfcs, описывающего несовместимое изменение, путь миграции и стратегию отката. - 30-дневного окна для комментариев — RFC остаётся открытым не менее 30 дней до слияния. Сопровождающие могут продлить окно, когда это оправдано обратной связью.
- Повышения MAJOR — выпуск, вносящий несовместимое изменение, повышает компонент MAJOR.
- Руководства по миграции — изменение поставляется с записью Практических руководств, которая проводит оператора через миграцию.
5. Политика отката
Если выпуск демонстрирует регрессию, блокирующую внедрение:
- Откат — проблемные коммиты откатываются в
main. - Повторное тегирование выпуск-плюс-один — последующий выпуск выходит как
vMAJOR.MINOR.PATCH+1, неся откат плюс любые инкрементальные исправления. Предыдущий дефектный выпуск не удаляется из GitHub Releases — аннотация### YankedвCHANGELOG.mdдокументирует ситуацию, чтобы воспроизводимые сборки оставались привязанными. - Коммуникация — откат сопровождается уведомлением security-advisories (когда это относится к безопасности) или публикацией в Discussions (когда это относится к надёжности).
См. также
- CHANGELOG.md — канонический реестр выпусков.
- SECURITY.md — матрица поддерживаемых версий и каналы сообщений.
- cicd-pipeline.md — классы CI-проверок, которые контролируют каждый выпуск.
- deployment-checklist.md — проверка готовности к производству для каждого выпуска.
Реестр внешнего соответствия — при работе над проектами-хостами
Реестр пятнадцати мандатов (M1–M15), задающий требования к соответствию для всех артефактов, создаваемых в проектах-хостах, с перекрёстным сопоставлением с внутренними мандатами экосистемы.
Политика бейджей
Задаёт источники динамических и статических бейджей для README, охватывая нативный для GitHub статус рабочего процесса, JSON эндпоинта shields.io и статические формы бейджей.