Documentation
¶
Overview ¶
Package modulemanifests — манифесты модулей, ДОСТУПНЫЕ ПРОБЕ В ЭТОЙ ПОСАДКЕ.
───────────────────────────────────────────────────────────────────────────── ПРЕДМЕТ (kacho#2377)
Сверки «объявлено манифестом ↔ лежит в живой базе» имеют стороны в РАЗНЫХ деревьях: манифесты модулей — у платформы (`services/*/manifest.yaml`), база и миграции — у службы. Прежде обе стороны брались обходом `<корень>/services`, и после разреза этот каталог рядом с модулем не резолвится: сверка становилась невыразимой, а расхождение объявления с фактом переставало находиться — ровно то, ради чего раздел `roles`/`seed` манифеста и заведён.
───────────────────────────────────────────────────────────────────────────── ЧТО ЗДЕСЬ РЕШЕНО, А ЧТО НЕТ
Решено ОДНО: перечень манифестов есть ФУНКЦИЯ ПОСАДКИ, и он никогда не пуст.
Имя файла манифеста здесь НЕ ПИШЕТСЯ своей рукой: у него один владелец в фундаменте и ДВЕ формы — в дереве и в доставке. Объявление, знающее одну, обещало бы читателю полноту, которой у него нет. Берётся оно у читателя СВОЕЙ службы (`internal/manifest`), а не прямым импортом: направление «служба → пакет класса платформы» запрещено целевой раскладкой, и новое такое ребро есть находка даже там, где сегодня всё собирается.
дерево платформы НАЗВАНО снаружи (ручка PLATFORM_TREE) — читаются манифесты
ВСЕХ модулей платформы;
дерево платформы НЕ названо — читается манифест САМОГО МОДУЛЯ, входящий в его
поставку. Сверка сужается, но НЕ ИСЧЕЗАЕТ, и её
объём объявляется числом.
ПОДЪЁМОМ дерево платформы больше НЕ ИЩЕТСЯ, и это исправление, а не упрощение: признаком служил каталог модулей рядом с нашим, а после выноса службы отдельным репозиторием модуль не лежит в нём ни в одной посадке — признак стал ложным ВСЕГДА, и «дерева платформы нет» перестало различать посадки. Называет его теперь тот, кто его выложил.
НЕ решено и решаться здесь не должно: как манифесты СОСЕДЕЙ доезжают до самостоятельной службы. Они доезжают ДОСТАВКОЙ в рантайме (именованный ConfigMap; у доставки есть производитель, и это предмет платформенного гейта), а не деревом сборки. Заводить здесь их копию значило бы завести второе место об одном предмете, которое после разреза не сверяется НИЧЕМ.
───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ ПРОПУСКА НЕТ
Пропуск здесь означал бы «сторожа больше нет», и молчание было бы неотличимо от исправной работы — тот самый тихий класс, ради которого пакет и заведён. Поэтому обе посадки дают ОТВЕТ, а перепись печатает, какой именно и сколько манифестов прочитано: «ноль находок» обязано быть отличимо от «прочитан один из шести».
Index ¶
Constants ¶
const PlatformTreeEnv = treeposture.PlatformTreeEnv
PlatformTreeEnv — ручка, которой НАЗЫВАЮТ дерево платформы. Переобъявлена ссылкой, а не копией: два имени об одном предмете разошлись бы молча.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Set ¶
type Set struct {
// Posture — какая из двух посадок дала этот перечень.
Posture Posture
// Root — корень, от которого координаты ниже отсчитаны.
Root string
// Files — координаты манифестов ОТ Root, отсортированные.
Files []string
}
Set — перечень манифестов и посадка, в которой он снят.
func Available ¶
Available — манифесты, доступные в посадке каталога start.
Ошибка означает «проверка НЕ ИСПОЛНЯЛАСЬ»: ни одной из двух посадок назвать не удалось либо в названной не нашлось ни одного манифеста. Пустой перечень ошибкой НЕ возвращается молча — вызывающий обязан отличать его от согласия.