@nitra/cursor 1.8.84 → 1.8.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/mdc/k8s.mdc +2 -0
- package/package.json +1 -1
- package/scripts/check-abie.mjs +1 -0
- package/scripts/check-k8s.mjs +41 -2
package/mdc/k8s.mdc
CHANGED
|
@@ -15,6 +15,8 @@ alwaysApply: false
|
|
|
15
15
|
|
|
16
16
|
Далі — вміст маніфесту. Зайвий порожній рядок між коментарем і YAML не додавай, якщо в проєкті не прийнято інше.
|
|
17
17
|
|
|
18
|
+
**Виняток — без modeline:** `apiVersion: alb.yc.io/v1alpha1`, `kind: HttpBackendGroup` (Yandex ALB) — рядка **`# yaml-language-server: $schema=…`** у файлі **не** має бути (ні в першому рядку, ні далі). Перший рядок — одразу YAML (`apiVersion:` тощо). Перевірка — **`check-k8s.mjs`**.
|
|
19
|
+
|
|
18
20
|
**Розширення:** усі маніфести під **`k8s`**, включно з **`kustomization.yaml`**, — лише **`.yaml`** (розширення **`.yml`** не використовуй).
|
|
19
21
|
|
|
20
22
|
**Dockerfile / hadolint** — окреме правило **`docker.mdc`** і **`npx @nitra/cursor check docker`**.
|
package/package.json
CHANGED
package/scripts/check-abie.mjs
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* **k8s:** якщо під деревом із сегментом **`k8s`** є YAML з **`kind: Deployment`**, у тій самій директорії
|
|
14
14
|
* має існувати **`hc.yaml`** із **`HealthCheckPolicy`** (**`networking.gke.io/v1`**), modeline **`$schema`**
|
|
15
15
|
* як у abie.mdc, **`/healthz`**, порт **8080**, **`targetRef`** на **Service** з тим самим **`metadata.name`**.
|
|
16
|
+
* Загальні вимоги до **`# yaml-language-server: $schema`** для інших YAML під **`k8s`** — у **check-k8s.mjs** / **k8s.mdc** (наприклад **HttpBackendGroup** `alb.yc.io/v1alpha1` — **без** modeline).
|
|
16
17
|
* Якщо в дереві **k8s** є **HealthCheckPolicy**, перевіряється **`ru/kustomization.yaml`** з patch **`$patch: delete`**
|
|
17
18
|
* (логіка вмісту — **`ruKustomizationHasHealthCheckDeletePatch`** у **check-k8s.mjs**, узгоджено з **k8s.mdc**).
|
|
18
19
|
*
|
package/scripts/check-k8s.mjs
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Перший рядок `# yaml-language-server: $schema=…`, без дублікатів, розширення `.yaml`
|
|
5
5
|
* (окрім `kustomization.yaml`); URL схеми за першим документом — kustomization / yannh / datree
|
|
6
|
+
* (**виняток:** `apiVersion: alb.yc.io/v1alpha1`, `kind: HttpBackendGroup` — рядка `# yaml-language-server:` у файлі бути не має).
|
|
6
7
|
* (datree за замовчуванням: GitHub Pages `https://datreeio.github.io/CRDs-catalog/…`).
|
|
7
8
|
*
|
|
8
9
|
* Додатково: у кожному YAML-документі з **`kind: Deployment`** у кожного контейнера
|
|
@@ -671,6 +672,18 @@ function extractApiVersionAndKind(doc) {
|
|
|
671
672
|
}
|
|
672
673
|
}
|
|
673
674
|
|
|
675
|
+
/**
|
|
676
|
+
* Чи перший YAML-документ (до `---`) — **HttpBackendGroup** з API **alb.yc.io/v1alpha1** (Yandex ALB).
|
|
677
|
+
* Для таких файлів **check-k8s** не вимагає modeline `# yaml-language-server: $schema=…` і забороняє його.
|
|
678
|
+
* @param {string} yamlBody вміст файлу або фрагмент після modeline
|
|
679
|
+
* @returns {boolean} true, якщо `apiVersion`/`kind` першого документа збігаються з винятком
|
|
680
|
+
*/
|
|
681
|
+
export function k8sYamlFirstDocIsAlbYcHttpBackendGroup(yamlBody) {
|
|
682
|
+
const first = firstYamlDocument(yamlBody)
|
|
683
|
+
const { apiVersion, kind } = extractApiVersionAndKind(first)
|
|
684
|
+
return apiVersion === 'alb.yc.io/v1alpha1' && kind === 'HttpBackendGroup'
|
|
685
|
+
}
|
|
686
|
+
|
|
674
687
|
/**
|
|
675
688
|
* Чи вміст overlay **`ru/kustomization.yaml`** містить Kustomize patch видалення **HealthCheckPolicy**.
|
|
676
689
|
* @param {string} raw повний текст файлу
|
|
@@ -1599,12 +1612,38 @@ async function checkK8sYamlFile(abs, root, fail, pass, kustomizeManagedRel) {
|
|
|
1599
1612
|
return
|
|
1600
1613
|
}
|
|
1601
1614
|
|
|
1602
|
-
const
|
|
1603
|
-
|
|
1615
|
+
const firstLineIsModeline = MODELINE_RE.test(lines[0])
|
|
1616
|
+
const bodyForFirstDoc = k8sYamlBodyForDocumentParse(lines)
|
|
1617
|
+
const isAlbHttpBackendGroup = k8sYamlFirstDocIsAlbYcHttpBackendGroup(bodyForFirstDoc)
|
|
1618
|
+
|
|
1619
|
+
if (isAlbHttpBackendGroup) {
|
|
1620
|
+
if (firstLineIsModeline) {
|
|
1621
|
+
fail(
|
|
1622
|
+
`${rel}: для kind HttpBackendGroup (apiVersion alb.yc.io/v1alpha1) не задавай # yaml-language-server: $schema — прибери перший рядок modeline (k8s.mdc)`
|
|
1623
|
+
)
|
|
1624
|
+
return
|
|
1625
|
+
}
|
|
1626
|
+
if (countSchemaModelines(lines) > 0) {
|
|
1627
|
+
fail(
|
|
1628
|
+
`${rel}: для kind HttpBackendGroup (apiVersion alb.yc.io/v1alpha1) не використовуй # yaml-language-server: $schema у файлі (k8s.mdc)`
|
|
1629
|
+
)
|
|
1630
|
+
return
|
|
1631
|
+
}
|
|
1632
|
+
const body = lines.join('\n')
|
|
1633
|
+
scanIngressInYamlDocuments(rel, body, fail)
|
|
1634
|
+
pass(`${rel}: HttpBackendGroup (alb.yc.io/v1alpha1) — modeline $schema не застосовується (k8s.mdc)`)
|
|
1635
|
+
const kustomizeManaged = kustomizeManagedRel.has(rel)
|
|
1636
|
+
validateK8sYamlPolicyDocuments(rel, baseLower, body, fail, kustomizeManaged)
|
|
1637
|
+
scanGatewayApiRouteBackendRefsInYamlBody(rel, body, fail)
|
|
1638
|
+
return
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
if (!firstLineIsModeline) {
|
|
1604
1642
|
fail(`${rel}: перший рядок має бути коментарем # yaml-language-server: $schema=<url> (без префіксів перед #)`)
|
|
1605
1643
|
return
|
|
1606
1644
|
}
|
|
1607
1645
|
|
|
1646
|
+
const m = /** @type {RegExpMatchArray} */ (lines[0].match(MODELINE_RE))
|
|
1608
1647
|
const schemaUrl = m[1]
|
|
1609
1648
|
if (countSchemaModelines(lines) > 1) {
|
|
1610
1649
|
fail(`${rel}: кілька рядків yaml-language-server $schema — лиш один modeline на файл (див. k8s.mdc)`)
|