@7n/rules-ci-github 2.4.7 → 2.5.0

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +1 -1
  3. package/rules/rust/toolchain_cache/toolchain_cache.mdc +1 -1
  4. package/rules/abie/clean_merged_ignore_branches/docs/fix-clean_merged_ignore_branches.md +0 -35
  5. package/rules/abie/clean_merged_ignore_branches/docs/index.md +0 -9
  6. package/rules/abie/clean_merged_ignore_branches/fix-clean_merged_ignore_branches.mjs +0 -18
  7. package/rules/docker/lint_docker_yml/docs/fix-lint_docker_yml.md +0 -33
  8. package/rules/docker/lint_docker_yml/docs/index.md +0 -9
  9. package/rules/docker/lint_docker_yml/fix-lint_docker_yml.mjs +0 -15
  10. package/rules/ga/clean_ga_workflows/docs/fix-clean_ga_workflows.md +0 -33
  11. package/rules/ga/clean_ga_workflows/docs/index.md +0 -9
  12. package/rules/ga/clean_ga_workflows/fix-clean_ga_workflows.mjs +0 -18
  13. package/rules/ga/clean_merged_branch/docs/fix-clean_merged_branch.md +0 -36
  14. package/rules/ga/clean_merged_branch/docs/index.md +0 -9
  15. package/rules/ga/clean_merged_branch/fix-clean_merged_branch.mjs +0 -18
  16. package/rules/ga/git_ai/docs/fix-git_ai.md +0 -40
  17. package/rules/ga/git_ai/docs/index.md +0 -9
  18. package/rules/ga/git_ai/fix-git_ai.mjs +0 -15
  19. package/rules/ga/lint_ga/docs/fix-lint_ga.md +0 -38
  20. package/rules/ga/lint_ga/docs/index.md +0 -9
  21. package/rules/ga/lint_ga/fix-lint_ga.mjs +0 -15
  22. package/rules/ga/lint_repo_yml/docs/fix-lint_repo_yml.md +0 -40
  23. package/rules/ga/lint_repo_yml/docs/index.md +0 -9
  24. package/rules/ga/lint_repo_yml/fix-lint_repo_yml.mjs +0 -15
  25. package/rules/ga/vscode_extensions/docs/fix-vscode_extensions.md +0 -25
  26. package/rules/ga/vscode_extensions/docs/index.md +0 -11
  27. package/rules/ga/vscode_extensions/fix-vscode_extensions.mjs +0 -1
  28. package/rules/ga/vscode_settings/docs/fix-vscode_settings.md +0 -33
  29. package/rules/ga/vscode_settings/docs/index.md +0 -9
  30. package/rules/ga/vscode_settings/fix-vscode_settings.mjs +0 -15
  31. package/rules/ga/workflows/docs/fix-workflows.md +0 -37
  32. package/rules/ga/workflows/docs/index.md +0 -9
  33. package/rules/ga/workflows/fix-workflows.mjs +0 -212
  34. package/rules/ga/zizmor_yml/docs/fix-zizmor_yml.md +0 -33
  35. package/rules/ga/zizmor_yml/docs/index.md +0 -9
  36. package/rules/ga/zizmor_yml/fix-zizmor_yml.mjs +0 -13
  37. package/rules/k8s/lint_k8s_yml/docs/fix-lint_k8s_yml.md +0 -35
  38. package/rules/k8s/lint_k8s_yml/docs/index.md +0 -9
  39. package/rules/k8s/lint_k8s_yml/fix-lint_k8s_yml.mjs +0 -15
  40. package/rules/npm-module/npm_publish_yml/docs/fix-npm_publish_yml.md +0 -37
  41. package/rules/npm-module/npm_publish_yml/docs/index.md +0 -9
  42. package/rules/npm-module/npm_publish_yml/fix-npm_publish_yml.mjs +0 -18
  43. package/rules/rust/toolchain_cache/docs/fix-toolchain_cache.md +0 -35
  44. package/rules/rust/toolchain_cache/docs/index.md +0 -9
  45. package/rules/rust/toolchain_cache/fix-toolchain_cache.mjs +0 -239
  46. package/rules/security/lint_security_yml/docs/fix-lint_security_yml.md +0 -32
  47. package/rules/security/lint_security_yml/docs/index.md +0 -9
  48. package/rules/security/lint_security_yml/fix-lint_security_yml.mjs +0 -14
  49. package/rules/style/lint_style_yml/docs/fix-lint_style_yml.md +0 -31
  50. package/rules/style/lint_style_yml/docs/index.md +0 -9
  51. package/rules/style/lint_style_yml/fix-lint_style_yml.mjs +0 -11
  52. package/rules/text/lint_text/docs/fix-lint_text.md +0 -32
  53. package/rules/text/lint_text/docs/index.md +0 -9
  54. package/rules/text/lint_text/fix-lint_text.mjs +0 -11
