Каждый проект индивидуален, однако, как правило, вот основные вещи, которые я пытаюсь сделать до того, как выпустить код на волю.
В произвольном порядке:
1) Идентификация версии в том месте, где она может быть найдена пользователем позже, она должна быть уникальной для данного выпуска. (очень часто «номер версии», связанный с распространяемым, библиотеками и исполняемым файлом, или пользователь, видимый из диалогового окна «о программе». Может быть числом в хорошо известном регистре или смещением в микропрограмме)
2) Снимок точного кода, использованного для создания релиза. (для этого подходит метка или ветка релиза в системе SCM)
3) Все инструменты, необходимые для воссоздания источника, должны быть отмечены и заархивированы (без этого источник из шага 2 становится ограниченным)
4) Архив фактической версии (точная копия выпущенного установщика, который знает, что через 7 лет ваши инструменты не смогут его собрать, но теперь, по крайней мере, у вас есть исходный код и возможность установки на вашей стороне для целей расследования).
5) Набор задокументированных изменений между этой версией выпуска и предыдущей, также известной как Release Notes (мне нравится использовать стиль добавления к списку, чтобы все изменения выпуска были доступны в одном месте для пользователя).
6) Завершен цикл испытаний на освобождение кандидата. Используя распределяемую созданную нагрузку и тестирование с использованием полного / проверенного плана тестирования, чтобы убедиться, что основные функциональные возможности работают, все новые функции присутствуют и работают, как предполагалось.
7) Отслеживание дефектов показывает, что все неоплаченные товары помечены как a) исправлено b) не является дефектом c) отложено.
Вы можете добавить множество других шагов в зависимости от домена или стиля разработки, но я бы сказал, что большая часть программного обеспечения «должна» выполнять вышеуказанные шаги в каждом выпуске. YMMV.
Весело штурмуйте замок.