Documentation
¶
Overview ¶
Package declaredbreak — АДЪЮДИКАЦИЯ ломающих изменений контракта, а не голый `buf breaking`.
───────────────────────────────────────────────────────────────────────────── ЗАЧЕМ АДЪЮДИКАЦИЯ, А НЕ ПРОСТО ПРОВЕРКА
Голый `buf breaking` верен ровно до того дня, когда ломающее изменение становится ОСОЗНАННЫМ — снят метод, отвечающий отказом при любом входе; снято поле, которое служба принимает и не читает. Тогда шаг красен ПО ПОСТРОЕНИЮ, и у читателя остаются два плохих хода: снять шаг — потерять защиту от СЛУЧАЙНЫХ разрывов на всём дереве ради одного объявленного; либо внести файл в `breaking.ignore` — послабление без предмета и без срока, ослепляющее проверку на целом файле НАВСЕГДА.
Поэтому разрыв проходит только через перечень объявленных, и запись живёт ровно пока у неё есть предмет: НАХОДКА ВНЕ ПЕРЕЧНЯ — КРАСНОЕ, ЗАПИСЬ БЕЗ НАХОДКИ — ТОЖЕ КРАСНОЕ. Вторая половина и есть самоистечение: без неё перечень пережил бы свой предмет и остался бы слепой зоной, выданной вперёд.
───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ СВОЯ РЕАЛИЗАЦИЯ, А НЕ КОПИЯ ПЛАТФОРМЕННОЙ
У платформы адъюдикатор того же класса есть. Взять его файлом нельзя: копия файла чужого репозитория запрещена, и запрет не смягчается совпадением содержимого — он им ДОКАЗЫВАЕТСЯ, потому что расхождение наступит молча. Взять пином тоже нельзя: ребро `kaname → kacho` снято, и заводить его обратно ради проверки значило бы замкнуть граф.
Поэтому здесь ПОВТОРЕН ПРЕДМЕТ, а не текст: те же три исхода, то же самоистечение, тот же разбор вывода. Расхождение реализаций расхождением СВОЙСТВА не является — свойство у каждого дерева своё, и доказывается оно своей инъекцией на СВОЁМ выводе buf.
───────────────────────────────────────────────────────────────────────────── ИСХОДОВ ТРИ, И ТРЕТИЙ НЕСУЩИЙ
0 — находок нет и перечень пуст либо каждая находка объявлена; 1 — НАХОДКА: разрыв вне перечня либо запись, которой нечего прощать; 2 — гейт НЕ СДЕЛАЛ СВОЕЙ РАБОТЫ: вывод не разобран, перечень не прочитан.
Код возврата самого `buf` разбирает вызывающий: 100 — «есть находки» (штатный вход сюда), 0 — «разрывов нет», ЛЮБОЙ ДРУГОЙ — третий исход. Схлопни их, и сетевой отказ читался бы как «разрывов нет».
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Declaration ¶
type Declaration struct {
Rule string `yaml:"rule"`
Path string `yaml:"path"`
Symbol string `yaml:"symbol"`
Reason string `yaml:"reason"`
Issue string `yaml:"issue"`
}
Declaration — объявленный разрыв. Полей пять, и все обязательны.
func LoadDeclarations ¶
func LoadDeclarations(path string) ([]Declaration, error)
LoadDeclarations — перечень объявленных разрывов.
ОТСУТСТВИЕ ФАЙЛА — ОТКАЗ, А НЕ ПУСТОЙ ПЕРЕЧЕНЬ: «перечня нет» и «перечень пуст» ведут читателя в разные места, и схлопывание их сделало бы удаление файла способом снять проверку.
func (Declaration) Validate ¶
func (d Declaration) Validate() []string
Validate — негодная запись есть находка, а не молчание: объявление, которое нельзя сопоставить, прощает не то, что называет.
type Finding ¶
type Finding struct {
Path string `json:"path"`
Type string `json:"type"`
Message string `json:"message"`
Line int `json:"start_line"`
}
Finding — одна находка `buf breaking`, как её печатает `--error-format=json`.
func ParseFindings ¶
ParseFindings — разбор вывода `buf breaking --error-format=json`.
СТРОКА, НЕ ЯВЛЯЮЩАЯСЯ ОБЪЕКТОМ JSON, — ОТКАЗ, а не пропуск: buf печатает в поток вывода только находки, и всё прочее означает, что шаг не сделал своей работы. Молчание здесь читалось бы как «разрывов нет».
func (Finding) Coordinate ¶
Coordinate — координата находки для сопоставления и для текста.
type Result ¶
type Result struct {
// Undeclared — разрывы, которых нет в перечне.
Undeclared []Finding
// Expired — записи, которым нечего прощать. Самоистечение перечня.
Expired []Declaration
// Matched — объявленные разрывы, нашедшие свой предмет.
Matched int
// Invalid — негодные записи перечня.
Invalid []string
// Findings — сколько находок разобрано, Declarations — сколько записей прочитано.
Findings int
Declarations int
}
Result — исход адъюдикации.
func Adjudicate ¶
func Adjudicate(findings []Finding, decls []Declaration) Result
Adjudicate — сопоставление находок с объявлениями.
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
adjudicate-declared-breaks
command
adjudicate-declared-breaks — читает вывод `buf breaking --error-format=json` со стандартного входа и сопоставляет его с перечнем объявленных разрывов.
|
adjudicate-declared-breaks — читает вывод `buf breaking --error-format=json` со стандартного входа и сопоставляет его с перечнем объявленных разрывов. |