keep-a-changelog/source/ru/1.0.0/index.html.haml

303 lines
15 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: Keep a Changelog
title: Keep a Changelog
language: ru
version: 1.0.0
---
- changelog = "https://github.com/olivierlacan/keep-a-changelog/blob/master/CHANGELOG.md"
- gh = "https://github.com/olivierlacan/keep-a-changelog"
- issues = "https://github.com/olivierlacan/keep-a-changelog/issues"
- semver = "https://semver.org/"
- shields = "https://shields.io/"
- thechangelog = "https://changelog.com/podcast/127"
- vandamme = "https://github.com/tech-angels/vandamme/"
- iso = "http://www.iso.org/iso/home/standards/iso8601.htm"
- ghr = "https://help.github.com/articles/creating-releases/"
.header
.title
%h1 Ведите CHANGELOG
%h2 Не позволяйте друзьям сливать логи гита в CHANGELOG™
= link_to changelog do
Version
%strong= current_page.metadata[:page][:version]
%pre.changelog= File.read("CHANGELOG.md")
.answers
%h3#what
%a.anchor{ href: "#what", aria_hidden: "true" }
Что такое лог изменений?
%p
Лог изменений это файл, который содержит поддерживаемый, хронологически
упорядоченный список изменений для каждой версии проекта.
%h3#why
%a.anchor{ href: "#why", aria_hidden: "true" }
Зачем вести лог изменений?
%p
Чтобы пользователям и контрибьюторам было проще точно понять,
какие изменения были сделаны в каждом релизе (или версии) проекта
%h3#who
%a.anchor{ href: "#who", aria_hidden: "true" }
Кому нужен лог изменений?
%p
Людям. Будь то клиенты или разработчики, конечные пользователи программного обеспечения
это люди, и им важно, с чем они работают. Когда программное обеспечение меняется,
люди хотят знать почему и что изменилось.
.good-practices
%h3#how
%a.anchor{ href: "#how", aria_hidden: "true" }
Как мне сделать хороший лог изменений?
%h4#principles
%a.anchor{ href: "#principles", aria_hidden: "true" }
Главные принципы
%ul
%li
Лог изменений ведётся <em>для людей</em>, не для машин.
%li
Для каждой версии должен быть отдельный раздел.
%li
Одинаковые типы изменений должны быть сгруппированы.
%li
Должна быть возможность поставить ссылку на любую версию или раздел.
%li
Последняя версия должна идти в начале файла.
%li
У каждой версии указана дата выпуска.
%li
Уточните, следуете ли вы принципам #{link_to "Семантического версионирования", semver}
%a.anchor{ href: "#types", aria_hidden: "true" }
%h4#types Типы изменений
%ul
%li
%code Добавлено
для новых функций.
%li
%code Изменено
для изменений в существующей функциональности.
%li
%code Устарело
для функций, которые скоро будут удалены.
%li
%code Удалено
для удалённых функций.
%li
%code Исправлено
для любых исправлений.
%li
%code Безопасность
в случае уязвимостей.
.effort
%h3#effort
%a.anchor{ href: "#effort", aria_hidden: "true" }
Как мне тратить меньше усилий на ведение лога изменений?
%p
Ведите раздел <code>Новое</code> с изменениями для новой версии в начале файла.
%p Это нужно для двух вещей:
%ul
%li
Люди смогут видеть, каких изменений им ожидать в ближайших релизах
%li
В момент релиза вы можете переместить изменения раздела <code>Новое</code>
в раздел нового релиза.
.bad-practices
%h3#bad-practices
%a.anchor{ href: "#bad-practices", aria_hidden: "true" }
Бывают плохие логи изменений?
%p Да. Вот несколько способов чтобы сделать их не такими полезными.
%h4#log-diffs
%a.anchor{ href: "#log-diffs", aria_hidden: "true" }
Диффы лога коммитов
%p
Использование диффов лога коммитов это плохая идея: они очень шумные.
Шумят мердж-коммиты, коммиты с непонятными названиями, изменения в документации
и тому подобное.
%p
Назначение коммита в том, чтобы задокументировать шаг в эволюции исходного
кода. В некоторых проектах следят за историей коммитов, в некоторых нет.
%p
Назначение же раздела в логе изменений — задокументировать ключевые различия,
часто между несколькими коммитами, чтобы ясно донести их назначение
до конечных пользователей.
%h4#ignoring-deprecations
%a.anchor{ href: "#ignoring-deprecations", aria_hidden: "true" }
Игнорирование устаревающих функций
%p
Когда люди обновляются с одной версии на другую, должно быть до боли
очевидно, что сломается. Должна быть возможность обновиться до версии, которая
перечисляет устаревающие функции, удалить устаревшие данные, затем обновиться до версии,
в которой устаревающие функции становятся удалёнными.
%p
Если вы не ведёте лог изменений, то хотя бы указывайте в нём устаревающие
и удалённые функции, а также все критичные изменения.
%h4#confusing-dates
%a.anchor{ href: "#confusing-dates", aria_hidden: "true" }
Непонятные даты
%p
В США сначала пишут месяц (<code>06-02-2012</code> для 2 июня 2012),
в то время как большинство людей в остальном мире пишут роботоподобное
<code>2 июня 2012</code>, произнося эту дата по-разному. Запись
<code>2012-06-02</code> логично идёт от большего к меньшему, не пересекается
с большинством других форматов дат, и является #{link_to "стандартом ISO", iso}.
Поэтому именно такой формат рекомендуется для логов изменений.
%aside
Есть и другие. Помогите мне собрать эти антипаттерны,
#{link_to "создав тикет", "#issues"} или пулл-реквест.
.frequently-asked-questions
%h3#frequently-asked-questions
%a.anchor{ href: "#frequently-asked-questions", aria_hidden: "true" }
Часто задаваемые вопросы
%h4#standard
%a.anchor{ href: "#standard", aria_hidden: "true" }
Существует ли стандарт формата логов изменений?
%p
На самом деле нет. Есть стайлгайд логов изменений GNU,
есть длиной-в-два-параграфа файл "guideline" GNU NEWS.
Оба или неадекватны или недостаточно полны.
%p
Цель этого проекта — стать
= link_to "улучшенной версией соглашения о формате логов изменений.", changelog
Это приходит из-за сбора и следования хорошим практикам сообщества.
%p
Здоровая критика, дискуссии и предложения по улучшению
= link_to "приветствуются.", issues
%h4#filename
%a.anchor{ href: "#filename", aria_hidden: "true" }
Как назвать файл лога изменений?
%p
Назовите его <code>CHANGELOG.md</code>. Некоторые проекты также используют
<code>HISTORY</code>, <code>NEWS</code> или <code>RELEASES</code>.
%p
Хоть и легко подумать, что имя файла лога изменений не так уж и важно,
но зачем усложнять вашим конечным пользователям поиск места,
где описаны все ключевые изменения?
%h4#github-releases
%a.anchor{ href: "#github-releases", aria_hidden: "true" }
Что насчёт функции "Релизы" на Гитхабе?
%p
Это отличная инициатива. #{link_to "Релизы", ghr} могут использоваться
для превращения простых тегов в Git (например, тег <code>v1.0.0</code>)
в подробные заметки к релизам с помощью их редактирования вручную,
или с помощью комментариев к таким тегам.
%p
Релизы на Гитхабе создают непереносимый лог изменений, который может
быть показан пользователям только на самом Гитхабе. Возможно вести
их в формате, близком к формату проекта Keep a Changelog, но это требует
больших усилий.
%p
Текущая версия Релизов на Гитхабе также возможно не так хорошо видна
для конечных пользователей, в отличие от обычных файлов с именами в верхнем
регистре (<code>README</code>, <code>CONTRIBUTING</code> и так далее).
Другая небольшая проблема заключается в том, что интерфейс не предлагает
ссылок на логи коммитов между релизами.
%h4#automatic
%a.anchor{ href: "#automatic", aria_hidden: "true" }
Могут ли логи изменений быть автоматически распарсены?
%p
Это сложно, потому что люди следуют сильно различающимся форматам
и используют разные имена файлов.
%p
#{link_to "Vandamme", vandamme} это гем для Руби, созданный командой
Gemnasium, который парсит многие (но не все)
логи изменений проектов с открытым исходным кодом.
%h4#yanked
%a.anchor{ href: "#yanked", aria_hidden: "true" }
Что насчёт yanked-релизов?
%p
Yanked-релизы это версии, которые изымаются из обращения из-за серьёзного
бага или проблемы безопасности в них. Часто такие версии даже не упоминаются
в логах изменений. А должны. И вот как вам следует их упоминать:
%p <code>## [0.0.5] - 2014-12-13 [YANKED]</code>
%p
Тег <code>[YANKED]</code> так бросается в глаза специально. Очень важно,
чтобы люди его заметили. Так как он обрамлён квадратными скобками,
его также проще распарсить программно.
%h4#rewrite
%a.anchor{ href: "#rewrite", aria_hidden: "true" }
Имеет ли смысл переписывать лог изменений?
%p
Конечно. Всегда есть веские причины для улучшения лога изменений.
Я регулярно открываю пулл-реквесты по добавлению недостающих релизов
в проекты с открытым исходным кодом с брошенными логами изменений.
%p
Также возможно вы можете обнаружить, что вы забыли указать критичное
изменение в замечаниям к версии. В этом случае очевидно вам важно
обновить ваш лог изменений.
%h4#contribute
%a.anchor{ href: "#contribute", aria_hidden: "true" }
Как я могу помочь вашему проекту?
%p
Этот документ <strong>не истина в последней инстанции</strong>; это моё
тщательно обдуманное мнение, вместе с информацией и примерами, которые я собрал.
%p
Дело в том, что я хочу, чтобы наше сообщество достигло согласия в этом вопросе.
Я верю, что дискуссия также важна, как и конечный результат.
%p
Так что, пожалуйста, <strong>#{link_to "участвуйте", gh}</strong>.
.press
%h3 Обсуждения
%p
Я приходил в #{link_to "подкаст The Changelog", thechangelog},
чтобы поговорить о том, почему мейнтейнеры и контрьбьюторы должны вести логи изменений,
а также о моей мотивации к созданию этого проекта.