Жизненный цикл сборки¶
Требования применяются к сборке запускаемых и публикуемых компонентов. Уровни
обязательности определены в корневом README.md.
DEV-BUILD-001. Сборка из идентифицированного состояния¶
Уровень: MUST
Применяется к: обязательной CI-сборке
Сборка должна использовать точный Git commit и зафиксированные версии toolchain
и зависимостей по DEV-DEP-001. Незакоммиченные файлы и необъявленные
инструменты host-среды не должны влиять на результат.
Исходный и сгенерированный код должен компилироваться, проходить статические проверки и выполняться версиями toolchain и runtime, зафиксированными проектом.
Обоснование¶
Артефакт нельзя воспроизвести или проверить без однозначного исходного состояния.
Проверка¶
- сопоставление commit SHA в job и метаданных артефакта;
- сборка из чистой рабочей копии;
- проверка lock-файлов и фактических версий toolchain;
- повторная генерация и проверка сгенерированного кода при его наличии.
Исключения¶
Локальная исследовательская сборка, не используемая для поставки, MAY содержать явно обозначенные незакоммиченные изменения.
DEV-BUILD-002. Отсутствие изменения исходной рабочей копии¶
Уровень: MUST
Применяется к: обязательной CI-сборке
После сборки отслеживаемые Git файлы должны оставаться неизменными. Сгенерированные результаты должны создаваться в объявленных каталогах артефактов либо проверяться отдельным job на соответствие исходникам.
Обоснование¶
Скрыто изменяющая исходники сборка проверяет состояние, отличающееся от commit.
Проверка¶
- проверка
git diff --exit-codeпосле сборки; - статическая проверка каталогов генерации.
Исключения¶
Job обновления сгенерированных исходников MAY создавать отдельное изменение, но его результат должен пройти обычный review и pipeline.
DEV-BUILD-003. Идентификация артефакта¶
Уровень: MUST
Применяется к: поставляемому артефакту
Артефакт должен иметь неизменяемый идентификатор и метаданные с commit SHA, версией компонента и видом артефакта. Изменение содержимого должно изменять digest или эквивалентный идентификатор целостности.
Обоснование¶
Идентификация связывает диагностику и поставку с проверенным содержимым.
Проверка¶
- чтение метаданных артефакта;
- проверка digest или эквивалентного идентификатора;
- сопоставление с release и pipeline.
Исключения¶
Неизменяемый внешний registry identifier MAY заменять встроенный digest, если его связь с содержимым проверяема.
DEV-BUILD-004. Продвижение без пересборки¶
Уровень: MUST
Применяется к: артефакту, продвигаемому между тестовой и production-средой
Между обязательной проверкой и production должен продвигаться тот же артефакт по неизменяемому идентификатору. Конфигурация окружения должна передаваться отдельно и не требовать пересборки.
Обоснование¶
Пересборка после проверки создаёт новое непроверенное содержимое.
Проверка¶
- сопоставление неизменяемого идентификатора и содержимого между средами;
- проверка отделения конфигурации от артефакта.
Исключения¶
Платформа, требующая отдельной подписанной сборки, должна повторно выполнить обязательные проверки полученного артефакта.
DEV-BUILD-005. Защита сборочных входов¶
Уровень: MUST
Применяется к: сборке с секретами или внешними входами
Секрет не должен попадать в исходники, логи, кэш или итоговый артефакт. Загружаемый вход должен иметь зафиксированную версию и проверяемую целостность.
Обоснование¶
Сборка является доверенной границей и не должна распространять секреты или неподтверждённое содержимое.
Проверка¶
- secret scanning логов, кэша и артефакта;
- проверка checksum, digest или подписи внешнего входа.
Исключения¶
Не допускаются для попадания секрета в итоговый артефакт.