@nitra/cursor 1.6.23 → 1.6.26
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/docker.mdc +3 -3
- package/mdc/k8s.mdc +5 -5
- package/mdc/nginx-default-tpl.mdc +4 -1
- package/mdc/text.mdc +2 -2
- package/package.json +1 -1
- package/scripts/check-docker.mjs +1 -1
- package/scripts/check-k8s.mjs +1 -1
- package/scripts/run-k8s.mjs +6 -4
- package/scripts/utils/docker-hadolint.mjs +1 -1
package/mdc/docker.mdc
CHANGED
|
@@ -93,13 +93,13 @@ jobs:
|
|
|
93
93
|
run: bun run lint-docker
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
Узгоджуй версію hadolint **v2.12.0** з **`HADOLINT_IMAGE`** у **`npm/scripts/utils/docker-hadolint.mjs`**.
|
|
97
97
|
|
|
98
98
|
Кореневий скрипт **`lint`** (див. **`n-bun.mdc`**) має викликати **`lint-docker`**, якщо він існує.
|
|
99
99
|
|
|
100
100
|
## Запуск
|
|
101
101
|
|
|
102
|
-
1. **`bun run lint-docker`** — **`run-docker.mjs`**: **`Dockerfile`** та **`*.Dockerfile`** (див. **`lint-docker`**); у CI встанови
|
|
102
|
+
1. **`bun run lint-docker`** — **`run-docker.mjs`**: **`Dockerfile`** та **`*.Dockerfile`** (див. **`lint-docker`**); у CI встанови hadolint (приклад у workflow).
|
|
103
103
|
2. **`npx @nitra/cursor check docker`** — **`check-docker.mjs`**, виклик hadolint як у **`docker-hadolint.mjs`** (**`PATH`** або **`docker run`** з **`hadolint/hadolint:v2.12.0`**).
|
|
104
104
|
3. Кореневий **`.hadolint.yaml`**: вимкнення правил, trusted registries — [документація](https://github.com/hadolint/hadolint#configure).
|
|
105
105
|
|
|
@@ -113,7 +113,7 @@ jobs:
|
|
|
113
113
|
|
|
114
114
|
## Редактор
|
|
115
115
|
|
|
116
|
-
Розширення VS Code / Cursor: **`exiasr.hadolint`** (
|
|
116
|
+
Розширення VS Code / Cursor: **`exiasr.hadolint`** (потрібна утиліта hadolint) — за потреби в **`.vscode/extensions.json`**.
|
|
117
117
|
|
|
118
118
|
## Перевірка
|
|
119
119
|
|
package/mdc/k8s.mdc
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: K8s YAML — $schema (yaml-language-server); lint-k8s (kubeconform, kubescape); check-k8s
|
|
3
|
-
version: '1.
|
|
3
|
+
version: '1.7'
|
|
4
4
|
globs: "**/k8s/**/*.{yaml,yml}"
|
|
5
5
|
alwaysApply: false
|
|
6
6
|
---
|
|
@@ -28,9 +28,9 @@ alwaysApply: false
|
|
|
28
28
|
|
|
29
29
|
**Залежності:** виконувані файли kubeconform і kubescape у **PATH**; не додавай їх у **devDependencies** npm (аналогія до `v8r` у `n-text.mdc`). Локально: наприклад `brew install kubeconform kubescape` або релізи з GitHub.
|
|
30
30
|
|
|
31
|
-
**Версія Kubernetes для kubeconform** має відповідати PIN yannh у цьому правилі та в **`check-k8s.mjs`** (зараз **`-kubernetes-version 1.
|
|
31
|
+
**Версія Kubernetes для kubeconform** має відповідати PIN yannh у цьому правилі та в **`check-k8s.mjs`** (зараз **`-kubernetes-version 1.33.9`** — semver без префікса `v`, еквівалент релізу **v1.33.9**; набір схем **`v1.33.9-standalone-strict`**). Для CRD додатково підключай реєстр [datreeio/CRDs-catalog](https://github.com/datreeio/CRDs-catalog) другим **`-schema-location`**, як у [прикладах kubeconform](https://github.com/yannh/kubeconform#readme). За потреби **`-ignore-missing-schemas`**, якщо частина CRD ще без публічної схеми.
|
|
32
32
|
|
|
33
|
-
**kubescape:** типово **`kubescape scan <каталог-k8s>`**; поріг серйозності підлаштуй під проєкт (наприклад **`--severity-threshold high`**). Перший запуск може завантажувати артефакти — у CI потрібна мережа або [offline](https://github.com/kubescape/kubescape#readme).
|
|
33
|
+
**kubescape:** типово **`kubescape scan <каталог-k8s>`**; поріг серйозності підлаштуй під проєкт (наприклад **`--severity-threshold high`**). Перший запуск може завантажувати артефакти — у CI потрібна мережа або [offline](https://github.com/kubescape/kubescape#readme). На відміну від kubeconform, у **kubescape scan** немає прапорця **`-kubernetes-version`**: перевірка йде за **framework/control** (NSA, MITRE, CIS тощо), а не проти OpenAPI-схеми конкретного релізу Kubernetes. **Орієнтир** для репозиторію той самий, що й для kubeconform — кластер **v1.33.9** (див. **`-kubernetes-version 1.33.9`** вище); для CIS і подібних наближень обирай актуальний framework під політику команди (**`kubescape list frameworks`**, див. [CLI reference](https://github.com/kubescape/kubescape/blob/master/docs/cli-reference.md)).
|
|
34
34
|
|
|
35
35
|
У репозиторії пакета **`@nitra/cursor`** скрипт **`lint-k8s`** делегує обхід дерев і виклики **`npm/scripts/run-k8s.mjs`**. У інших проєктах можна скопіювати цей скрипт або зібрати еквівалентні команди в **`package.json`**.
|
|
36
36
|
|
|
@@ -115,7 +115,7 @@ jobs:
|
|
|
115
115
|
|
|
116
116
|
## Що закодовано в `check-k8s.mjs`
|
|
117
117
|
|
|
118
|
-
При зміні правил синхронно оновлюй **`YANNH_PIN`**, **`YANNH_GROUPS`**, а в **`run-k8s.mjs`** — константу **`KUBERNETES_VERSION`** (число з PIN, наприклад `v1.
|
|
118
|
+
При зміні правил синхронно оновлюй **`YANNH_PIN`**, **`YANNH_GROUPS`**, а в **`run-k8s.mjs`** — константу **`KUBERNETES_VERSION`** (число з PIN, наприклад `v1.33.9-standalone-strict` → **`1.33.9`**).
|
|
119
119
|
|
|
120
120
|
- Обхід з пропуском `node_modules`, `.git`, `dist`, `coverage`, `.turbo`, `.next`.
|
|
121
121
|
- **`file:`** у `$schema` — URL до apiVersion/kind не звіряється; **`https:`** — kustomization за іменем файлу → Schema Store; `v1` → yannh; група з `YANNH_GROUPS` → yannh; інакше → datree.
|
|
@@ -130,7 +130,7 @@ jobs:
|
|
|
130
130
|
Орієнтир — **перший документ** (до наступного `---`).
|
|
131
131
|
|
|
132
132
|
1. **Ім’я** `kustomization.yaml` або `kustomization.yml` → `https://json.schemastore.org/kustomization.json`.
|
|
133
|
-
2. **`apiVersion: v1`** → yannh, PIN **`v1.
|
|
133
|
+
2. **`apiVersion: v1`** → yannh, PIN **`v1.33.9-standalone-strict`**:
|
|
134
134
|
`https://raw.githubusercontent.com/yannh/kubernetes-json-schema/<PIN>/<kind>-v1.json`
|
|
135
135
|
`<kind>`: літери в нижньому регістрі без роздільників між CamelCase (наприклад `Service` → `service`).
|
|
136
136
|
3. **`apiVersion: group/version`** і **group** у **`YANNH_GROUPS`** у скрипті → yannh:
|
|
@@ -103,7 +103,10 @@ spec:
|
|
|
103
103
|
В Dockerfile потрібно додати команду для стиснення файлів, які потім використовуватимуться з `gzip_static on`:
|
|
104
104
|
|
|
105
105
|
```dockerfile
|
|
106
|
-
RUN
|
|
106
|
+
RUN find /usr/share/nginx/html -type f \( \
|
|
107
|
+
-name '*.js' -o -name '*.css' -o -name '*.map' -o -name '*.xml' -o \
|
|
108
|
+
-name '*.webmanifest' -o -name '*.html' -o -name '*.wasm' -o -name '*.ttf' \
|
|
109
|
+
\) -exec gzip -k {} +
|
|
107
110
|
```
|
|
108
111
|
|
|
109
112
|
Поруч з файлом default.conf.template повинні бути конфігураційні файли *.ini для різних середовищ. В Dockerfile повинна бути команда, для заміни плейсхолдерів в цих файлах на значення з середовища:
|
package/mdc/text.mdc
CHANGED
|
@@ -144,7 +144,7 @@ jobs:
|
|
|
144
144
|
{
|
|
145
145
|
"version": "0.2",
|
|
146
146
|
"language": "nitra",
|
|
147
|
-
"ignorePaths": ["**/node_modules/**", "**/vscode-extension/**", "**/.git/**", ".vscode", "report"],
|
|
147
|
+
"ignorePaths": ["**/node_modules/**", "**/vscode-extension/**", "**/.git/**", ".vscode", "report", "*.svg", "**/k8s/**/*.yaml"],
|
|
148
148
|
"import": ["@nitra/cspell-dict/cspell-ext.json"],
|
|
149
149
|
"words": []
|
|
150
150
|
}
|
|
@@ -190,7 +190,7 @@ jobs:
|
|
|
190
190
|
{
|
|
191
191
|
"version": "0.2",
|
|
192
192
|
"language": "en,uk,nitra",
|
|
193
|
-
"ignorePaths": ["**/node_modules/**", "**/vscode-extension/**", "**/.git/**", ".vscode", "report"],
|
|
193
|
+
"ignorePaths": ["**/node_modules/**", "**/vscode-extension/**", "**/.git/**", ".vscode", "report", "*.svg", "**/k8s/**/*.yaml"],
|
|
194
194
|
"import": [
|
|
195
195
|
"@nitra/cspell-dict/cspell-ext.json",
|
|
196
196
|
"@cspell/dict-uk-ua/cspell-ext.json"
|
package/package.json
CHANGED
package/scripts/check-docker.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Запускає hadolint для Dockerfile / Containerfile у всьому репозиторії (див. docker.mdc).
|
|
3
3
|
*
|
|
4
4
|
* Знаходить Dockerfile, Dockerfile.*, Containerfile, Containerfile.*; пропускає node_modules, .git
|
|
5
|
-
* тощо. Спочатку
|
|
5
|
+
* тощо. Спочатку hadolint з PATH, інакше docker run з образом hadolint/hadolint.
|
|
6
6
|
* Кореневий .hadolint.yaml підхоплюється hadolint автоматично.
|
|
7
7
|
*/
|
|
8
8
|
import { basename } from 'node:path'
|
package/scripts/check-k8s.mjs
CHANGED
|
@@ -12,7 +12,7 @@ import { pass } from './utils/pass.mjs'
|
|
|
12
12
|
import { walkDir } from './utils/walkDir.mjs'
|
|
13
13
|
|
|
14
14
|
/** Версія набору схем yannh — узгоджено з k8s.mdc */
|
|
15
|
-
const YANNH_PIN = 'v1.
|
|
15
|
+
const YANNH_PIN = 'v1.33.9-standalone-strict'
|
|
16
16
|
|
|
17
17
|
const KUSTOMIZATION_SCHEMA = 'https://json.schemastore.org/kustomization.json'
|
|
18
18
|
|
package/scripts/run-k8s.mjs
CHANGED
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
* без виклику зовнішніх CLI.
|
|
7
7
|
*
|
|
8
8
|
* kubeconform перевіряє маніфести проти OpenAPI-схем Kubernetes; kubescape — сканування на
|
|
9
|
-
* misconfiguration / compliance (NSA, MITRE, CIS тощо).
|
|
9
|
+
* misconfiguration / compliance (NSA, MITRE, CIS тощо). Обидві утиліти очікуються в PATH
|
|
10
10
|
* (локально: Homebrew, релізи GitHub; у CI — крок установки з k8s.mdc).
|
|
11
11
|
*
|
|
12
12
|
* Версія `-kubernetes-version` для kubeconform узгоджена з PIN yannh у check-k8s.mjs / k8s.mdc.
|
|
13
|
+
* Kubescape не має аналога цього прапорця; орієнтир цільового кластера — та сама лінія релізу (див. k8s.mdc).
|
|
13
14
|
*/
|
|
14
15
|
import { spawnSync } from 'node:child_process'
|
|
15
16
|
import { basename, dirname } from 'node:path'
|
|
@@ -17,7 +18,7 @@ import { basename, dirname } from 'node:path'
|
|
|
17
18
|
import { walkDir } from './utils/walkDir.mjs'
|
|
18
19
|
|
|
19
20
|
/** Версія Kubernetes для kubeconform — синхронно з YANNH_PIN (без префікса v і суфікса -standalone-strict). */
|
|
20
|
-
const KUBERNETES_VERSION = '1.
|
|
21
|
+
const KUBERNETES_VERSION = '1.33.9'
|
|
21
22
|
|
|
22
23
|
/** Додатковий реєстр схем для CRD (як у README kubeconform). */
|
|
23
24
|
const DATREE_CRD_SCHEMA_LOCATION =
|
|
@@ -69,7 +70,7 @@ async function findK8sRoots(root) {
|
|
|
69
70
|
/**
|
|
70
71
|
* Запускає kubeconform для переліку каталогів.
|
|
71
72
|
* @param {string[]} dirs абсолютні шляхи до `…/k8s`
|
|
72
|
-
* @returns {number} код виходу процесу kubeconform (127, якщо
|
|
73
|
+
* @returns {number} код виходу процесу kubeconform (127, якщо kubeconform відсутній у PATH)
|
|
73
74
|
*/
|
|
74
75
|
function runKubeconform(dirs) {
|
|
75
76
|
const args = [
|
|
@@ -93,8 +94,9 @@ function runKubeconform(dirs) {
|
|
|
93
94
|
|
|
94
95
|
/**
|
|
95
96
|
* Запускає kubescape scan для кожного каталогу окремо (узгоджено з прикладами CLI).
|
|
97
|
+
* Немає прапорця версії Kubernetes — за потреби додай `scan framework <ім’я>` під CIS/інші набори.
|
|
96
98
|
* @param {string[]} dirs абсолютні шляхи до `…/k8s`
|
|
97
|
-
* @returns {number} 0 при успіху, інакше код останнього невдалого scan або 127, якщо
|
|
99
|
+
* @returns {number} 0 при успіху, інакше код останнього невдалого scan або 127, якщо kubescape відсутній у PATH
|
|
98
100
|
*/
|
|
99
101
|
function runKubescape(dirs) {
|
|
100
102
|
for (const d of dirs) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Спільна логіка виклику hadolint для шляхів до Dockerfile (див. docker.mdc).
|
|
3
3
|
*
|
|
4
|
-
* Відносні шляхи з прямими слешами для контейнера; спочатку
|
|
4
|
+
* Відносні шляхи з прямими слешами для контейнера; спочатку hadolint з PATH,
|
|
5
5
|
* інакше docker run з образом HADOLINT_IMAGE. Використовується check-docker.mjs та
|
|
6
6
|
* run-docker.mjs.
|
|
7
7
|
*/
|