Перейти к содержанию

Жизненный цикл сборки

Требования применяются к сборке запускаемых и публикуемых компонентов. Уровни обязательности определены в корневом 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 или подписи внешнего входа.

Исключения

Не допускаются для попадания секрета в итоговый артефакт.