@@ -1,239 +0,0 @@
1
- /** @see ./docs/fix-toolchain_cache.md */
2
-
3
- /**
4
- * T0-autofix для `rust/toolchain_cache` — детерміновано вставляє
5
- * `Swatinem/rust-cache@v2` одразу після кожного `dtolnay/rust-toolchain@…` кроку,
6
- * якому його бракує у своєму job-і, і дописує `with.workspaces` у Tauri-job-ах,
7
- * де Cargo.toml не в корені репо. Текстові splice-и (як `ga/workflows/fix-workflows.mjs`) —
8
- * зберігають коментарі/формат, мінімальний diff. Ідемпотентно: `scanToolchainSteps`
9
- * заново перевіряє стан файла на кожному прогоні.
10
- *
11
- * `scanToolchainSteps` (і решта сканувального рушія нижче — `TOOLCHAIN_RE`/
12
- * `CACHE_RE`/`TAURI_ACTION_RE`/`WORKSPACES_KEY_RE`/`indentOf`/`dashColFor`/
13
- * `scanJobForCache`/`cacheStepHasWorkspaces`) переїхали СЮДИ з видаленого
14
- * `main.mjs`: канон детекту тепер `detect_toolchain_cache` wasm-гостя
15
- * `crates/plugin-ci-github`, і фіксер лишився ЄДИНИМ JS-споживачем цього
16
- * коду. `tauriWorkspaceDir` і сам `lint()` — НЕ перенесені, вони вмирали разом
17
- * із детектором (фіксер їх не використовував; перевірено grep-ом по репо).
18
- * Раніше експортовані символи стали локальними — ніхто ззовні на них не
19
- * посилався (перевірено тим самим grep-ом).
20
- *
21
- * Значення `MISSING_RUST_CACHE`/`MISSING_RUST_CACHE_WORKSPACES` мусять
22
- * збігатися з reason-рядками гостя БАЙТ-У-БАЙТ — інакше `patterns[].test`
23
- * нижче не побачить порушень, які гість реально видає, і T0-фікс тихо
24
- * перестане спрацьовувати. Звірку тримає `tests/fix-toolchain_cache.test.mjs`
25
- * (T0 round-trip-сценарій через `runWasmConcern`) і parity-гейт
26
- * (`npm/scripts/lib/lint-surface/tests/wasm-plugin-parity-ci-github.test.mjs`).
27
- */
28
- import { applyToFiles } from '@7n/rules/scripts/utils/apply-to-files.mjs'
29
-
30
- /** Reason-код: job ставить Rust toolchain, але не має кроку `Swatinem/rust-cache@v2`. */
31
- const MISSING_RUST_CACHE = 'missing-rust-cache'
32
- /** Reason-код: кеш-крок Tauri-job-а без `with.workspaces` на каталог `src-tauri`. */
33
- const MISSING_RUST_CACHE_WORKSPACES = 'missing-rust-cache-workspaces'
34
-
35
- /** Рядок кроку встановлення Rust toolchain (`dtolnay/rust-toolchain@…`). */
36
- const TOOLCHAIN_RE = /uses:\s*dtolnay\/rust-toolchain@/u
37
- /** Рядок кроку кешування Cargo-артефактів (`Swatinem/rust-cache@…`). */
38
- const CACHE_RE = /uses:\s*Swatinem\/rust-cache@/u
39
- const TAURI_ACTION_RE = /uses:\s*tauri-apps\/tauri-action@/u
40
- const WORKSPACES_KEY_RE = /^\s*workspaces\s*:/u
41
-
42
- /**
43
- * Відступ рядка (кількість пробілів перед першим непробільним символом).
44
- * @param {string} line рядок файла
45
- * @returns {number} кількість пробілів відступу
46
- */
47
- function indentOf(line) {
48
- return line.length - line.trimStart().length
49
- }
50
-
51
- /**
52
- * Дашова колонка кроку (`- uses: …`) з колонки `uses:`. Захист від негативного
53
- * значення для нетипового форматування (dash не на тому ж рядку).
54
- * @param {number} usesCol колонка підрядка `uses:`
55
- * @returns {number} колонка dash-а (не менше 0)
56
- */
57
- function dashColFor(usesCol) {
58
- return Math.max(usesCol - 2, 0)
59
- }
60
-
61
- /**
62
- * Один запис аналізу `dtolnay/rust-toolchain` кроку в межах його job-а (обмеженого
63
- * indentation-dedent-ом, без явного YAML-парсу job-структури).
64
- * @typedef {object} ToolchainStepScan
65
- * @property {number} line індекс рядка кроку `dtolnay/rust-toolchain@…`
66
- * @property {number} dashCol колонка dash-а кроку (рівень step-list-а job-а)
67
- * @property {boolean} hasCache чи є `Swatinem/rust-cache@…` пізніше в тому самому job-і
68
- * @property {number} cacheLine індекс рядка кеш-кроку (−1, якщо відсутній)
69
- * @property {boolean} cacheHasWorkspaces чи кеш-крок вже має ключ `workspaces`
70
- * @property {boolean} jobHasTauriAction чи job також викликає `tauri-apps/tauri-action`
71
- */
72
-
73
- /**
74
- * Сканує job від рядка ОДРАЗУ ПІСЛЯ toolchain-кроку до dedent-у: шукає перший
75
- * `Swatinem/rust-cache@…` крок і чи job також викликає `tauri-apps/tauri-action`.
76
- * @param {string[]} lines усі рядки файла
77
- * @param {number} fromLine рядок, з якого починати сканування (i + 1)
78
- * @param {number} dashCol колонка dash-а step-list-а job-а (межа dedent-у)
79
- * @returns {{hasCache: boolean, cacheLine: number, jobHasTauriAction: boolean}} результат сканування job-а
80
- */
81
- function scanJobForCache(lines, fromLine, dashCol) {
82
- let hasCache = false
83
- let cacheLine = -1
84
- let jobHasTauriAction = false
85
- for (let j = fromLine; j < lines.length; j++) {
86
- const line = lines[j]
87
- if (line.trim() === '') continue
88
- if (indentOf(line) < dashCol) break // dedent → вийшли зі step-list-а цього job-а
89
- if (!hasCache && CACHE_RE.test(line)) {
90
- hasCache = true
91
- cacheLine = j
92
- }
93
- if (TAURI_ACTION_RE.test(line)) jobHasTauriAction = true
94
- }
95
- return { hasCache, cacheLine, jobHasTauriAction }
96
- }
97
-
98
- /**
99
- * Чи кеш-крок (`cacheLine`) уже має ключ `with.workspaces` у своєму блоці (до dedent-у).
100
- * @param {string[]} lines усі рядки файла
101
- * @param {number} cacheLine рядок кеш-кроку
102
- * @param {number} dashCol колонка даша step-list-а job-а (межа dedent-у)
103
- * @returns {boolean} true — ключ `workspaces` уже є
104
- */
105
- function cacheStepHasWorkspaces(lines, cacheLine, dashCol) {
106
- for (let j = cacheLine + 1; j < lines.length; j++) {
107
- const line = lines[j]
108
- if (line.trim() === '') continue
109
- if (indentOf(line) < dashCol) break
110
- if (WORKSPACES_KEY_RE.test(line)) return true
111
- }
112
- return false
113
- }
114
-
115
- /**
116
- * Сканує вміст workflow-файла й повертає по одному запису на кожен
117
- * `dtolnay/rust-toolchain@…` крок, з інформацією про cache-крок і tauri-action
118
- * у тому самому job-і (обмежено indentation-dedent-ом).
119
- * @param {string} content вміст workflow-файла
120
- * @returns {ToolchainStepScan[]} записи аналізу
121
- */
122
- function scanToolchainSteps(content) {
123
- const lines = content.split('\n')
124
- /** @type {ToolchainStepScan[]} */
125
- const out = []
126
- for (let i = 0; i < lines.length; i++) {
127
- const usesCol = lines[i].indexOf('uses:')
128
- if (usesCol === -1 || !TOOLCHAIN_RE.test(lines[i])) continue
129
- const dashCol = dashColFor(usesCol)
130
- const { hasCache, cacheLine, jobHasTauriAction } = scanJobForCache(lines, i + 1, dashCol)
131
- const cacheHasWorkspaces = hasCache && cacheStepHasWorkspaces(lines, cacheLine, dashCol)
132
- out.push({ line: i, dashCol, hasCache, cacheLine, cacheHasWorkspaces, jobHasTauriAction })
133
- }
134
- return out
135
- }
136
-
137
- /**
138
- * Індекс першого рядка після step-блоку, що починається на `stepLine`
139
- * (dash-колонка `dashCol`) — перший рядок з відступом не більшим за `dashCol`
140
- * (сусідній крок того самого рівня або dedent), або EOF.
141
- * @param {string[]} lines усі рядки
142
- * @param {number} stepLine індекс рядка кроку (`- uses: …`)
143
- * @param {number} dashCol колонка dash-а кроку
144
- * @returns {number} індекс вставки (кінець блоку кроку)
145
- */
146
- function stepBlockEnd(lines, stepLine, dashCol) {
147
- let j = stepLine + 1
148
- while (j < lines.length) {
149
- const line = lines[j]
150
- if (line.trim() !== '' && line.length - line.trimStart().length <= dashCol) break
151
- j++
152
- }
153
- return j
154
- }
155
-
156
- /**
157
- * Вставляє `Swatinem/rust-cache@v2` (з опційним `with.workspaces`) одразу після
158
- * кожного `dtolnay/rust-toolchain@…` кроку без cache-кроку в тому самому job-і.
159
- * @param {string} content вміст workflow-файла
160
- * @param {string} [workspaceDir] відносний шлях workspace-а для `with.workspaces` (опційно)
161
- * @returns {string|null} новий вміст або null, якщо нічого не змінилось
162
- */
163
- export function insertRustCache(content, workspaceDir) {
164
- const lines = content.split('\n')
165
- const missing = scanToolchainSteps(content).filter(s => !s.hasCache)
166
- if (missing.length === 0) return null
167
-
168
- /** @type {Array<{ at: number, text: string[] }>} */
169
- const inserts = []
170
- for (const step of missing) {
171
- const at = stepBlockEnd(lines, step.line, step.dashCol)
172
- const ind = ' '.repeat(step.dashCol)
173
- const text = [`${ind}- uses: Swatinem/rust-cache@v2`]
174
- if (workspaceDir && step.jobHasTauriAction) {
175
- text.push(`${ind} with:`, `${ind} workspaces: ${workspaceDir}`)
176
- }
177
- inserts.push({ at, text })
178
- }
179
- inserts.sort((a, b) => b.at - a.at) // згори вниз — індекси не зсуваються під час splice
180
- for (const ins of inserts) lines.splice(ins.at, 0, ...ins.text)
181
- return lines.join('\n')
182
- }
183
-
184
- /**
185
- * Дописує `with: workspaces: <dir>` у кожен уже наявний `Swatinem/rust-cache@…`
186
- * крок Tauri-job-а (`tauri-apps/tauri-action`), якому бракує `workspaces`.
187
- * @param {string} content вміст workflow-файла
188
- * @param {string} workspaceDir відносний шлях workspace-а
189
- * @returns {string|null} новий вміст або null, якщо нічого не змінилось
190
- */
191
- export function addCacheWorkspaces(content, workspaceDir) {
192
- const lines = content.split('\n')
193
- const targets = scanToolchainSteps(content).filter(s => s.hasCache && s.jobHasTauriAction && !s.cacheHasWorkspaces)
194
- if (targets.length === 0) return null
195
-
196
- /** @type {Array<{ at: number, text: string[] }>} */
197
- const inserts = []
198
- for (const step of targets) {
199
- const cacheLine = lines[step.cacheLine]
200
- const usesCol = cacheLine.indexOf('uses:')
201
- const ind = ' '.repeat(usesCol)
202
- const at = stepBlockEnd(lines, step.cacheLine, usesCol - 2)
203
- inserts.push({ at, text: [`${ind}with:`, `${ind} workspaces: ${workspaceDir}`] })
204
- }
205
- inserts.sort((a, b) => b.at - a.at)
206
- for (const ins of inserts) lines.splice(ins.at, 0, ...ins.text)
207
- return lines.join('\n')
208
- }
209
-
210
- /** @type {import('@7n/rules/scripts/lib/lint-surface/types.mjs').T0Pattern[]} */
211
- export const patterns = [
212
- {
213
- id: 'rust-toolchain-cache-insert',
214
- test: violations => violations.some(v => v.data?.kind === MISSING_RUST_CACHE && v.file),
215
- apply: (violations, ctx) => {
216
- const targets = violations.filter(v => v.data?.kind === MISSING_RUST_CACHE && v.file)
217
- const wsTargets = violations.filter(v => v.data?.kind === MISSING_RUST_CACHE_WORKSPACES)
218
- const workspaceDir = wsTargets.find(v => typeof v.data?.workspaceDir === 'string')?.data?.workspaceDir
219
- const touchedFiles = applyToFiles(targets, ctx, () => content => insertRustCache(content, workspaceDir))
220
- return touchedFiles.length > 0
221
- ? { touchedFiles, message: `Swatinem/rust-cache@v2 → ${touchedFiles.length} workflow(s)` }
222
- : { touchedFiles: [] }
223
- }
224
- },
225
- {
226
- id: 'rust-toolchain-cache-workspaces',
227
- test: violations => violations.some(v => v.data?.kind === MISSING_RUST_CACHE_WORKSPACES && v.file),
228
- apply: (violations, ctx) => {
229
- const targets = violations.filter(v => v.data?.kind === MISSING_RUST_CACHE_WORKSPACES && v.file)
230
- const touchedFiles = applyToFiles(targets, ctx, () => content => {
231
- const workspaceDir = targets.find(v => typeof v.data?.workspaceDir === 'string')?.data?.workspaceDir
232
- return workspaceDir ? addCacheWorkspaces(content, workspaceDir) : null
233
- })
234
- return touchedFiles.length > 0
235
- ? { touchedFiles, message: `with.workspaces → ${touchedFiles.length} workflow(s)` }
236
- : { touchedFiles: [] }
237
- }
238
- }
239
- ]
@@ -1,32 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: fix-lint_security_yml.mjs
4
- resource: plugins/ci-github/rules/security/lint_security_yml/fix-lint_security_yml.mjs
5
- docgen:
6
- crc: 7063b373
7
- model: openai-codex/gpt-5.4-mini
8
- tier: cloud-min
9
- score: 100
10
- issues: judge-refine:kept-original,judge:inaccurate:0.98
11
- judgeModel: openai-codex/gpt-5.4-mini
12
- ---
13
-
14
- ## Огляд
15
-
16
- Декларативний template-deep-merge для `security/lint_security_yml`, який або створює відсутній `.github/workflows/lint-security.yml` з канонічного шаблону правила, або доповнює наявний workflow лише канонічними полями. Пошук працює через `patterns` і свідомо пропускає `.github` та `.git`, тож правило не зачіпає ці шляхи під час автолікування. Це потрібно, щоб у репозиторії був узгоджений security-lint workflow.
17
-
18
- ## Поведінка
19
-
20
- 1. `patterns` задає єдине правило автолікування для `security/lint_security_yml`: воно готує канонічний шаблон для `.github/workflows/lint-security.yml`.
21
- 2. Якщо цільового workflow-файлу немає, `patterns` ініціює його створення зі стандартною структурою правила.
22
- 3. Якщо файл уже існує, `patterns` доповнює лише канонічні поля, не перетираючи локальні зміни.
23
- 4. `patterns` свідомо не працює з шляхами `.github` і `.git`, щоб не зачіпати службові області репозиторію.
24
-
25
- ## Публічний API
26
-
27
- - patterns — Фікс-патерни концерну: один template-deep-merge запис для `.github/workflows/lint-security.yml`.
28
-
29
- ## Гарантії поведінки
30
-
31
- - Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
32
- - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -1,9 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: plugins/ci-github/rules/security/lint_security_yml
4
- resource: plugins/ci-github/rules/security/lint_security_yml/
5
- ---
6
-
7
- | Файл | Тип |
8
- | ----------------------------------------------------- | --------- |
9
- | [fix-lint_security_yml.mjs](fix-lint_security_yml.md) | JS Module |
@@ -1,14 +0,0 @@
1
- /**
2
- * T0-autofix концерну `security/lint_security_yml`: деклараційний template-deep-merge —
3
- * scaffold відсутнього `.github/workflows/lint-security.yml` з канонічного шаблону правила або
4
- * дописування в наявний файл лише канонічних полів (локальні — зберігаються).
5
- */
6
- import { createTemplateFixPattern } from '@7n/rules/scripts/lib/fix/template-deep-merge.mjs'
7
-
8
- /** Фікс-патерни концерну: один template-deep-merge запис для `.github/workflows/lint-security.yml`. */
9
- export const patterns = [
10
- createTemplateFixPattern({
11
- id: 'security-lint_security_yml-template',
12
- targetPath: '.github/workflows/lint-security.yml'
13
- })
14
- ]
@@ -1,31 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: fix-lint_style_yml.mjs
4
- resource: plugins/ci-github/rules/style/lint_style_yml/fix-lint_style_yml.mjs
5
- docgen:
6
- crc: 1230aa27
7
- model: openai-codex/gpt-5.5
8
- tier: cloud-avg
9
- score: 100
10
- judgeModel: openai-codex/gpt-5.4-mini
11
- ---
12
-
13
- ## Огляд
14
-
15
- `style/lint_style_yml` описує автозастосування канонічного workflow `.github/workflows/lint-style.yml` саме для правила `lint-style.yml`. `patterns` потрібна, щоб через `template-deep-merge` створювати відсутній workflow з еталонного шаблону або доповнювати наявний лише обов’язковими канонічними полями без втрати локальних налаштувань.
16
-
17
- ## Поведінка
18
-
19
- 1. `patterns` задає автозастосування канонічного виправлення для workflow перевірки стилю.
20
-
21
- 2. Якщо `.github/workflows/lint-style.yml` відсутній, правило має створити його з еталонного шаблону.
22
-
23
- 3. Якщо workflow уже існує, правило має доповнити його лише обов’язковими канонічними полями, не перезаписуючи локальні налаштування.
24
-
25
- ## Публічний API
26
-
27
- - patterns — Фікс-патерни концерну: один template-deep-merge запис для `.github/workflows/lint-style.yml`.
28
-
29
- ## Гарантії поведінки
30
-
31
- - Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
@@ -1,9 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: plugins/ci-github/rules/style/lint_style_yml
4
- resource: plugins/ci-github/rules/style/lint_style_yml/
5
- ---
6
-
7
- | Файл | Тип |
8
- | ----------------------------------------------- | --------- |
9
- | [fix-lint_style_yml.mjs](fix-lint_style_yml.md) | JS Module |
@@ -1,11 +0,0 @@
1
- /**
2
- * T0-autofix концерну `style/lint_style_yml`: деклараційний template-deep-merge —
3
- * scaffold відсутнього `.github/workflows/lint-style.yml` з канонічного шаблону правила або
4
- * дописування в наявний файл лише канонічних полів (локальні — зберігаються).
5
- */
6
- import { createTemplateFixPattern } from '@7n/rules/scripts/lib/fix/template-deep-merge.mjs'
7
-
8
- /** Фікс-патерни концерну: один template-deep-merge запис для `.github/workflows/lint-style.yml`. */
9
- export const patterns = [
10
- createTemplateFixPattern({ id: 'style-lint_style_yml-template', targetPath: '.github/workflows/lint-style.yml' })
11
- ]
@@ -1,32 +0,0 @@
1
- ---
2
- type: JS Module
3
- title: fix-lint_text.mjs
4
- resource: plugins/ci-github/rules/text/lint_text/fix-lint_text.mjs
5
- docgen:
6
- crc: 78ee3182
7
- model: openai-codex/gpt-5.4-mini
8
- tier: cloud-min
9
- score: 100
10
- issues: judge-refine:kept-original,judge:inaccurate:0.98
11
- judgeModel: openai-codex/gpt-5.4-mini
12
- ---
13
-
14
- ## Огляд
15
-
16
- `patterns` підтримує `.github/workflows/lint-text.yml` у канонічному стані: створює відсутній workflow з канонічного шаблону правила або доповнює наявний файл декларативним template-deep-merge, зберігаючи локальні поля.
17
-
18
- ## Поведінка
19
-
20
- 1. `patterns` визначає набір правил для T0-autofix у концерні `text/lint_text` і запускає декларативне злиття шаблону для `.github/workflows/lint-text.yml`.
21
- 2. Якщо цільовий workflow-файл відсутній, `patterns` ініціює його scaffold із канонічного шаблону правила.
22
- 3. Якщо workflow-файл уже існує, `patterns` доповнює лише канонічні поля, не перезаписуючи локальні зміни.
23
- 4. `patterns` працює в межах дозволених шляхів і свідомо пропускає `.github` та `.git`, щоб не зачіпати службові та службово-репозиторні області поза цим сценарієм.
24
-
25
- ## Публічний API
26
-
27
- - patterns — Фікс-патерни концерну: один template-deep-merge запис для `.github/workflows/lint-text.yml`.
28
-
29
- ## Гарантії поведінки
30
-
31
- - Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
32
- - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -1,9 +0,0 @@
1
- ---
2
- type: Directory Index
3
- title: plugins/ci-github/rules/text/lint_text
4
- resource: plugins/ci-github/rules/text/lint_text/
5
- ---
6
-
7
- | Файл | Тип |
8
- | ------------------------------------- | --------- |
9
- | [fix-lint_text.mjs](fix-lint_text.md) | JS Module |
@@ -1,11 +0,0 @@
1
- /**
2
- * T0-autofix концерну `text/lint_text`: деклараційний template-deep-merge —
3
- * scaffold відсутнього `.github/workflows/lint-text.yml` з канонічного шаблону правила або
4
- * дописування в наявний файл лише канонічних полів (локальні — зберігаються).
5
- */
6
- import { createTemplateFixPattern } from '@7n/rules/scripts/lib/fix/template-deep-merge.mjs'
7
-
8
- /** Фікс-патерни концерну: один template-deep-merge запис для `.github/workflows/lint-text.yml`. */
9
- export const patterns = [
10
- createTemplateFixPattern({ id: 'text-lint_text-template', targetPath: '.github/workflows/lint-text.yml' })
11
- ]