@nitra/cursor 12.8.6 → 12.8.7
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/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/rules/adr/js/hooks.mdc +32 -0
- package/rules/adr/js/madr_format.mdc +96 -0
- package/rules/adr/js/settings_policy.mdc +34 -0
- package/rules/adr/main.mdc +13 -95
- package/rules/bun/js/bunfig.mdc +12 -0
- package/rules/bun/js/layout.mdc +60 -0
- package/rules/bun/js/lint.mdc +9 -0
- package/rules/bun/js/package_json.mdc +19 -0
- package/rules/bun/main.mdc +9 -61
- package/rules/capacitor/js/ios_spm.mdc +69 -0
- package/rules/capacitor/js/version.mdc +29 -0
- package/rules/capacitor/main.mdc +8 -22
- package/rules/changelog/js/agent-workflow.mdc +15 -0
- package/rules/changelog/js/changelog-format.mdc +33 -0
- package/rules/changelog/js/comparison-models.mdc +40 -0
- package/rules/changelog/main.mdc +4 -98
- package/rules/ci4/js/marksman_config.mdc +31 -0
- package/rules/ci4/js/vscode_extensions.mdc +33 -0
- package/rules/ci4/main.mdc +14 -14
- package/rules/docker/js/compile.mdc +44 -0
- package/rules/docker/js/hadolint.mdc +50 -0
- package/rules/docker/js/mirror.mdc +13 -0
- package/rules/docker/js/multistage.mdc +13 -0
- package/rules/docker/js/native-addon.mdc +43 -0
- package/rules/docker/js/nginx-tag.mdc +7 -0
- package/rules/docker/js/nginx-user.mdc +37 -0
- package/rules/docker/js/non-root.mdc +39 -0
- package/rules/docker/main.mdc +15 -196
- package/rules/ga/js/lint_toolchain.mdc +15 -0
- package/rules/ga/js/required_workflows.mdc +35 -0
- package/rules/ga/js/vscode.mdc +17 -0
- package/rules/ga/js/workflow_common.mdc +108 -0
- package/rules/ga/js/workflows.mdc +32 -0
- package/rules/ga/js/zizmor.mdc +7 -0
- package/rules/ga/main.mdc +17 -125
- package/rules/graphql/js/tooling.mdc +13 -0
- package/rules/graphql/js/vscode_extensions.mdc +13 -0
- package/rules/graphql/main.mdc +3 -22
- package/rules/hasura/js/internal_urls.mdc +27 -0
- package/rules/hasura/js/migrations.mdc +13 -0
- package/rules/hasura/js/svc_hl.mdc +17 -0
- package/rules/hasura/main.mdc +8 -30
- package/rules/image-avif/js/avif_generation.mdc +26 -0
- package/rules/image-avif/js/package_json_optout.mdc +21 -0
- package/rules/image-avif/main.mdc +7 -34
- package/rules/image-compress/js/package_json.mdc +7 -0
- package/rules/image-compress/js/package_setup.mdc +13 -0
- package/rules/image-compress/main.mdc +4 -12
- package/rules/js/docs/index.md +3 -3
- package/rules/js/js/dep-policy.mdc +17 -0
- package/rules/js/js/eslint-config.mdc +28 -0
- package/rules/js/js/extensions.mdc +8 -0
- package/rules/js/js/file-extensions.mdc +12 -0
- package/rules/js/js/for-in.mdc +26 -0
- package/rules/js/js/jscpd.mdc +42 -0
- package/rules/js/js/knip.mdc +15 -0
- package/rules/js/js/lint-js-workflow.mdc +58 -0
- package/rules/js/js/oxlintrc.mdc +20 -0
- package/rules/js/js/package-json.mdc +31 -0
- package/rules/js/js/tests.mdc +9 -0
- package/rules/js/js/utils-lib-structure.mdc +15 -0
- package/rules/js/main.mdc +21 -214
- package/rules/js-bun-db/js/bun-sql-migration.mdc +15 -0
- package/rules/js-bun-db/js/connection.mdc +42 -0
- package/rules/js-bun-db/js/pg-format-identifiers.mdc +102 -0
- package/rules/js-bun-db/js/pg-format-shim.mdc +99 -0
- package/rules/js-bun-db/js/pg-leftover.mdc +27 -0
- package/rules/js-bun-db/js/pg-listen-notify.mdc +51 -0
- package/rules/js-bun-db/js/query-safety.mdc +117 -0
- package/rules/js-bun-db/js/sql-array.mdc +88 -0
- package/rules/js-bun-db/js/unsafe.mdc +65 -0
- package/rules/js-bun-db/main.mdc +15 -605
- package/rules/js-bun-redis/js/imports.mdc +47 -0
- package/rules/js-bun-redis/js/package_json.mdc +44 -0
- package/rules/js-bun-redis/main.mdc +3 -11
- package/rules/js-mssql/js/mssql-in-list.mdc +38 -0
- package/rules/js-mssql/js/mssql-pool.mdc +56 -0
- package/rules/js-mssql/js/mssql-query-template.mdc +33 -0
- package/rules/js-mssql/js/mssql-tvp.mdc +75 -0
- package/rules/js-mssql/js/mssql-version.mdc +7 -0
- package/rules/js-mssql/main.mdc +10 -198
- package/rules/js-run/js/check-env.mdc +35 -0
- package/rules/js-run/js/conn-aliases.mdc +109 -0
- package/rules/js-run/js/jsconfig.mdc +20 -0
- package/rules/js-run/js/otel-configmap.mdc +6 -0
- package/rules/js-run/js/pino.mdc +6 -0
- package/rules/js-run/js/project-structure.mdc +11 -0
- package/rules/js-run/js/runtime.mdc +14 -0
- package/rules/js-run/js/scope.mdc +11 -0
- package/rules/js-run/js/settimeout.mdc +11 -0
- package/rules/js-run/js/temporal.mdc +5 -0
- package/rules/js-run/main.mdc +16 -218
- package/rules/k8s/js/configmap.mdc +41 -0
- package/rules/k8s/js/deployment_resources.mdc +49 -0
- package/rules/k8s/js/hasura_httproute.mdc +91 -0
- package/rules/k8s/js/hpa_apiversion.mdc +27 -0
- package/rules/k8s/js/ingress_gateway.mdc +16 -0
- package/rules/k8s/js/kustomize_structure.mdc +144 -0
- package/rules/k8s/js/lint_k8s.mdc +72 -0
- package/rules/k8s/js/multidoc_yaml.mdc +5 -0
- package/rules/k8s/js/network_policy.mdc +136 -0
- package/rules/k8s/js/schema_modeline.mdc +57 -0
- package/rules/k8s/js/service.mdc +44 -0
- package/rules/k8s/js/topology_hpa_pdb.mdc +181 -0
- package/rules/k8s/main.mdc +30 -843
- package/rules/nginx-default-tpl/js/dockerfile.mdc +36 -0
- package/rules/nginx-default-tpl/js/http-route.mdc +41 -0
- package/rules/nginx-default-tpl/js/ini-keys.mdc +21 -0
- package/rules/nginx-default-tpl/js/template-structure.mdc +86 -0
- package/rules/nginx-default-tpl/js/vscode.mdc +37 -0
- package/rules/nginx-default-tpl/main.mdc +6 -112
- package/rules/npm-module/js/docs/index.md +5 -5
- package/rules/npm-module/js/docs/rule_meta.md +6 -6
- package/rules/npm-module/js/docs/skill_meta.md +8 -8
- package/rules/npm-module/js/header_doc_pointer.mdc +18 -0
- package/rules/npm-module/js/package_structure.mdc +62 -0
- package/rules/npm-module/js/rule_meta.mdc +11 -0
- package/rules/npm-module/js/skill_meta.mdc +11 -0
- package/rules/npm-module/main.mdc +10 -55
- package/rules/php/js/lint_php_yml.mdc +12 -0
- package/rules/php/js/tooling.mdc +66 -0
- package/rules/php/main.mdc +7 -66
- package/rules/python/js/lint_python_yml.mdc +23 -0
- package/rules/python/js/pyproject_toml.mdc +32 -0
- package/rules/python/js/tooling.mdc +23 -0
- package/rules/python/main.mdc +9 -33
- package/rules/rego/js/rego-lint.mdc +31 -0
- package/rules/rego/js/vscode_extensions.mdc +11 -0
- package/rules/rego/js/vscode_settings.mdc +13 -0
- package/rules/rego/main.mdc +8 -24
- package/rules/rust/js/coverage.mdc +28 -0
- package/rules/rust/js/lint.mdc +22 -0
- package/rules/rust/js/tauri_composition.mdc +8 -0
- package/rules/rust/js/vscode_extensions.mdc +12 -0
- package/rules/rust/main.mdc +8 -38
- package/rules/security/js/rego_policies.mdc +15 -0
- package/rules/security/js/sample_secret.mdc +19 -0
- package/rules/security/js/trufflehog.mdc +21 -0
- package/rules/security/main.mdc +7 -35
- package/rules/style/js/admin-table.mdc +88 -0
- package/rules/style/js/colors.mdc +21 -0
- package/rules/style/js/gap.mdc +22 -0
- package/rules/style/js/quasar-fixes.mdc +32 -0
- package/rules/style/js/quasar.mdc +7 -0
- package/rules/style/js/tooling.mdc +85 -0
- package/rules/style/main.mdc +13 -253
- package/rules/tauri/js/cargo_mutants_config.mdc +39 -0
- package/rules/tauri/js/tool_surface.mdc +21 -0
- package/rules/tauri/js/tooling.mdc +25 -0
- package/rules/tauri/main.mdc +8 -78
- package/rules/test/js/cargo_mutants_config.mdc +18 -0
- package/rules/test/js/docs/index.md +7 -7
- package/rules/test/js/location.mdc +52 -0
- package/rules/test/js/no-console-store-restore.mdc +11 -0
- package/rules/test/js/no-process-chdir.mdc +15 -0
- package/rules/test/js/no-relative-fs-path.mdc +22 -0
- package/rules/test/js/sandbox-aware-test.mdc +28 -0
- package/rules/test/js/stryker_config.mdc +26 -0
- package/rules/test/js/vitest-config-pool-forks.mdc +33 -0
- package/rules/test/main.mdc +18 -184
- package/rules/text/js/ci-lint-text.mdc +15 -0
- package/rules/text/js/cspell.mdc +81 -0
- package/rules/text/js/dotenv-linter.mdc +16 -0
- package/rules/text/js/forbidden-prettier.mdc +13 -0
- package/rules/text/js/markdownlint.mdc +25 -0
- package/rules/text/js/oxfmt.mdc +35 -0
- package/rules/text/js/package-json.mdc +26 -0
- package/rules/text/js/shellcheck.mdc +18 -0
- package/rules/text/js/v8r.mdc +23 -0
- package/rules/text/js/vscode.mdc +86 -0
- package/rules/text/main.mdc +20 -237
- package/rules/vue/js/composition-api.mdc +82 -0
- package/rules/vue/js/nheader-layout.mdc +171 -0
- package/rules/vue/js/node-imports.mdc +25 -0
- package/rules/vue/js/quasar-ui.mdc +32 -0
- package/rules/vue/js/structure.mdc +101 -0
- package/rules/vue/js/testing.mdc +32 -0
- package/rules/vue/js/tfm-translations.mdc +26 -0
- package/rules/vue/js/vite-config.mdc +126 -0
- package/rules/vue/js/vite-env.mdc +55 -0
- package/rules/vue/js/vue-imports.mdc +25 -0
- package/rules/vue/main.mdc +16 -640
- package/scripts/docs/index.md +16 -16
- package/scripts/lib/docs/index.md +36 -36
- package/scripts/utils/docs/index.md +14 -14
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
## Deployment: `topologySpreadConstraints`, HPA / PDB через `components/`, NetworkPolicy у `base/`
|
|
2
|
+
|
|
3
|
+
Для **кожного** `kind: Deployment` у каталозі **`…/k8s/…/base/`** сам Deployment має канонічні **`spec.template.spec.topologySpreadConstraints`**, а **HPA і PDB** живуть у **sibling каталозі** **`…/k8s/…/components/`** (Kustomize Component, фіксована назва каталогу — `components`). У `base/` локальні `hpa.yaml` і `pdb.yaml` **заборонені**. Інші назви каталогу (`scale/`, `hpa-component/`, `pdb-component/`) — fail.
|
|
4
|
+
|
|
5
|
+
Кожен **Deployment** має явно задавати безпечну rollout strategy:
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
strategy:
|
|
9
|
+
type: RollingUpdate
|
|
10
|
+
rollingUpdate:
|
|
11
|
+
maxUnavailable: 0
|
|
12
|
+
maxSurge: 1
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Це гарантує, що під час оновлення image Kubernetes спершу створить один новий Pod, дочекається його `Ready`, і лише потім прибере один старий Pod.
|
|
16
|
+
|
|
17
|
+
**NetworkPolicy** лежить **у `base/`** (обмеження мережі мають діяти і на dev). Для **кожного** з **`Deployment`**, **`StatefulSet`**, **`DaemonSet`**, **`Job`**, **`CronJob`** під `k8s` обов'язковий **NetworkPolicy**: у **`…/k8s/…/base/`** — у **`base/networkpolicy.yaml`** поруч з workload-маніфестом (multi-doc, якщо workload-ів кілька). У `base/kustomization.yaml` `resources:` має бути `networkpolicy.yaml`.
|
|
18
|
+
|
|
19
|
+
### Канонічна структура `<pkg>/k8s/components/`
|
|
20
|
+
|
|
21
|
+
Лише HPA і PDB:
|
|
22
|
+
|
|
23
|
+
- **`kustomization.yaml`** — `apiVersion: kustomize.config.k8s.io/v1alpha1`, `kind: Component`, `resources: [hpa.yaml, pdb.yaml]` (відсортовано за алфавітом).
|
|
24
|
+
- **`hpa.yaml`** — `autoscaling/v2`, `HorizontalPodAutoscaler`, **без** `metadata.namespace`, `minReplicas: 1`, `maxReplicas: 1`.
|
|
25
|
+
- **`pdb.yaml`** — `policy/v1`, `PodDisruptionBudget`, **без** `metadata.namespace`, `minAvailable: 0`.
|
|
26
|
+
|
|
27
|
+
**`<pkg>/k8s/components/kustomization.yaml`** має `kind: Component` (не `kind: Kustomization`) — це **джерело** канонічних HPA/PDB для всіх overlays, а не overlay сам по собі.
|
|
28
|
+
|
|
29
|
+
### Env-залежні межі (за сегментом після `/k8s/`)
|
|
30
|
+
|
|
31
|
+
**Dev-like середовища** — сегмент `base`, `dev`, або з суфіксом `-qa`:
|
|
32
|
+
|
|
33
|
+
- HPA: `minReplicas` — рівно **1**, `maxReplicas` — рівно **1**.
|
|
34
|
+
- PDB: `minAvailable` — рівно **0**.
|
|
35
|
+
|
|
36
|
+
**Прод-середовища** — усе інше:
|
|
37
|
+
|
|
38
|
+
- HPA: `minReplicas` — мінімум **2**, `maxReplicas` — мінімум **2**.
|
|
39
|
+
- PDB: `minAvailable` — мінімум **1**.
|
|
40
|
+
|
|
41
|
+
### Прод-оверрайди у `kustomization.yaml`
|
|
42
|
+
|
|
43
|
+
У прод-накладенні `kustomization.yaml`, що підключає `components: [- ../components]`, у `patches[]` **обов'язкові** JSON6902-перевизначення прод-значень:
|
|
44
|
+
|
|
45
|
+
- **`HorizontalPodAutoscaler`**: `/spec/minReplicas` і `/spec/maxReplicas` (мінімум 2).
|
|
46
|
+
- **`PodDisruptionBudget`**: `/spec/minAvailable` (мінімум 1).
|
|
47
|
+
|
|
48
|
+
```yaml title="k8s/prod/kustomization.yaml (фрагмент)"
|
|
49
|
+
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
50
|
+
kind: Kustomization
|
|
51
|
+
namespace: prod
|
|
52
|
+
resources:
|
|
53
|
+
- ../base
|
|
54
|
+
components:
|
|
55
|
+
- ../components
|
|
56
|
+
patches:
|
|
57
|
+
- target:
|
|
58
|
+
kind: HorizontalPodAutoscaler
|
|
59
|
+
name: backend-api
|
|
60
|
+
patch: |-
|
|
61
|
+
- op: replace
|
|
62
|
+
path: /spec/minReplicas
|
|
63
|
+
value: 2
|
|
64
|
+
- op: replace
|
|
65
|
+
path: /spec/maxReplicas
|
|
66
|
+
value: 10
|
|
67
|
+
- target:
|
|
68
|
+
kind: PodDisruptionBudget
|
|
69
|
+
name: backend-api
|
|
70
|
+
patch: |-
|
|
71
|
+
- op: replace
|
|
72
|
+
path: /spec/minAvailable
|
|
73
|
+
value: 1
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Приклади: `components/`, HPA, PDB
|
|
77
|
+
|
|
78
|
+
```yaml title="k8s/components/kustomization.yaml"
|
|
79
|
+
apiVersion: kustomize.config.k8s.io/v1alpha1
|
|
80
|
+
kind: Component
|
|
81
|
+
resources:
|
|
82
|
+
- hpa.yaml
|
|
83
|
+
- pdb.yaml
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```yaml title="k8s/components/hpa.yaml"
|
|
87
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.33.9-standalone-strict/horizontalpodautoscaler-autoscaling-v2.json
|
|
88
|
+
apiVersion: autoscaling/v2
|
|
89
|
+
kind: HorizontalPodAutoscaler
|
|
90
|
+
metadata:
|
|
91
|
+
name: backend-api
|
|
92
|
+
spec:
|
|
93
|
+
scaleTargetRef:
|
|
94
|
+
apiVersion: apps/v1
|
|
95
|
+
kind: Deployment
|
|
96
|
+
name: backend-api
|
|
97
|
+
minReplicas: 1 # прод overlay підіймає до >= 2
|
|
98
|
+
maxReplicas: 1 # прод overlay підіймає до >= 2
|
|
99
|
+
metrics:
|
|
100
|
+
- type: Resource
|
|
101
|
+
resource:
|
|
102
|
+
name: cpu
|
|
103
|
+
target:
|
|
104
|
+
type: Utilization
|
|
105
|
+
averageUtilization: 70
|
|
106
|
+
behavior:
|
|
107
|
+
scaleUp:
|
|
108
|
+
stabilizationWindowSeconds: 15
|
|
109
|
+
policies:
|
|
110
|
+
- type: Percent
|
|
111
|
+
value: 100
|
|
112
|
+
periodSeconds: 30
|
|
113
|
+
- type: Pods
|
|
114
|
+
value: 4
|
|
115
|
+
periodSeconds: 30
|
|
116
|
+
selectPolicy: Max
|
|
117
|
+
scaleDown:
|
|
118
|
+
stabilizationWindowSeconds: 300
|
|
119
|
+
policies:
|
|
120
|
+
- type: Percent
|
|
121
|
+
value: 25
|
|
122
|
+
periodSeconds: 120
|
|
123
|
+
selectPolicy: Min
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```yaml title="k8s/components/pdb.yaml"
|
|
127
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.33.9-standalone-strict/poddisruptionbudget-policy-v1.json
|
|
128
|
+
apiVersion: policy/v1
|
|
129
|
+
kind: PodDisruptionBudget
|
|
130
|
+
metadata:
|
|
131
|
+
name: backend-api
|
|
132
|
+
spec:
|
|
133
|
+
minAvailable: 0 # прод overlay підіймає до >= 1
|
|
134
|
+
selector:
|
|
135
|
+
matchLabels:
|
|
136
|
+
app: backend-api
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
```yaml title="k8s/base/deploy.yaml (фрагмент)"
|
|
140
|
+
spec:
|
|
141
|
+
template:
|
|
142
|
+
spec:
|
|
143
|
+
containers:
|
|
144
|
+
- name: backend-api
|
|
145
|
+
image: example.registry/backend-api:tag
|
|
146
|
+
resources:
|
|
147
|
+
requests:
|
|
148
|
+
cpu: '0.02'
|
|
149
|
+
memory: '128Mi'
|
|
150
|
+
topologySpreadConstraints:
|
|
151
|
+
- maxSkew: 1
|
|
152
|
+
topologyKey: kubernetes.io/hostname
|
|
153
|
+
whenUnsatisfiable: ScheduleAnyway
|
|
154
|
+
labelSelector:
|
|
155
|
+
matchLabels:
|
|
156
|
+
app: backend-api
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Overlays: HPA, PDB, NetworkPolicy
|
|
160
|
+
|
|
161
|
+
У **не-base** оверлеях (без `components/`) поруч із `Deployment` лишається звична схема: окремі **`hpa.yaml`**, **`networkpolicy.yaml`** і **`pdb.yaml`**, якщо такі потрібні для цього середовища.
|
|
162
|
+
|
|
163
|
+
- **`hpa.yaml`** (поза **`…/base/`**) — `autoscaling/v2`, `HorizontalPodAutoscaler`, `spec.scaleTargetRef.name` **= `metadata.name`** Deployment.
|
|
164
|
+
- **`networkpolicy.yaml`** (overlay-specific, опціональний) — той самий канон egress/ingress, що в `base/`.
|
|
165
|
+
- **`pdb.yaml`** — `policy/v1`, `PodDisruptionBudget`, `spec.selector.matchLabels.app` **= `spec.selector.matchLabels.app`** Deployment.
|
|
166
|
+
- **`topologySpreadConstraints`** — запис з `maxSkew: 1`, `topologyKey: kubernetes.io/hostname`, `whenUnsatisfiable: ScheduleAnyway`, `labelSelector.matchLabels.app` рівне тій самій мітці `app`.
|
|
167
|
+
|
|
168
|
+
**Overlays** підключають `components: [- ../components]` і додають JSON6902-патчі для прод-значень. NetworkPolicy успадковується з base через `resources: [- ../base]`.
|
|
169
|
+
|
|
170
|
+
Алгоритм перевірки структури `components/` — функція `validateComponentsForBaseDeployment` у **`rules/k8s/fix.mjs`**.
|
|
171
|
+
|
|
172
|
+
```yaml title="k8s/base/kustomization.yaml (фрагмент)"
|
|
173
|
+
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
174
|
+
kind: Kustomization
|
|
175
|
+
namespace: dev
|
|
176
|
+
resources:
|
|
177
|
+
- deploy.yaml
|
|
178
|
+
- networkpolicy.yaml
|
|
179
|
+
- svc.yaml
|
|
180
|
+
- svc-hl.yaml
|
|
181
|
+
```
|